refactor: use update_response helper in update handlers
Replace duplicated datastar/form/json response branching in brew, cup, and roast update handlers with the shared update_response helper.
This commit is contained in:
parent
167af65943
commit
a1aefda860
3 changed files with 36 additions and 39 deletions
|
|
@ -12,7 +12,7 @@ use crate::application::routes::api::images::save_deferred_image;
|
||||||
use crate::application::routes::api::macros::{define_delete_handler, define_enriched_get_handler};
|
use crate::application::routes::api::macros::{define_delete_handler, define_enriched_get_handler};
|
||||||
use crate::application::routes::support::{
|
use crate::application::routes::support::{
|
||||||
FlexiblePayload, ListQuery, PayloadSource, impl_has_changes, is_datastar_request,
|
FlexiblePayload, ListQuery, PayloadSource, impl_has_changes, is_datastar_request,
|
||||||
validate_update,
|
update_response, validate_update,
|
||||||
};
|
};
|
||||||
use crate::application::state::AppState;
|
use crate::application::state::AppState;
|
||||||
use crate::domain::bags::BagFilter;
|
use crate::domain::bags::BagFilter;
|
||||||
|
|
@ -64,10 +64,11 @@ pub(crate) async fn load_brew_form_data(state: &AppState) -> Result<BrewFormData
|
||||||
|
|
||||||
let gear_request = ListRequest::show_all(GearSortKey::Make, SortDirection::Asc);
|
let gear_request = ListRequest::show_all(GearSortKey::Make, SortDirection::Asc);
|
||||||
|
|
||||||
let grinder_options = load_gear_options(state, GearCategory::Grinder, &gear_request).await?;
|
let (grinder_options, brewer_options, filter_paper_options) = tokio::try_join!(
|
||||||
let brewer_options = load_gear_options(state, GearCategory::Brewer, &gear_request).await?;
|
load_gear_options(state, GearCategory::Grinder, &gear_request),
|
||||||
let filter_paper_options =
|
load_gear_options(state, GearCategory::Brewer, &gear_request),
|
||||||
load_gear_options(state, GearCategory::FilterPaper, &gear_request).await?;
|
load_gear_options(state, GearCategory::FilterPaper, &gear_request),
|
||||||
|
)?;
|
||||||
|
|
||||||
let last_brew_request = ListRequest::new(
|
let last_brew_request = ListRequest::new(
|
||||||
1,
|
1,
|
||||||
|
|
@ -419,20 +420,18 @@ pub(crate) async fn update_brew(
|
||||||
save_deferred_image(&state, "brew", i64::from(id), image_data_url.as_deref()).await;
|
save_deferred_image(&state, "brew", i64::from(id), image_data_url.as_deref()).await;
|
||||||
|
|
||||||
let detail_url = format!("/brews/{id}");
|
let detail_url = format!("/brews/{id}");
|
||||||
|
let enriched = state
|
||||||
|
.brew_repo
|
||||||
|
.get_with_details(id)
|
||||||
|
.await
|
||||||
|
.map_err(AppError::from)?;
|
||||||
|
|
||||||
if is_datastar_request(&headers) {
|
update_response(
|
||||||
crate::application::routes::support::render_redirect_script(&detail_url)
|
&headers,
|
||||||
.map_err(ApiError::from)
|
source,
|
||||||
} else if matches!(source, PayloadSource::Form) {
|
&detail_url,
|
||||||
Ok(Redirect::to(&detail_url).into_response())
|
Json(enriched).into_response(),
|
||||||
} else {
|
)
|
||||||
let enriched = state
|
|
||||||
.brew_repo
|
|
||||||
.get_with_details(id)
|
|
||||||
.await
|
|
||||||
.map_err(AppError::from)?;
|
|
||||||
Ok(Json(enriched).into_response())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
define_delete_handler!(
|
define_delete_handler!(
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ use crate::application::routes::api::macros::{
|
||||||
use crate::application::routes::support::impl_has_changes;
|
use crate::application::routes::support::impl_has_changes;
|
||||||
use crate::application::routes::support::{
|
use crate::application::routes::support::{
|
||||||
FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, render_redirect_script,
|
FlexiblePayload, ListQuery, PayloadSource, is_datastar_request, render_redirect_script,
|
||||||
validate_update,
|
update_response, validate_update,
|
||||||
};
|
};
|
||||||
use crate::application::state::AppState;
|
use crate::application::state::AppState;
|
||||||
use crate::domain::cups::{CupFilter, CupSortKey, CupWithDetails, NewCup, UpdateCup};
|
use crate::domain::cups::{CupFilter, CupSortKey, CupWithDetails, NewCup, UpdateCup};
|
||||||
|
|
@ -146,19 +146,18 @@ pub(crate) async fn update_cup(
|
||||||
save_deferred_image(&state, "cup", i64::from(cup.id), image_data_url.as_deref()).await;
|
save_deferred_image(&state, "cup", i64::from(cup.id), image_data_url.as_deref()).await;
|
||||||
|
|
||||||
let detail_url = format!("/cups/{id}");
|
let detail_url = format!("/cups/{id}");
|
||||||
|
let enriched = state
|
||||||
|
.cup_repo
|
||||||
|
.get_with_details(id)
|
||||||
|
.await
|
||||||
|
.map_err(AppError::from)?;
|
||||||
|
|
||||||
if is_datastar_request(&headers) {
|
update_response(
|
||||||
render_redirect_script(&detail_url).map_err(ApiError::from)
|
&headers,
|
||||||
} else if matches!(source, PayloadSource::Form) {
|
source,
|
||||||
Ok(Redirect::to(&detail_url).into_response())
|
&detail_url,
|
||||||
} else {
|
Json(enriched).into_response(),
|
||||||
let enriched = state
|
)
|
||||||
.cup_repo
|
|
||||||
.get_with_details(id)
|
|
||||||
.await
|
|
||||||
.map_err(AppError::from)?;
|
|
||||||
Ok(Json(enriched).into_response())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
define_delete_handler!(
|
define_delete_handler!(
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ use crate::application::routes::api::macros::{
|
||||||
};
|
};
|
||||||
use crate::application::routes::support::{
|
use crate::application::routes::support::{
|
||||||
FlexiblePayload, ListQuery, PayloadSource, impl_has_changes, is_datastar_request,
|
FlexiblePayload, ListQuery, PayloadSource, impl_has_changes, is_datastar_request,
|
||||||
render_redirect_script, validate_update,
|
render_redirect_script, update_response, validate_update,
|
||||||
};
|
};
|
||||||
use crate::application::state::AppState;
|
use crate::application::state::AppState;
|
||||||
use crate::domain::ids::{RoastId, RoasterId};
|
use crate::domain::ids::{RoastId, RoasterId};
|
||||||
|
|
@ -262,13 +262,12 @@ pub(crate) async fn update_roast(
|
||||||
enriched.roaster_slug, enriched.roast.slug
|
enriched.roaster_slug, enriched.roast.slug
|
||||||
);
|
);
|
||||||
|
|
||||||
if is_datastar_request(&headers) {
|
update_response(
|
||||||
render_redirect_script(&detail_url).map_err(ApiError::from)
|
&headers,
|
||||||
} else if matches!(source, PayloadSource::Form) {
|
source,
|
||||||
Ok(Redirect::to(&detail_url).into_response())
|
&detail_url,
|
||||||
} else {
|
Json(enriched).into_response(),
|
||||||
Ok(Json(enriched).into_response())
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue