81 lines
2.2 KiB
Rust
81 lines
2.2 KiB
Rust
use chrono::NaiveDateTime;
|
|
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)),
|
|
}
|
|
}
|
|
|
|
#[get("/search?<map>&<mappers>&<category>&<stars>&<release_after>&<release_before>&<tiles>")]
|
|
async fn search_maps<'a>(
|
|
db: &State<DatabaseHandler>,
|
|
map: Option<&str>,
|
|
mappers: Option<Vec<String>>,
|
|
category: Option<&str>,
|
|
stars: Option<Vec<i16>>,
|
|
release_after: Option<&str>,
|
|
release_before: Option<&str>,
|
|
tiles: Option<Vec<String>>,
|
|
) -> Result<Json<Vec<Map>>, String> {
|
|
match Map::search_maps(
|
|
db,
|
|
map,
|
|
mappers,
|
|
category,
|
|
stars,
|
|
release_after.map(|x| NaiveDateTime::parse_from_str(x, "%Y-%m-%d").unwrap()),
|
|
release_before.map(|x| NaiveDateTime::parse_from_str(x, "%Y-%m-%d").unwrap()),
|
|
tiles,
|
|
)
|
|
.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,
|
|
search_maps
|
|
]
|
|
}
|