diff options
author | Ilion Beyst <ilion.beyst@gmail.com> | 2022-10-30 16:20:29 +0100 |
---|---|---|
committer | Ilion Beyst <ilion.beyst@gmail.com> | 2022-10-30 16:23:35 +0100 |
commit | f429adb4f8607ef9b8b8e2c9fa3634c5f39a5602 (patch) | |
tree | de4209bf4e00c01f70263deea148c56a8dd96436 | |
parent | 00d31df58d0ea68b11600d98ebf53150a2a0cb88 (diff) | |
download | planetwars.dev-f429adb4f8607ef9b8b8e2c9fa3634c5f39a5602.tar.xz planetwars.dev-f429adb4f8607ef9b8b8e2c9fa3634c5f39a5602.zip |
allow filtering map in bot matches
-rw-r--r-- | planetwars-server/src/db/match_queries.rs | 5 | ||||
-rw-r--r-- | planetwars-server/src/db/matches.rs | 2 | ||||
-rw-r--r-- | planetwars-server/src/routes/matches.rs | 11 |
3 files changed, 18 insertions, 0 deletions
diff --git a/planetwars-server/src/db/match_queries.rs b/planetwars-server/src/db/match_queries.rs index f9f8140..029a657 100644 --- a/planetwars-server/src/db/match_queries.rs +++ b/planetwars-server/src/db/match_queries.rs @@ -12,6 +12,7 @@ pub struct ListBotMatches { pub outcome: Option<BotMatchOutcome>, pub opponent_id: Option<i32>, + pub map_id: Option<i32>, // pagination options pub before: Option<NaiveDateTime>, @@ -55,6 +56,10 @@ impl QueryFragment<Pg> for ListBotMatches { } out.push_sql(" WHERE matches.state = 'finished' AND matches.is_public = true"); + if let Some(map_id) = self.map_id.as_ref() { + out.push_sql(" AND matches.map_id = "); + out.push_bind_param::<Integer, _>(map_id)?; + } if let Some(outcome) = self.outcome.as_ref() { match outcome { BotMatchOutcome::Win => { diff --git a/planetwars-server/src/db/matches.rs b/planetwars-server/src/db/matches.rs index c86f332..2aff44b 100644 --- a/planetwars-server/src/db/matches.rs +++ b/planetwars-server/src/db/matches.rs @@ -176,6 +176,7 @@ pub fn list_public_matches( pub fn list_bot_matches( bot_id: i32, opponent_id: Option<i32>, + map_id: Option<i32>, outcome: Option<BotMatchOutcome>, had_errors: Option<bool>, amount: i64, @@ -188,6 +189,7 @@ pub fn list_bot_matches( outcome, had_errors, opponent_id, + map_id, before, after, amount, diff --git a/planetwars-server/src/routes/matches.rs b/planetwars-server/src/routes/matches.rs index 39c153d..1ae8c27 100644 --- a/planetwars-server/src/routes/matches.rs +++ b/planetwars-server/src/routes/matches.rs @@ -45,6 +45,7 @@ pub struct ListRecentMatchesParams { bot: Option<String>, opponent: Option<String>, + map: Option<String>, had_errors: Option<bool>, outcome: Option<BotMatchOutcome>, } @@ -72,6 +73,7 @@ pub async fn list_recent_matches( let matches_result = match params.bot { Some(bot_name) => { + // TODO: do we prefer BAD_REQUEST for invalid parameters, or do we want to return an empty response? let bot = db::bots::find_bot_by_name(&bot_name, &mut conn) .map_err(|_| StatusCode::BAD_REQUEST)?; @@ -83,9 +85,18 @@ pub async fn list_recent_matches( None }; + let map_id = if let Some(ref map_name) = params.map { + let map = db::maps::find_map_by_name(map_name, &mut conn) + .map_err(|_| StatusCode::BAD_REQUEST)?; + Some(map.id) + } else { + None + }; + matches::list_bot_matches( bot.id, opponent_id, + map_id, params.outcome, params.had_errors, count, |