From e4f953acfccfdaa20a88a106caae15efdee9010a Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Fri, 6 Mar 2026 16:07:51 -0500 Subject: [PATCH] Simplify retro filtering: typed smoothness, remove double serialization - Use SmoothnessRating enum instead of String for smoothness filter param - Remove duplicate default_page_limit(), reuse pub fn from server module - Replace Json(json!(detail)) with Json(detail) to avoid double serialization Co-Authored-By: Claude Opus 4.6 (1M context) --- crates/arc-api/src/demo/mod.rs | 16 ++++------------ crates/arc-api/src/server.rs | 2 +- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/crates/arc-api/src/demo/mod.rs b/crates/arc-api/src/demo/mod.rs index 12c0dd882..451fadfe0 100644 --- a/crates/arc-api/src/demo/mod.rs +++ b/crates/arc-api/src/demo/mod.rs @@ -13,18 +13,14 @@ use crate::error::ApiError; use crate::jwt_auth::AuthenticatedService; use crate::server::{AppState, PaginationParams}; -fn default_page_limit() -> u32 { - 20 -} - #[derive(serde::Deserialize)] pub struct RetroListParams { - #[serde(rename = "page[limit]", default = "default_page_limit")] + #[serde(rename = "page[limit]", default = "crate::server::default_page_limit")] limit: u32, #[serde(rename = "page[offset]", default)] offset: u32, workflow: Option, - smoothness: Option, + smoothness: Option, } fn paginated_response(items: Vec, pagination: &PaginationParams) -> Response { @@ -248,7 +244,7 @@ pub async fn get_run_retro( Path(id): Path, ) -> Response { match retros::detail(&id) { - Some(detail) => (StatusCode::OK, Json(json!(detail))).into_response(), + Some(detail) => (StatusCode::OK, Json(detail)).into_response(), None => (StatusCode::OK, Json(json!(null))).into_response(), } } @@ -330,11 +326,7 @@ pub async fn list_retros( let items: Vec<_> = retros::list_items() .into_iter() .filter(|r| params.workflow.as_ref().map_or(true, |w| &r.workflow.slug == w)) - .filter(|r| { - params.smoothness.as_ref().map_or(true, |s| { - r.smoothness.as_ref().map_or(false, |rs| rs.to_string() == *s) - }) - }) + .filter(|r| params.smoothness.as_ref().map_or(true, |s| r.smoothness.as_ref() == Some(s))) .collect(); paginated_response(items, &PaginationParams { limit: params.limit, offset: params.offset }) } diff --git a/crates/arc-api/src/server.rs b/crates/arc-api/src/server.rs index a82bae2d5..417eb478a 100644 --- a/crates/arc-api/src/server.rs +++ b/crates/arc-api/src/server.rs @@ -33,7 +33,7 @@ pub use arc_types::{ SubmitAnswerRequest, }; -fn default_page_limit() -> u32 { +pub fn default_page_limit() -> u32 { 20 }