use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; /// Zahlungs-Stammdatensatz. /// /// Bewusst eine Tabelle und kein Enum: neue Anbieter (PayPal, Klarna, …) /// kommen über den `POST /payment-methods`-Endpoint hinzu. Domain-Code /// kann trotzdem fachliche Sonderfälle über den stabilen `code` (z. B. /// `"invoice"` braucht Bonitätsprüfung) referenzieren — die UUID dient /// nur als FK in `deliveries`. /// /// `active = false` ist Soft-Delete: die Methode bleibt referenzierbar /// für historische Lieferungen, taucht aber in der UI-Auswahl nicht /// mehr auf. Echtes Löschen ist nur möglich, wenn keine Lieferung sie /// referenziert — Datenbank-Constraint regelt das via /// `ON DELETE RESTRICT`. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] #[serde(rename_all = "camelCase")] pub struct PaymentMethod { pub id: Uuid, /// Stabiler Programm-Identifier — z. B. `"cash"`, `"ec_card"`. /// Eindeutig pro Eintrag. Wird vom Aufrufer beim Anlegen gesetzt. pub code: String, /// Display-Name in der UI — frei via PATCH änderbar. pub name: String, pub active: bool, pub created_at: DateTime, }