save match winner in database

This commit is contained in:
Ilion Beyst 2022-05-29 11:41:52 +02:00
parent 80c60ac69c
commit 6e1167ee9e
5 changed files with 26 additions and 6 deletions

View file

@ -0,0 +1,3 @@
-- This file should undo anything in `up.sql`
ALTER TABLE matches
DROP column winner;

View file

@ -0,0 +1,3 @@
-- Your SQL goes here
ALTER TABLE matches
ADD COLUMN winner integer;

View file

@ -35,6 +35,7 @@ pub struct MatchBase {
pub state: MatchState,
pub log_path: String,
pub created_at: NaiveDateTime,
pub winner: Option<i32>,
}
#[derive(Queryable, Identifiable, Associations, Clone)]
@ -158,9 +159,15 @@ pub fn find_match_base(id: i32, conn: &PgConnection) -> QueryResult<MatchBase> {
matches::table.find(id).get_result::<MatchBase>(conn)
}
pub fn set_match_state(id: i32, match_state: MatchState, conn: &PgConnection) -> QueryResult<()> {
pub enum MatchResult {
Finished { winner: Option<i32> }
}
pub fn save_match_result(id: i32, result: MatchResult, conn: &PgConnection) -> QueryResult<()> {
let MatchResult::Finished { winner } = result;
diesel::update(matches::table.find(id))
.set(matches::state.eq(match_state))
.set((matches::winner.eq(winner), matches::state.eq(MatchState::Finished)))
.execute(conn)?;
Ok(())
}
}

View file

@ -6,7 +6,10 @@ use runner::MatchOutcome;
use tokio::task::JoinHandle;
use crate::{
db::{self, matches::MatchData},
db::{
self,
matches::{MatchData, MatchResult},
},
util::gen_alphanumeric,
ConnectionPool, BOTS_DIR, MAPS_DIR, MATCHES_DIR,
};
@ -95,8 +98,11 @@ async fn run_match_task(
.await
.expect("could not get database connection");
db::matches::set_match_state(match_id, db::matches::MatchState::Finished, &conn)
.expect("could not update match state");
let result = MatchResult::Finished {
winner: outcome.winner.map(|w| (w - 1) as i32), // player numbers in matchrunner start at 1
};
db::matches::save_match_result(match_id, result, &conn).expect("could not save match result");
return outcome;
}

View file

@ -44,6 +44,7 @@ table! {
state -> Match_state,
log_path -> Text,
created_at -> Timestamp,
winner -> Nullable<Int4>,
}
}