add ratings table

This commit is contained in:
Ilion Beyst 2022-05-09 19:41:33 +02:00
parent 7b142554d8
commit a7d56ba0f5
5 changed files with 57 additions and 1 deletions

View file

@ -0,0 +1,2 @@
-- This file should undo anything in `up.sql`
drop table ratings;

View file

@ -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
)

View file

@ -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;

View 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)
}

View file

@ -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,
);