From dd08e84572c6204fbb07bc6faa1bb34c562dd5ab Mon Sep 17 00:00:00 2001 From: Jon Seager Date: Wed, 4 Feb 2026 20:57:26 +0000 Subject: [PATCH] fix(data): fix search bar 400 error on data page Split Query (which used #[serde(flatten)]) into two separate extractors, since serde_urlencoded doesn't support flatten and coerces all flattened values to strings, breaking u32 parsing. --- src/application/routes/data.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/application/routes/data.rs b/src/application/routes/data.rs index 803fa8b..0dcbcb2 100644 --- a/src/application/routes/data.rs +++ b/src/application/routes/data.rs @@ -44,28 +44,27 @@ const TABS: &[DataTab] = &[ ]; #[derive(Debug, Deserialize)] -pub struct DataQuery { +pub(crate) struct DataType { #[serde(rename = "type", default = "default_type")] entity_type: String, - #[serde(flatten)] - list: ListQuery, } fn default_type() -> String { "brews".to_string() } -#[tracing::instrument(skip(state, cookies, headers, query))] +#[tracing::instrument(skip(state, cookies, headers, data_type, list_query))] pub(crate) async fn data_page( State(state): State, cookies: tower_cookies::Cookies, headers: HeaderMap, - Query(query): Query, + Query(data_type): Query, + Query(list_query): Query, ) -> Result { - let entity_type = query.entity_type.clone(); + let entity_type = data_type.entity_type; let is_authenticated = super::is_authenticated(&state, &cookies).await; - let content = render_entity_content(&state, &entity_type, query.list, is_authenticated) + let content = render_entity_content(&state, &entity_type, list_query, is_authenticated) .await .map_err(map_app_error)?;