ddstats/src/database/models/race.rs

77 lines
2.1 KiB
Rust

use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use crate::database::DatabaseHandler;
#[derive(Debug, Clone, sqlx::FromRow, Serialize, Deserialize)]
pub struct Race {
pub name: String,
pub map: String,
pub time: f32,
pub timestamp: NaiveDateTime,
pub server: String,
pub checkpoints: Option<Vec<f64>>,
pub gameid: Option<String>,
pub ddnet7: i16,
}
impl Race {
pub async fn get_races_by_player(
db: &DatabaseHandler,
player: &str,
) -> Result<Vec<Race>, 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 name = $1
ORDER BY map, time
",
player
)
.fetch_all(&db.pool)
.await
}
pub async fn get_races_by_map(
db: &DatabaseHandler,
map: &str,
) -> Result<Vec<Race>, 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
}
}