ddstats/src/database/models/race.rs

48 lines
1.3 KiB
Rust

use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use crate::database::DatabaseHandler;
#[derive(Debug, Clone, sqlx::FromRow, Serialize, Deserialize)]
pub struct Race {
name: Option<String>,
map: Option<String>,
time: Option<f64>,
timestamp: Option<NaiveDateTime>,
server: Option<String>,
checkpoints: Option<Vec<f64>>,
gameid: Option<String>,
ddnet7: Option<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
}
}