From 34b35e0795c42ed45a2c7be41eced94f518bcb2d Mon Sep 17 00:00:00 2001 From: BurnyLlama Date: Sat, 15 Apr 2023 21:07:44 +0200 Subject: [PATCH] Now all stats can be fetched... --- src/database/models/map.rs | 12 +++++----- src/database/models/mod.rs | 1 + src/database/models/race.rs | 16 +++++++------- src/database/models/teamrace.rs | 39 +++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 src/database/models/teamrace.rs diff --git a/src/database/models/map.rs b/src/database/models/map.rs index 170aa47..d29d7a9 100644 --- a/src/database/models/map.rs +++ b/src/database/models/map.rs @@ -7,7 +7,7 @@ use crate::database::DatabaseHandler; #[derive(Debug, Clone, sqlx::FromRow, Serialize, Deserialize)] pub struct Map { pub map: String, - pub mapper: String, + pub mappers: Vec, pub category: String, pub points: i16, pub stars: i16, @@ -22,7 +22,7 @@ impl Map { sqlx::query_as!( Map, " - SELECT record_maps.map, category, points, stars, mapper, release, width, height, + SELECT record_maps.map, category, points, stars, mappers, release, width, height, string_to_array(CONCAT_WS(',', CASE WHEN DEATH = '1' THEN 'DEATH' END, CASE WHEN THROUGH = '1' THEN 'THROUGH' END, @@ -75,7 +75,7 @@ impl Map { sqlx::query_as!( Map, " - SELECT record_maps.map, category, points, stars, mapper, release, width, height, + SELECT record_maps.map, category, points, stars, mappers, release, width, height, string_to_array(CONCAT_WS(',', CASE WHEN DEATH = '1' THEN 'DEATH' END, CASE WHEN THROUGH = '1' THEN 'THROUGH' END, @@ -133,7 +133,7 @@ impl Map { sqlx::query_as!( Map, " - SELECT record_maps.map, category, points, stars, mapper, release, width, height, + SELECT record_maps.map, category, points, stars, mappers, release, width, height, string_to_array(CONCAT_WS(',', CASE WHEN DEATH = '1' THEN 'DEATH' END, CASE WHEN THROUGH = '1' THEN 'THROUGH' END, @@ -191,7 +191,7 @@ impl Map { sqlx::query_as!( Map, " - SELECT record_maps.map, category, points, stars, mapper, release, width, height, + SELECT record_maps.map, category, points, stars, mappers, release, width, height, string_to_array(CONCAT_WS(',', CASE WHEN DEATH = '1' THEN 'DEATH' END, CASE WHEN THROUGH = '1' THEN 'THROUGH' END, @@ -234,7 +234,7 @@ impl Map { CASE WHEN PLASMAE = '1' THEN 'PLASMAE' END, CASE WHEN PLASMAU = '1' THEN 'PLASMAU' END), ',') AS tiles FROM record_maps JOIN record_mapinfo ON record_maps.map = record_mapinfo.map - WHERE mapper = $1; + WHERE $1 = ANY(mappers) ", mapper ) diff --git a/src/database/models/mod.rs b/src/database/models/mod.rs index 4b62041..53f5ecf 100644 --- a/src/database/models/mod.rs +++ b/src/database/models/mod.rs @@ -1,2 +1,3 @@ pub mod map; pub mod race; +pub mod teamrace; diff --git a/src/database/models/race.rs b/src/database/models/race.rs index fc0eba3..0fdc404 100644 --- a/src/database/models/race.rs +++ b/src/database/models/race.rs @@ -5,14 +5,14 @@ use crate::database::DatabaseHandler; #[derive(Debug, Clone, sqlx::FromRow, Serialize, Deserialize)] pub struct Race { - name: Option, - map: Option, - time: Option, - timestamp: Option, - server: Option, - checkpoints: Option>, - gameid: Option, - ddnet7: Option, + pub name: String, + pub map: String, + pub time: f32, + pub timestamp: NaiveDateTime, + pub server: String, + pub checkpoints: Option>, + pub gameid: Option, + pub ddnet7: i16, } impl Race { diff --git a/src/database/models/teamrace.rs b/src/database/models/teamrace.rs new file mode 100644 index 0000000..f260b3b --- /dev/null +++ b/src/database/models/teamrace.rs @@ -0,0 +1,39 @@ +use chrono::NaiveDateTime; +use serde::{Deserialize, Serialize}; + +use crate::database::DatabaseHandler; + +#[derive(Debug, Clone, sqlx::FromRow, Serialize, Deserialize)] +pub struct Teamrace { + pub players: Vec, + pub map: String, + pub time: f32, + pub timestamp: NaiveDateTime, +} + +impl Teamrace { + pub async fn get_teamrace_by_player( + db: &DatabaseHandler, + player: &str, + ) -> Result, sqlx::Error> { + sqlx::query_as!( + Teamrace, + "SELECT players, map, time, timestamp FROM record_teamrace_array WHERE $1 = ANY(players)", + player + ).fetch_all(&db.pool) + .await + } + + pub async fn get_teamrace_by_map( + db: &DatabaseHandler, + map: &str, + ) -> Result, sqlx::Error> { + sqlx::query_as!( + Teamrace, + "SELECT players, map, time, timestamp FROM record_teamrace_array WHERE map = $1", + map + ) + .fetch_all(&db.pool) + .await + } +}