diff --git a/src/cal/day05.rs b/src/cal/day05.rs new file mode 100644 index 0000000..ffcc6d2 --- /dev/null +++ b/src/cal/day05.rs @@ -0,0 +1,33 @@ +use axum::{ + extract::Query, + response::{IntoResponse, Response}, + routing::post, + Json, Router, +}; + +pub(crate) fn router() -> Router { + Router::new().route("/5", post(five)) +} + +#[derive(serde::Deserialize)] +struct Pagination { + offset: Option, + limit: Option, + split: Option, +} + +async fn five(Query(pagination): Query, Json(names): Json>) -> Response { + let offset = pagination.offset.unwrap_or(0); + let limit = pagination.limit.unwrap_or(names.len()); + let names = names + .into_iter() + .skip(offset) + .take(limit) + .collect::>(); + if let Some(split) = pagination.split { + let names = names.chunks(split).map(|a| a.to_vec()).collect::>(); + Json(names).into_response() + } else { + Json(names).into_response() + } +} diff --git a/src/cal/mod.rs b/src/cal/mod.rs index ba80763..3d677a6 100644 --- a/src/cal/mod.rs +++ b/src/cal/mod.rs @@ -1,6 +1,7 @@ mod day00; mod day01; mod day04; +mod day05; mod day06; mod day07; mod day08; @@ -18,6 +19,7 @@ pub(crate) fn router(pool: sqlx::PgPool) -> axum::Router { .nest("/", day00::router()) .nest("/", day01::router()) .nest("/", day04::router()) + .nest("/", day05::router()) .nest("/", day06::router()) .nest("/", day07::router()) .nest("/", day08::router())