diff options
Diffstat (limited to 'planetwars-server/src')
-rw-r--r-- | planetwars-server/src/db/matches.rs | 13 | ||||
-rw-r--r-- | planetwars-server/src/modules/matches.rs | 12 | ||||
-rw-r--r-- | planetwars-server/src/schema.rs | 1 |
3 files changed, 20 insertions, 6 deletions
diff --git a/planetwars-server/src/db/matches.rs b/planetwars-server/src/db/matches.rs index 42689d1..ee25e85 100644 --- a/planetwars-server/src/db/matches.rs +++ b/planetwars-server/src/db/matches.rs @@ -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(()) -} +}
\ No newline at end of file diff --git a/planetwars-server/src/modules/matches.rs b/planetwars-server/src/modules/matches.rs index 201c6d4..a254bac 100644 --- a/planetwars-server/src/modules/matches.rs +++ b/planetwars-server/src/modules/matches.rs @@ -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; } diff --git a/planetwars-server/src/schema.rs b/planetwars-server/src/schema.rs index 812e05e..be3e858 100644 --- a/planetwars-server/src/schema.rs +++ b/planetwars-server/src/schema.rs @@ -44,6 +44,7 @@ table! { state -> Match_state, log_path -> Text, created_at -> Timestamp, + winner -> Nullable<Int4>, } } |