Skip to main content

backbone_catalog/handlers/
mod.rs

1//! Catalog Module Handlers
2//!
3//! Generated by metaphor-schema. Do not edit manually.
4//!
5//! This module provides:
6//! - AppState dependency injection container
7//! - Custom handler integration points
8
9use std::sync::Arc;
10
11// Import all services
12use crate::application::service::AttributeService;
13use crate::application::service::AttributeValueService;
14use crate::application::service::BrandService;
15use crate::application::service::ItemService;
16use crate::application::service::ItemGroupService;
17use crate::application::service::ItemVariantService;
18use crate::application::service::UomService;
19use crate::application::service::UomConversionService;
20
21/// Application state for dependency injection.
22///
23/// This struct holds references to all module services
24/// and is passed to HTTP handlers via Axum's State extractor.
25///
26/// # Example
27///
28/// ```ignore
29/// use axum::extract::State;
30///
31/// async fn custom_handler(
32///     State(state): State<AppState>,
33/// ) -> impl IntoResponse {
34///     // Access services via state
35/// }
36/// ```
37#[derive(Clone)]
38pub struct AppState {
39    /// Attribute service
40    pub attribute_service: Arc<AttributeService>,
41    /// AttributeValue service
42    pub attribute_value_service: Arc<AttributeValueService>,
43    /// Brand service
44    pub brand_service: Arc<BrandService>,
45    /// Item service
46    pub item_service: Arc<ItemService>,
47    /// ItemGroup service
48    pub item_group_service: Arc<ItemGroupService>,
49    /// ItemVariant service
50    pub item_variant_service: Arc<ItemVariantService>,
51    /// Uom service
52    pub uom_service: Arc<UomService>,
53    /// UomConversion service
54    pub uom_conversion_service: Arc<UomConversionService>,
55}
56
57impl AppState {
58    /// Create a new AppState with all services.
59    pub fn new(
60        attribute_service: Arc<AttributeService>,
61        attribute_value_service: Arc<AttributeValueService>,
62        brand_service: Arc<BrandService>,
63        item_service: Arc<ItemService>,
64        item_group_service: Arc<ItemGroupService>,
65        item_variant_service: Arc<ItemVariantService>,
66        uom_service: Arc<UomService>,
67        uom_conversion_service: Arc<UomConversionService>
68    ) -> Self {
69        Self {
70            attribute_service,
71            attribute_value_service,
72            brand_service,
73            item_service,
74            item_group_service,
75            item_variant_service,
76            uom_service,
77            uom_conversion_service,
78        }
79    }
80
81    /// Create AppState from module instance.
82    pub fn from_module(module: &crate::CatalogModule) -> Self {
83        Self {
84            attribute_service: module.attribute_service.clone(),
85            attribute_value_service: module.attribute_value_service.clone(),
86            brand_service: module.brand_service.clone(),
87            item_service: module.item_service.clone(),
88            item_group_service: module.item_group_service.clone(),
89            item_variant_service: module.item_variant_service.clone(),
90            uom_service: module.uom_service.clone(),
91            uom_conversion_service: module.uom_conversion_service.clone(),
92        }
93    }
94}
95
96/// Builder for AppState.
97///
98/// Allows incremental construction of AppState.
99#[derive(Default)]
100pub struct AppStateBuilder {
101    attribute_service: Option<Arc<AttributeService>>,
102    attribute_value_service: Option<Arc<AttributeValueService>>,
103    brand_service: Option<Arc<BrandService>>,
104    item_service: Option<Arc<ItemService>>,
105    item_group_service: Option<Arc<ItemGroupService>>,
106    item_variant_service: Option<Arc<ItemVariantService>>,
107    uom_service: Option<Arc<UomService>>,
108    uom_conversion_service: Option<Arc<UomConversionService>>,
109}
110
111impl AppStateBuilder {
112    /// Create a new builder.
113    pub fn new() -> Self {
114        Self::default()
115    }
116
117    /// Set the Attribute service.
118    pub fn with_attribute_service(mut self, service: Arc<AttributeService>) -> Self {
119        self.attribute_service = Some(service);
120        self
121    }
122
123    /// Set the AttributeValue service.
124    pub fn with_attribute_value_service(mut self, service: Arc<AttributeValueService>) -> Self {
125        self.attribute_value_service = Some(service);
126        self
127    }
128
129    /// Set the Brand service.
130    pub fn with_brand_service(mut self, service: Arc<BrandService>) -> Self {
131        self.brand_service = Some(service);
132        self
133    }
134
135    /// Set the Item service.
136    pub fn with_item_service(mut self, service: Arc<ItemService>) -> Self {
137        self.item_service = Some(service);
138        self
139    }
140
141    /// Set the ItemGroup service.
142    pub fn with_item_group_service(mut self, service: Arc<ItemGroupService>) -> Self {
143        self.item_group_service = Some(service);
144        self
145    }
146
147    /// Set the ItemVariant service.
148    pub fn with_item_variant_service(mut self, service: Arc<ItemVariantService>) -> Self {
149        self.item_variant_service = Some(service);
150        self
151    }
152
153    /// Set the Uom service.
154    pub fn with_uom_service(mut self, service: Arc<UomService>) -> Self {
155        self.uom_service = Some(service);
156        self
157    }
158
159    /// Set the UomConversion service.
160    pub fn with_uom_conversion_service(mut self, service: Arc<UomConversionService>) -> Self {
161        self.uom_conversion_service = Some(service);
162        self
163    }
164
165    /// Build the AppState.
166    ///
167    /// # Panics
168    ///
169    /// Panics if any required service is not set.
170    pub fn build(self) -> AppState {
171        AppState {
172            attribute_service: self.attribute_service.expect("attribute_service is required"),
173            attribute_value_service: self.attribute_value_service.expect("attribute_value_service is required"),
174            brand_service: self.brand_service.expect("brand_service is required"),
175            item_service: self.item_service.expect("item_service is required"),
176            item_group_service: self.item_group_service.expect("item_group_service is required"),
177            item_variant_service: self.item_variant_service.expect("item_variant_service is required"),
178            uom_service: self.uom_service.expect("uom_service is required"),
179            uom_conversion_service: self.uom_conversion_service.expect("uom_conversion_service is required"),
180        }
181    }
182}