feat(admin): GET /admin/belege/{belegnummer} - volle Lieferdetails
Neuer Admin-Endpunkt, der zu einer ERP-Belegnummer das komplette Detail-Paket einer Lieferung liefert (Kopf, Positionen mit Scan-Ständen, Kunde + Ansprechpartner, referenzierte Artikel/Lager, Notizen, Geld-Gutschrift, Dienstleistungswerte, Kontakte). Jede Lieferung, unabhaengig vom Status; 404 bei unbekannter Belegnummer. Umsetzung: TourRepository::find_tour_id_by_belegnummer loest die Belegnummer auf ihre tour_id auf; der Use Case laedt das bestehende Tour-Aggregat und destilliert daraus in-memory die eine Lieferung samt referenzierter Stammdaten (neues DTO DeliveryDetails). Kein neuer grosser Query. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -15,6 +15,7 @@ use serde::{Deserialize, Serialize};
|
||||
use utoipa::ToSchema;
|
||||
use uuid::Uuid;
|
||||
|
||||
use holzleitner_application::dto::DeliveryDetails;
|
||||
use holzleitner_application::error::ApplicationError;
|
||||
use holzleitner_application::usecases::ImportSummary;
|
||||
|
||||
@ -37,6 +38,7 @@ pub fn router() -> Router<AppState> {
|
||||
"/admin/belege/{belegnummer}/positions-modified",
|
||||
get(positions_modified),
|
||||
)
|
||||
.route("/admin/belege/{belegnummer}", get(belege_details))
|
||||
.route("/admin/mark-mail-sent", post(mark_mail_sent))
|
||||
.route("/admin/reviews", get(list_reviews))
|
||||
.route("/admin/reviews/{delivery_id}/resolve", post(resolve_review))
|
||||
@ -348,6 +350,34 @@ pub async fn positions_modified(
|
||||
}))
|
||||
}
|
||||
|
||||
/// Liefert das **volle Detail-Paket** zu einer ERP-Belegnummer: die Lieferung
|
||||
/// mit Positionen (inkl. Scan-Ständen), Kunde + Ansprechpartner, referenzierte
|
||||
/// Artikel/Lager, Notizen, Geld-Gutschrift, Dienstleistungswerte und Kontakte —
|
||||
/// destilliert aus dem Tour-Aggregat. Jede Lieferung, unabhängig vom Status.
|
||||
/// `404`, wenn die Belegnummer unbekannt ist.
|
||||
#[utoipa::path(
|
||||
get,
|
||||
path = "/admin/belege/{belegnummer}",
|
||||
tag = "admin",
|
||||
params(
|
||||
("belegnummer" = String, Path, description = "ERP-Belegnummer, z. B. V-30690291")
|
||||
),
|
||||
responses(
|
||||
(status = 200, description = "Volle Lieferdetails", body = DeliveryDetails),
|
||||
(status = 401, description = "Admin-API-Key fehlt/ungültig"),
|
||||
(status = 404, description = "Belegnummer unbekannt")
|
||||
),
|
||||
security(("admin_api_key" = []))
|
||||
)]
|
||||
pub async fn belege_details(
|
||||
State(state): State<AppState>,
|
||||
Path(belegnummer): Path<String>,
|
||||
) -> Result<Json<DeliveryDetails>, ApiError> {
|
||||
tracing::info!(%belegnummer, "admin.belege_details");
|
||||
let details = state.get_delivery_details.execute(&belegnummer).await?;
|
||||
Ok(Json(details))
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, ToSchema)]
|
||||
pub struct MarkMailSentRequest {
|
||||
/// Belegnummern, deren Liefermail erfolgreich versendet wurde und die als
|
||||
|
||||
Reference in New Issue
Block a user