48 lines
1.3 KiB
Rust
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
|
|
}
|
|
}
|