add ratings table
This commit is contained in:
parent
7b142554d8
commit
a7d56ba0f5
5 changed files with 57 additions and 1 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
-- This file should undo anything in `up.sql`
|
||||||
|
drop table ratings;
|
|
@ -0,0 +1,7 @@
|
||||||
|
-- Your SQL goes here
|
||||||
|
-- this table could later be expanded to include more information,
|
||||||
|
-- such as rating state (eg. number of matches played) or scope (eg. map)
|
||||||
|
create table ratings (
|
||||||
|
bot_id integer PRIMARY KEY REFERENCES bots(id),
|
||||||
|
rating float NOT NULL
|
||||||
|
)
|
|
@ -1,4 +1,5 @@
|
||||||
pub mod bots;
|
pub mod bots;
|
||||||
pub mod matches;
|
pub mod matches;
|
||||||
|
pub mod ratings;
|
||||||
pub mod sessions;
|
pub mod sessions;
|
||||||
pub mod users;
|
pub mod users;
|
||||||
|
|
27
planetwars-server/src/db/ratings.rs
Normal file
27
planetwars-server/src/db/ratings.rs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
use diesel::{prelude::*, PgConnection, QueryResult};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::schema::{bots, ratings};
|
||||||
|
|
||||||
|
#[derive(Queryable, Debug, Insertable, PartialEq, Serialize, Deserialize)]
|
||||||
|
pub struct Rating {
|
||||||
|
pub bot_id: i32,
|
||||||
|
pub rating: f64,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_rating(bot_id: i32, db_conn: &PgConnection) -> QueryResult<Option<f64>> {
|
||||||
|
ratings::table
|
||||||
|
.filter(ratings::bot_id.eq(bot_id))
|
||||||
|
.select(ratings::rating)
|
||||||
|
.first(db_conn)
|
||||||
|
.optional()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_rating(bot_id: i32, rating: f64, db_conn: &PgConnection) -> QueryResult<usize> {
|
||||||
|
diesel::insert_into(ratings::table)
|
||||||
|
.values(Rating { bot_id, rating })
|
||||||
|
.on_conflict(ratings::bot_id)
|
||||||
|
.do_update()
|
||||||
|
.set(ratings::rating.eq(rating))
|
||||||
|
.execute(db_conn)
|
||||||
|
}
|
|
@ -47,6 +47,16 @@ table! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table! {
|
||||||
|
use diesel::sql_types::*;
|
||||||
|
use crate::db_types::*;
|
||||||
|
|
||||||
|
ratings (bot_id) {
|
||||||
|
bot_id -> Int4,
|
||||||
|
rating -> Float8,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
table! {
|
table! {
|
||||||
use diesel::sql_types::*;
|
use diesel::sql_types::*;
|
||||||
use crate::db_types::*;
|
use crate::db_types::*;
|
||||||
|
@ -74,6 +84,15 @@ joinable!(bots -> users (owner_id));
|
||||||
joinable!(code_bundles -> bots (bot_id));
|
joinable!(code_bundles -> bots (bot_id));
|
||||||
joinable!(match_players -> code_bundles (code_bundle_id));
|
joinable!(match_players -> code_bundles (code_bundle_id));
|
||||||
joinable!(match_players -> matches (match_id));
|
joinable!(match_players -> matches (match_id));
|
||||||
|
joinable!(ratings -> bots (bot_id));
|
||||||
joinable!(sessions -> users (user_id));
|
joinable!(sessions -> users (user_id));
|
||||||
|
|
||||||
allow_tables_to_appear_in_same_query!(bots, code_bundles, match_players, matches, sessions, users,);
|
allow_tables_to_appear_in_same_query!(
|
||||||
|
bots,
|
||||||
|
code_bundles,
|
||||||
|
match_players,
|
||||||
|
matches,
|
||||||
|
ratings,
|
||||||
|
sessions,
|
||||||
|
users,
|
||||||
|
);
|
||||||
|
|
Loading…
Reference in a new issue