77 lines
2.1 KiB
Rust
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
|
|
}
|
|
}
|