From 71ed4d8b703f981e3c3e38eebd772c1bf1f9ca96 Mon Sep 17 00:00:00 2001 From: BurnyLlama Date: Sat, 15 Apr 2023 22:08:04 +0200 Subject: [PATCH] Added way to get races by map. --- src/api/races.rs | 15 +++++++++++++-- src/database/models/race.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/api/races.rs b/src/api/races.rs index 7c18c3b..6bf16d6 100644 --- a/src/api/races.rs +++ b/src/api/races.rs @@ -13,6 +13,17 @@ async fn get_races_by_player( } } -pub fn get_all_routes() -> Vec { - routes![get_races_by_player] +#[get("/map/")] +async fn get_races_by_map( + db: &State, + map: &str, +) -> Result>, String> { + match Race::get_races_by_map(db, map).await { + Ok(maps) => Ok(Json(maps)), + Err(err) => Err(format!("Error: {}", err)), + } +} + +pub fn get_all_routes() -> Vec { + routes![get_races_by_player, get_races_by_map] } diff --git a/src/database/models/race.rs b/src/database/models/race.rs index 0fdc404..d4e3e21 100644 --- a/src/database/models/race.rs +++ b/src/database/models/race.rs @@ -44,4 +44,33 @@ impl Race { .fetch_all(&db.pool) .await } + + pub async fn get_races_by_map( + db: &DatabaseHandler, + map: &str, + ) -> Result, sqlx::Error> { + sqlx::query_as!( + Race, + " + SELECT name, + map, + time, + timestamp, + server, + ARRAY[cp1, cp2, cp3, cp4, cp5, + cp6, cp7, cp8, cp9, cp10, + cp11, cp12, cp13, cp14, cp15, + cp16, cp17, cp18, cp19, cp20, + cp21, cp22, cp23, cp24, cp25 + ] AS checkpoints, + gameid, + ddnet7 + FROM record_race WHERE map = $1 + ORDER BY map, time + ", + map + ) + .fetch_all(&db.pool) + .await + } }