quokka-admin 0.1.0

An admin panel for quokka
Documentation
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},
};

/// Does the deletion
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()
}