104 lines
2.4 KiB
Rust
104 lines
2.4 KiB
Rust
#[macro_use]
|
|
extern crate rocket;
|
|
|
|
use database::create_pool;
|
|
use rocket::serde::json::Json;
|
|
use rocket::State;
|
|
|
|
extern crate dotenv;
|
|
use dotenv::dotenv;
|
|
|
|
mod database;
|
|
use database::{map::Map, race::Race, DatabasePoolStore};
|
|
|
|
#[get("/maps")]
|
|
fn get_all_maps(db_pool: &State<DatabasePoolStore>) -> Option<Json<Vec<Map>>> {
|
|
match database::get_maps(&db_pool.0) {
|
|
Ok(maps) => Some(Json(maps)),
|
|
Err(err) => {
|
|
println!("{err}");
|
|
None
|
|
}
|
|
}
|
|
}
|
|
|
|
#[get("/maps/<map>")]
|
|
fn get_map_by_name(db_pool: &State<DatabasePoolStore>, map: &str) -> Option<Json<Map>> {
|
|
match database::get_map_by_name(&db_pool.0, map) {
|
|
Ok(map) => map.map(Json),
|
|
Err(err) => {
|
|
println!("{err}");
|
|
None
|
|
}
|
|
}
|
|
}
|
|
|
|
#[get("/races/by-player/<player>")]
|
|
fn get_races_by_player(
|
|
db_pool: &State<DatabasePoolStore>,
|
|
player: &str,
|
|
) -> Option<Json<Vec<Race>>> {
|
|
match database::get_races_by_player(&db_pool.0, player) {
|
|
Ok(races) => Some(Json(races)),
|
|
Err(err) => {
|
|
println!("{err}");
|
|
None
|
|
}
|
|
}
|
|
}
|
|
|
|
#[get("/races/by-id/<id>")]
|
|
fn get_races_by_id(db_pool: &State<DatabasePoolStore>, id: &str) -> Option<Json<Vec<Race>>> {
|
|
match database::get_races_by_id(&db_pool.0, id) {
|
|
Ok(races) => Some(Json(races)),
|
|
Err(err) => {
|
|
println!("{err}");
|
|
None
|
|
}
|
|
}
|
|
}
|
|
|
|
#[get("/races/by-map/<map>")]
|
|
fn get_races_by_map(db_pool: &State<DatabasePoolStore>, map: &str) -> Option<Json<Vec<Race>>> {
|
|
match database::get_races_by_map(&db_pool.0, map) {
|
|
Ok(races) => Some(Json(races)),
|
|
Err(err) => {
|
|
println!("{err}");
|
|
None
|
|
}
|
|
}
|
|
}
|
|
|
|
#[get("/player/<player>/playtime")]
|
|
fn get_player_playtime(
|
|
db_pool: &State<DatabasePoolStore>,
|
|
player: &str,
|
|
) -> Option<Json<(Option<f64>, Option<i32>)>> {
|
|
match database::get_player_total_playtime(&db_pool.0, player) {
|
|
Ok(playtime) => Some(Json(playtime)),
|
|
Err(err) => {
|
|
println!("{err}");
|
|
None
|
|
}
|
|
}
|
|
}
|
|
|
|
#[launch]
|
|
fn rocket() -> _ {
|
|
dotenv().ok();
|
|
|
|
let db_pool = create_pool();
|
|
|
|
rocket::build().manage(DatabasePoolStore(db_pool)).mount(
|
|
"/",
|
|
routes![
|
|
get_all_maps,
|
|
get_map_by_name,
|
|
get_races_by_player,
|
|
get_races_by_id,
|
|
get_races_by_map,
|
|
get_player_playtime
|
|
],
|
|
)
|
|
}
|