return json error when malformed query

This commit is contained in:
Moritz Hölting 2024-07-02 20:52:13 +02:00
parent 82e9c6b9f4
commit fd85acaec2
1 changed files with 13 additions and 4 deletions

View File

@ -58,10 +58,10 @@ async fn index() -> impl Responder {
})) }))
} }
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)] #[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
struct MenuQuery { struct MenuQuery {
#[serde(rename = "d")] #[serde(rename = "d")]
days_ahead: Option<u32>, days_ahead: Option<String>,
} }
#[get("/menu/{canteen}")] #[get("/menu/{canteen}")]
@ -77,12 +77,21 @@ async fn menu_today(
.collect_vec(); .collect_vec();
if canteens.iter().all(Result::is_ok) { if canteens.iter().all(Result::is_ok) {
let canteens = canteens.into_iter().filter_map(Result::ok).collect_vec(); let canteens = canteens.into_iter().filter_map(Result::ok).collect_vec();
let days_ahead = query.days_ahead.unwrap_or(0); let days_ahead = query
let date = (Utc::now() + CDuration::days(days_ahead as i64)).date_naive(); .days_ahead
.as_ref()
.map_or(Ok(0), |d| d.parse::<i64>());
if let Ok(days_ahead) = days_ahead {
let date = (Utc::now() + CDuration::days(days_ahead)).date_naive();
let menu = cache.get_combined(&canteens, date).await; let menu = cache.get_combined(&canteens, date).await;
HttpResponse::Ok().json(menu) HttpResponse::Ok().json(menu)
} else {
HttpResponse::BadRequest().json(json!({
"error": "Invalid days query"
}))
}
} else { } else {
HttpResponse::BadRequest().json(json!({ HttpResponse::BadRequest().json(json!({
"error": "Invalid canteen identifier", "error": "Invalid canteen identifier",