quokka-admin 0.1.0

An admin panel for quokka
Documentation
use axum::{
    extract::{Path, State},
    response::{IntoResponse, Redirect},
};
use quokka::{extract::Extensions, handler::html::TemplateDataLoader, state::ProvideState};

use crate::{
    data::Severity,
    service::{page_loader::AdminPageLoader, AdminListing},
};

/// Does the deletion
pub async fn post_delete_entity<S: Send + Sync + 'static, L: AdminListing<S>>(
    State(state): State<S>,
    Path(params): Path<L::PrimaryKeys>,
) -> impl IntoResponse
where
    S: ProvideState<AdminPageLoader>,
{
    let result = L::delete_entity(params, &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 deleted the entity")),
        Redirect::to(&format!("/admin/entity/{}", L::entity_name())),
    )
        .into_response()
}