Bringt das Backend vom initialen Skeleton auf den aktuellen Arbeitsstand (Clean Architecture: domain → application → infrastructure → api). Wesentliche Bereiche: - ERP-Anbindung (MSSQL-Pull der Touren, Import-Scheduler, Rückschreiben) - Lieferlebenszyklus: Scan/Hold/Cancel/Complete, Gutschriften, Notizen, Bild-Anhänge, Unterschriften, PDF-Lieferreport → DOCUframe - Stammdaten: Kunden, Artikel, Lager, Zahlungsarten, Services - Keycloak-JWT-Gate + Fahrer-Provisionierung via Admin-API - Admin-API-Key-Gate (X-Admin-Api-Key) für Maschinen-Endpunkte Jüngste Änderungen dieser Session: - Belegspezifische Kontaktdaten: alle ERP-Adressen (Beleg-/Liefer-/ Rechnungsadresse, Ansprechpartner, Kundenstamm) mit Telefon/Mobil/ E-Mail werden gesynct (Migration 0029, MSSQL-Query, TourDetails) - Konfiguration von .env (envy/dotenvy) auf config.toml (toml/serde) umgestellt; Vorlage config.example.toml, Pfad via HOLZLEITNER_CONFIG Nicht im Repo (per .gitignore): config.toml (Secrets), data/ (Laufzeit-/ Kundendaten), demo.mp4, .claude/, variocontrol-ai/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
79 lines
4.4 KiB
Rust
79 lines
4.4 KiB
Rust
use std::sync::Arc;
|
|
|
|
use holzleitner_application::ports::AuthService;
|
|
use holzleitner_application::usecases::{
|
|
ApplyDeliveryActionUseCase, ApplyDeliveryCreditEventUseCase, ApplyScansUseCase,
|
|
AssignCarToDeliveryUseCase, CompleteDeliveryUseCase, CreateDeliveryNoteUseCase,
|
|
CreateMyCarUseCase, CreatePaymentMethodUseCase, CreateServiceUseCase,
|
|
DeleteDeliveryNoteUseCase, DeleteDeliveryServiceUseCase, DeletePaymentMethodUseCase,
|
|
DeleteServiceUseCase, DevResyncToursUseCase, GenerateDeliveryReportUseCase, GetAccountUseCase,
|
|
GetAttachmentPreviewUseCase, GetTourUseCase,
|
|
ImportErpToursUseCase, ListDeliveredBelegnummernUseCase, ListMyCarsUseCase,
|
|
ListMyToursTodayUseCase, ListPaymentMethodsUseCase,
|
|
ListServicesUseCase, MarkMailSentUseCase, ProcessDeliveryReportUseCase,
|
|
PushCompletionToErpUseCase,
|
|
SetDeliveryOrderUseCase, SetDeliveryServiceUseCase, SyncTourUseCase, UpdateDeliveryNoteUseCase,
|
|
UpdateMyCarUseCase, UpdatePaymentMethodUseCase, UpdateServiceUseCase,
|
|
UploadDeliveryNoteImageUseCase,
|
|
};
|
|
|
|
/// Shared application state, der per Axum's `State`-Extractor in alle
|
|
/// Handler hineingegeben wird. Use Cases und Services liegen hinter
|
|
/// `Arc`, damit `Clone` billig ist und Requests sich keine Locks teilen.
|
|
///
|
|
/// Das `AppState`-Klon wird zudem in die JWT-Middleware geschleust
|
|
/// (`from_fn_with_state`), die den `auth_service` nutzt — derselbe
|
|
/// Trait-Objekt-Arc wie die Handler.
|
|
#[derive(Clone)]
|
|
pub struct AppState {
|
|
pub get_account: Arc<GetAccountUseCase>,
|
|
pub get_tour: Arc<GetTourUseCase>,
|
|
pub list_my_tours_today: Arc<ListMyToursTodayUseCase>,
|
|
pub sync_tour: Arc<SyncTourUseCase>,
|
|
pub import_erp_tours: Arc<ImportErpToursUseCase>,
|
|
/// DEV-ONLY: überschreibender Resync (löscht Postgres + importiert neu).
|
|
pub dev_resync_tours: Arc<DevResyncToursUseCase>,
|
|
/// Erzeugt den PDF-Lieferreport (lokal — Dev-Endpoint + Fallback ohne Upload).
|
|
pub generate_delivery_report: Arc<GenerateDeliveryReportUseCase>,
|
|
/// Überträgt den Report an DOCUframe (Upload → Makro → Cleanup) — beim
|
|
/// Abschluss (Hintergrund) + Retry-Cron + Dev-Endpoint.
|
|
pub process_delivery_report: Arc<ProcessDeliveryReportUseCase>,
|
|
/// Spiegelt `REPORT_UPLOAD_ENABLED`: steuert, ob beim Abschluss die
|
|
/// DOCUframe-Übertragung läuft (an) oder nur lokal erzeugt wird (aus).
|
|
pub report_upload_enabled: bool,
|
|
pub set_delivery_order: Arc<SetDeliveryOrderUseCase>,
|
|
pub apply_scans: Arc<ApplyScansUseCase>,
|
|
pub apply_delivery_action: Arc<ApplyDeliveryActionUseCase>,
|
|
pub complete_delivery: Arc<CompleteDeliveryUseCase>,
|
|
pub push_completion_to_erp: Arc<PushCompletionToErpUseCase>,
|
|
/// Admin: Belegnummern offener (noch nicht versendeter) Lieferungen.
|
|
pub list_delivered_belegnummern: Arc<ListDeliveredBelegnummernUseCase>,
|
|
/// Admin: Liefermails von Belegnummern als versendet markieren (Dedup).
|
|
pub mark_mail_sent: Arc<MarkMailSentUseCase>,
|
|
pub apply_delivery_credit_event: Arc<ApplyDeliveryCreditEventUseCase>,
|
|
pub create_delivery_note: Arc<CreateDeliveryNoteUseCase>,
|
|
pub update_delivery_note: Arc<UpdateDeliveryNoteUseCase>,
|
|
pub delete_delivery_note: Arc<DeleteDeliveryNoteUseCase>,
|
|
pub upload_delivery_note_image: Arc<UploadDeliveryNoteImageUseCase>,
|
|
pub get_attachment_preview: Arc<GetAttachmentPreviewUseCase>,
|
|
pub list_my_cars: Arc<ListMyCarsUseCase>,
|
|
pub create_my_car: Arc<CreateMyCarUseCase>,
|
|
pub update_my_car: Arc<UpdateMyCarUseCase>,
|
|
pub assign_car_to_delivery: Arc<AssignCarToDeliveryUseCase>,
|
|
pub list_payment_methods: Arc<ListPaymentMethodsUseCase>,
|
|
pub create_payment_method: Arc<CreatePaymentMethodUseCase>,
|
|
pub update_payment_method: Arc<UpdatePaymentMethodUseCase>,
|
|
pub delete_payment_method: Arc<DeletePaymentMethodUseCase>,
|
|
pub list_services: Arc<ListServicesUseCase>,
|
|
pub create_service: Arc<CreateServiceUseCase>,
|
|
pub update_service: Arc<UpdateServiceUseCase>,
|
|
pub delete_service: Arc<DeleteServiceUseCase>,
|
|
pub set_delivery_service: Arc<SetDeliveryServiceUseCase>,
|
|
pub delete_delivery_service: Arc<DeleteDeliveryServiceUseCase>,
|
|
pub auth_service: Arc<dyn AuthService>,
|
|
/// Statischer API-Key-Gate für die `/admin`-Routen (Header
|
|
/// `X-Admin-Api-Key`). Leer ⇒ alle Admin-Routen gesperrt (fail-closed).
|
|
/// Wird von der `admin_api_key`-Middleware konstant-zeitlich verglichen.
|
|
pub admin_api_key: Arc<str>,
|
|
}
|