backbone-events 0.5.0

Events core + the sale/booth/crm/sms/desk overlay — registrations under one authoritative seat counter, the sale seam (order-minted registrations, forward-only paid heal, SO-cancel mirror cascade), booth bookings with the DB exclusivity wall, closed-vocabulary lead rules through a host sink port, the dual-channel (mail/sms) self-arming scheduler, and the exact-match desk verb (Odoo event port, core + overlay)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
//! Event Module Handlers
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides:
//! - AppState dependency injection container
//! - Custom handler integration points

use std::sync::Arc;

// Import all services
use crate::application::service::BoothCategoryService;
use crate::application::service::BoothService;
use crate::application::service::TypeBoothService;
use crate::application::service::BoothBookingService;
use crate::application::service::EventService;
use crate::application::service::EventTypeService;
use crate::application::service::LeadProvenanceService;
use crate::application::service::LeadProvenanceRegistrationService;
use crate::application::service::LeadRequestService;
use crate::application::service::LeadRuleService;
use crate::application::service::LeadRulePredicateService;
use crate::application::service::MailService;
use crate::application::service::MailRegistrationService;
use crate::application::service::MailSlotService;
use crate::application::service::QuestionService;
use crate::application::service::QuestionAnswerService;
use crate::application::service::RegistrationQuestionService;
use crate::application::service::RegistrationService;
use crate::application::service::RegistrationAnswerService;
use crate::application::service::SlotService;
use crate::application::service::StageService;
use crate::application::service::TagCategoryService;
use crate::application::service::TagService;
use crate::application::service::TicketService;
use crate::application::service::TypeMailService;

/// Application state for dependency injection.
///
/// This struct holds references to all module services
/// and is passed to HTTP handlers via Axum's State extractor.
///
/// # Example
///
/// ```ignore
/// use axum::extract::State;
///
/// async fn custom_handler(
///     State(state): State<AppState>,
/// ) -> impl IntoResponse {
///     // Access services via state
/// }
/// ```
#[derive(Clone)]
pub struct AppState {
    /// BoothCategory service
    pub booth_category_service: Arc<BoothCategoryService>,
    /// Booth service
    pub booth_service: Arc<BoothService>,
    /// TypeBooth service
    pub type_booth_service: Arc<TypeBoothService>,
    /// BoothBooking service
    pub booth_booking_service: Arc<BoothBookingService>,
    /// Event service
    pub event_service: Arc<EventService>,
    /// EventType service
    pub event_type_service: Arc<EventTypeService>,
    /// LeadProvenance service
    pub lead_provenance_service: Arc<LeadProvenanceService>,
    /// LeadProvenanceRegistration service
    pub lead_provenance_registration_service: Arc<LeadProvenanceRegistrationService>,
    /// LeadRequest service
    pub lead_request_service: Arc<LeadRequestService>,
    /// LeadRule service
    pub lead_rule_service: Arc<LeadRuleService>,
    /// LeadRulePredicate service
    pub lead_rule_predicate_service: Arc<LeadRulePredicateService>,
    /// Mail service
    pub mail_service: Arc<MailService>,
    /// MailRegistration service
    pub mail_registration_service: Arc<MailRegistrationService>,
    /// MailSlot service
    pub mail_slot_service: Arc<MailSlotService>,
    /// Question service
    pub question_service: Arc<QuestionService>,
    /// QuestionAnswer service
    pub question_answer_service: Arc<QuestionAnswerService>,
    /// RegistrationQuestion service
    pub registration_question_service: Arc<RegistrationQuestionService>,
    /// Registration service
    pub registration_service: Arc<RegistrationService>,
    /// RegistrationAnswer service
    pub registration_answer_service: Arc<RegistrationAnswerService>,
    /// Slot service
    pub slot_service: Arc<SlotService>,
    /// Stage service
    pub stage_service: Arc<StageService>,
    /// TagCategory service
    pub tag_category_service: Arc<TagCategoryService>,
    /// Tag service
    pub tag_service: Arc<TagService>,
    /// Ticket service
    pub ticket_service: Arc<TicketService>,
    /// TypeMail service
    pub type_mail_service: Arc<TypeMailService>,
}

impl AppState {
    /// Create a new AppState with all services.
    pub fn new(
        booth_category_service: Arc<BoothCategoryService>,
        booth_service: Arc<BoothService>,
        type_booth_service: Arc<TypeBoothService>,
        booth_booking_service: Arc<BoothBookingService>,
        event_service: Arc<EventService>,
        event_type_service: Arc<EventTypeService>,
        lead_provenance_service: Arc<LeadProvenanceService>,
        lead_provenance_registration_service: Arc<LeadProvenanceRegistrationService>,
        lead_request_service: Arc<LeadRequestService>,
        lead_rule_service: Arc<LeadRuleService>,
        lead_rule_predicate_service: Arc<LeadRulePredicateService>,
        mail_service: Arc<MailService>,
        mail_registration_service: Arc<MailRegistrationService>,
        mail_slot_service: Arc<MailSlotService>,
        question_service: Arc<QuestionService>,
        question_answer_service: Arc<QuestionAnswerService>,
        registration_question_service: Arc<RegistrationQuestionService>,
        registration_service: Arc<RegistrationService>,
        registration_answer_service: Arc<RegistrationAnswerService>,
        slot_service: Arc<SlotService>,
        stage_service: Arc<StageService>,
        tag_category_service: Arc<TagCategoryService>,
        tag_service: Arc<TagService>,
        ticket_service: Arc<TicketService>,
        type_mail_service: Arc<TypeMailService>
    ) -> Self {
        Self {
            booth_category_service,
            booth_service,
            type_booth_service,
            booth_booking_service,
            event_service,
            event_type_service,
            lead_provenance_service,
            lead_provenance_registration_service,
            lead_request_service,
            lead_rule_service,
            lead_rule_predicate_service,
            mail_service,
            mail_registration_service,
            mail_slot_service,
            question_service,
            question_answer_service,
            registration_question_service,
            registration_service,
            registration_answer_service,
            slot_service,
            stage_service,
            tag_category_service,
            tag_service,
            ticket_service,
            type_mail_service,
        }
    }

    /// Create AppState from module instance.
    pub fn from_module(module: &crate::EventModule) -> Self {
        Self {
            booth_category_service: module.booth_category_service.clone(),
            booth_service: module.booth_service.clone(),
            type_booth_service: module.type_booth_service.clone(),
            booth_booking_service: module.booth_booking_service.clone(),
            event_service: module.event_service.clone(),
            event_type_service: module.event_type_service.clone(),
            lead_provenance_service: module.lead_provenance_service.clone(),
            lead_provenance_registration_service: module.lead_provenance_registration_service.clone(),
            lead_request_service: module.lead_request_service.clone(),
            lead_rule_service: module.lead_rule_service.clone(),
            lead_rule_predicate_service: module.lead_rule_predicate_service.clone(),
            mail_service: module.mail_service.clone(),
            mail_registration_service: module.mail_registration_service.clone(),
            mail_slot_service: module.mail_slot_service.clone(),
            question_service: module.question_service.clone(),
            question_answer_service: module.question_answer_service.clone(),
            registration_question_service: module.registration_question_service.clone(),
            registration_service: module.registration_service.clone(),
            registration_answer_service: module.registration_answer_service.clone(),
            slot_service: module.slot_service.clone(),
            stage_service: module.stage_service.clone(),
            tag_category_service: module.tag_category_service.clone(),
            tag_service: module.tag_service.clone(),
            ticket_service: module.ticket_service.clone(),
            type_mail_service: module.type_mail_service.clone(),
        }
    }
}

/// Builder for AppState.
///
/// Allows incremental construction of AppState.
#[derive(Default)]
pub struct AppStateBuilder {
    booth_category_service: Option<Arc<BoothCategoryService>>,
    booth_service: Option<Arc<BoothService>>,
    type_booth_service: Option<Arc<TypeBoothService>>,
    booth_booking_service: Option<Arc<BoothBookingService>>,
    event_service: Option<Arc<EventService>>,
    event_type_service: Option<Arc<EventTypeService>>,
    lead_provenance_service: Option<Arc<LeadProvenanceService>>,
    lead_provenance_registration_service: Option<Arc<LeadProvenanceRegistrationService>>,
    lead_request_service: Option<Arc<LeadRequestService>>,
    lead_rule_service: Option<Arc<LeadRuleService>>,
    lead_rule_predicate_service: Option<Arc<LeadRulePredicateService>>,
    mail_service: Option<Arc<MailService>>,
    mail_registration_service: Option<Arc<MailRegistrationService>>,
    mail_slot_service: Option<Arc<MailSlotService>>,
    question_service: Option<Arc<QuestionService>>,
    question_answer_service: Option<Arc<QuestionAnswerService>>,
    registration_question_service: Option<Arc<RegistrationQuestionService>>,
    registration_service: Option<Arc<RegistrationService>>,
    registration_answer_service: Option<Arc<RegistrationAnswerService>>,
    slot_service: Option<Arc<SlotService>>,
    stage_service: Option<Arc<StageService>>,
    tag_category_service: Option<Arc<TagCategoryService>>,
    tag_service: Option<Arc<TagService>>,
    ticket_service: Option<Arc<TicketService>>,
    type_mail_service: Option<Arc<TypeMailService>>,
}

impl AppStateBuilder {
    /// Create a new builder.
    pub fn new() -> Self {
        Self::default()
    }

    /// Set the BoothCategory service.
    pub fn with_booth_category_service(mut self, service: Arc<BoothCategoryService>) -> Self {
        self.booth_category_service = Some(service);
        self
    }

    /// Set the Booth service.
    pub fn with_booth_service(mut self, service: Arc<BoothService>) -> Self {
        self.booth_service = Some(service);
        self
    }

    /// Set the TypeBooth service.
    pub fn with_type_booth_service(mut self, service: Arc<TypeBoothService>) -> Self {
        self.type_booth_service = Some(service);
        self
    }

    /// Set the BoothBooking service.
    pub fn with_booth_booking_service(mut self, service: Arc<BoothBookingService>) -> Self {
        self.booth_booking_service = Some(service);
        self
    }

    /// Set the Event service.
    pub fn with_event_service(mut self, service: Arc<EventService>) -> Self {
        self.event_service = Some(service);
        self
    }

    /// Set the EventType service.
    pub fn with_event_type_service(mut self, service: Arc<EventTypeService>) -> Self {
        self.event_type_service = Some(service);
        self
    }

    /// Set the LeadProvenance service.
    pub fn with_lead_provenance_service(mut self, service: Arc<LeadProvenanceService>) -> Self {
        self.lead_provenance_service = Some(service);
        self
    }

    /// Set the LeadProvenanceRegistration service.
    pub fn with_lead_provenance_registration_service(mut self, service: Arc<LeadProvenanceRegistrationService>) -> Self {
        self.lead_provenance_registration_service = Some(service);
        self
    }

    /// Set the LeadRequest service.
    pub fn with_lead_request_service(mut self, service: Arc<LeadRequestService>) -> Self {
        self.lead_request_service = Some(service);
        self
    }

    /// Set the LeadRule service.
    pub fn with_lead_rule_service(mut self, service: Arc<LeadRuleService>) -> Self {
        self.lead_rule_service = Some(service);
        self
    }

    /// Set the LeadRulePredicate service.
    pub fn with_lead_rule_predicate_service(mut self, service: Arc<LeadRulePredicateService>) -> Self {
        self.lead_rule_predicate_service = Some(service);
        self
    }

    /// Set the Mail service.
    pub fn with_mail_service(mut self, service: Arc<MailService>) -> Self {
        self.mail_service = Some(service);
        self
    }

    /// Set the MailRegistration service.
    pub fn with_mail_registration_service(mut self, service: Arc<MailRegistrationService>) -> Self {
        self.mail_registration_service = Some(service);
        self
    }

    /// Set the MailSlot service.
    pub fn with_mail_slot_service(mut self, service: Arc<MailSlotService>) -> Self {
        self.mail_slot_service = Some(service);
        self
    }

    /// Set the Question service.
    pub fn with_question_service(mut self, service: Arc<QuestionService>) -> Self {
        self.question_service = Some(service);
        self
    }

    /// Set the QuestionAnswer service.
    pub fn with_question_answer_service(mut self, service: Arc<QuestionAnswerService>) -> Self {
        self.question_answer_service = Some(service);
        self
    }

    /// Set the RegistrationQuestion service.
    pub fn with_registration_question_service(mut self, service: Arc<RegistrationQuestionService>) -> Self {
        self.registration_question_service = Some(service);
        self
    }

    /// Set the Registration service.
    pub fn with_registration_service(mut self, service: Arc<RegistrationService>) -> Self {
        self.registration_service = Some(service);
        self
    }

    /// Set the RegistrationAnswer service.
    pub fn with_registration_answer_service(mut self, service: Arc<RegistrationAnswerService>) -> Self {
        self.registration_answer_service = Some(service);
        self
    }

    /// Set the Slot service.
    pub fn with_slot_service(mut self, service: Arc<SlotService>) -> Self {
        self.slot_service = Some(service);
        self
    }

    /// Set the Stage service.
    pub fn with_stage_service(mut self, service: Arc<StageService>) -> Self {
        self.stage_service = Some(service);
        self
    }

    /// Set the TagCategory service.
    pub fn with_tag_category_service(mut self, service: Arc<TagCategoryService>) -> Self {
        self.tag_category_service = Some(service);
        self
    }

    /// Set the Tag service.
    pub fn with_tag_service(mut self, service: Arc<TagService>) -> Self {
        self.tag_service = Some(service);
        self
    }

    /// Set the Ticket service.
    pub fn with_ticket_service(mut self, service: Arc<TicketService>) -> Self {
        self.ticket_service = Some(service);
        self
    }

    /// Set the TypeMail service.
    pub fn with_type_mail_service(mut self, service: Arc<TypeMailService>) -> Self {
        self.type_mail_service = Some(service);
        self
    }

    /// Build the AppState.
    ///
    /// # Panics
    ///
    /// Panics if any required service is not set.
    pub fn build(self) -> AppState {
        AppState {
            booth_category_service: self.booth_category_service.expect("booth_category_service is required"),
            booth_service: self.booth_service.expect("booth_service is required"),
            type_booth_service: self.type_booth_service.expect("type_booth_service is required"),
            booth_booking_service: self.booth_booking_service.expect("booth_booking_service is required"),
            event_service: self.event_service.expect("event_service is required"),
            event_type_service: self.event_type_service.expect("event_type_service is required"),
            lead_provenance_service: self.lead_provenance_service.expect("lead_provenance_service is required"),
            lead_provenance_registration_service: self.lead_provenance_registration_service.expect("lead_provenance_registration_service is required"),
            lead_request_service: self.lead_request_service.expect("lead_request_service is required"),
            lead_rule_service: self.lead_rule_service.expect("lead_rule_service is required"),
            lead_rule_predicate_service: self.lead_rule_predicate_service.expect("lead_rule_predicate_service is required"),
            mail_service: self.mail_service.expect("mail_service is required"),
            mail_registration_service: self.mail_registration_service.expect("mail_registration_service is required"),
            mail_slot_service: self.mail_slot_service.expect("mail_slot_service is required"),
            question_service: self.question_service.expect("question_service is required"),
            question_answer_service: self.question_answer_service.expect("question_answer_service is required"),
            registration_question_service: self.registration_question_service.expect("registration_question_service is required"),
            registration_service: self.registration_service.expect("registration_service is required"),
            registration_answer_service: self.registration_answer_service.expect("registration_answer_service is required"),
            slot_service: self.slot_service.expect("slot_service is required"),
            stage_service: self.stage_service.expect("stage_service is required"),
            tag_category_service: self.tag_category_service.expect("tag_category_service is required"),
            tag_service: self.tag_service.expect("tag_service is required"),
            ticket_service: self.ticket_service.expect("ticket_service is required"),
            type_mail_service: self.type_mail_service.expect("type_mail_service is required"),
        }
    }
}