//! Request-/Antwort-Typen für die Services-Endpoints (Stammdaten-CRUD + //! Pro-Lieferung-Wert). use serde::{Deserialize, Serialize}; use uuid::Uuid; use holzleitner_domain::{DeliveryServiceValue, Service, ServiceKind}; #[derive(Debug, Clone, Deserialize, Serialize)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] #[serde(rename_all = "camelCase")] pub struct CreateServiceRequest { /// Eindeutiger Programm-Identifier (z. B. `"podium_setup"`). pub key: String, pub name: String, pub kind: ServiceKind, /// Nur bei `Numeric` sinnvoll. #[serde(default)] pub min_value: Option, #[serde(default)] pub max_value: Option, #[serde(default)] pub sort_order: Option, } /// Teil-Update eines Service. `kind` ist bewusst **nicht** änderbar — ein /// Wechsel boolean↔numeric würde bestehende Pro-Lieferung-Werte ungültig /// machen (dann lieber deaktivieren + neu anlegen). #[derive(Debug, Clone, Deserialize, Serialize)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] #[serde(rename_all = "camelCase")] pub struct UpdateServiceRequest { pub name: Option, pub min_value: Option, pub max_value: Option, pub active: Option, pub sort_order: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] #[serde(rename_all = "camelCase")] pub struct ServiceResponse { pub service: Service, } #[derive(Debug, Clone, Serialize, Deserialize)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] #[serde(rename_all = "camelCase")] pub struct ServicesList { pub services: Vec, } /// Setzt den Wert eines Service für eine Lieferung (Upsert). Es muss genau /// das zum `ServiceKind` passende Feld gesetzt sein (Use Case prüft das). #[derive(Debug, Clone, Deserialize, Serialize)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] #[serde(rename_all = "camelCase")] pub struct SetDeliveryServiceRequest { #[serde(default)] pub bool_value: Option, #[serde(default)] pub numeric_value: Option, #[serde(default)] pub author_car_id: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] #[serde(rename_all = "camelCase")] pub struct DeliveryServiceResponse { pub value: DeliveryServiceValue, }