ddstats/src/api/maps.rs

51 lines
1.3 KiB
Rust

use rocket::{serde::json::Json, Route, State};
use crate::database::{models::map::Map, DatabaseHandler};
#[get("/")]
async fn get_all_maps(db: &State<DatabaseHandler>) -> Result<Json<Vec<Map>>, String> {
match Map::get_all_maps(db).await {
Ok(maps) => Ok(Json(maps)),
Err(err) => Err(format!("Error: {}", err)),
}
}
#[get("/by-name/<name>")]
async fn get_map_by_name(db: &State<DatabaseHandler>, name: &str) -> Result<Json<Map>, String> {
match Map::get_map_by_name(db, name).await {
Ok(maps) => Ok(Json(maps)),
Err(err) => Err(format!("Error: {}", err)),
}
}
#[get("/category/<category>")]
async fn get_maps_by_category(
db: &State<DatabaseHandler>,
category: &str,
) -> Result<Json<Vec<Map>>, String> {
match Map::get_maps_by_category(db, category).await {
Ok(maps) => Ok(Json(maps)),
Err(err) => Err(format!("Error: {}", err)),
}
}
#[get("/mapper/<mapper>")]
async fn get_maps_by_mapper(
db: &State<DatabaseHandler>,
mapper: &str,
) -> Result<Json<Vec<Map>>, String> {
match Map::get_maps_by_mapper(db, mapper).await {
Ok(maps) => Ok(Json(maps)),
Err(err) => Err(format!("Error: {}", err)),
}
}
pub fn get_all_routes() -> Vec<Route> {
routes![
get_all_maps,
get_map_by_name,
get_maps_by_category,
get_maps_by_mapper
]
}