diff options
author | Ilion Beyst <ilion.beyst@gmail.com> | 2022-05-29 11:41:52 +0200 |
---|---|---|
committer | Ilion Beyst <ilion.beyst@gmail.com> | 2022-05-29 11:41:52 +0200 |
commit | 6e1167ee9e4ce2bef3c4a7f38efc362be1d750cd (patch) | |
tree | e50eef4b59704f552158829793c745fe90452bff | |
parent | 80c60ac69c9b0d86a4536eeac82cf266eb4430bc (diff) | |
download | planetwars.dev-6e1167ee9e4ce2bef3c4a7f38efc362be1d750cd.tar.xz planetwars.dev-6e1167ee9e4ce2bef3c4a7f38efc362be1d750cd.zip |
save match winner in database
5 files changed, 26 insertions, 6 deletions
diff --git a/planetwars-server/migrations/2022-05-29-085905_add_winner_to_matches/down.sql b/planetwars-server/migrations/2022-05-29-085905_add_winner_to_matches/down.sql new file mode 100644 index 0000000..1deada2 --- /dev/null +++ b/planetwars-server/migrations/2022-05-29-085905_add_winner_to_matches/down.sql @@ -0,0 +1,3 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE matches +DROP column winner;
\ No newline at end of file diff --git a/planetwars-server/migrations/2022-05-29-085905_add_winner_to_matches/up.sql b/planetwars-server/migrations/2022-05-29-085905_add_winner_to_matches/up.sql new file mode 100644 index 0000000..6212ebd --- /dev/null +++ b/planetwars-server/migrations/2022-05-29-085905_add_winner_to_matches/up.sql @@ -0,0 +1,3 @@ +-- Your SQL goes here +ALTER TABLE matches +ADD COLUMN winner integer;
\ No newline at end of file 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>, } } |