use axum::{
extract::State,
response::{IntoResponse, Redirect},
Form,
};
use quokka::{extract::Extensions, handler::html::TemplateDataLoader, state::ProvideState};
use crate::{
data::Severity,
service::{page_loader::AdminPageLoader, AdminCreateForm},
};
pub async fn post_create_entity<S: Send + Sync + 'static, L: AdminCreateForm<S>>(
State(state): State<S>,
Form(data): Form<L>,
) -> impl IntoResponse
where
S: ProvideState<AdminPageLoader>,
{
let result = data.create_query(&state).await;
if let Err(error) = result {
let loader: AdminPageLoader = state.provide();
return <AdminPageLoader as TemplateDataLoader<S>>::render_error(&loader, error)
.await
.into_response();
}
(
Extensions::new()
.add(Severity::Success.message("Entity removed", "Successfully created the entity")),
Redirect::to(&format!("/admin/entity/{}", L::entity_name())),
)
.into_response()
}