backbone-events 0.3.30

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)
//! HTTP route configuration
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides consolidated Axum route configuration using backbone-core's
//! BackboneCrudHandler for all 12 standard Backbone CRUD endpoints per entity.

use axum::Router;
use std::sync::Arc;

use super::{
    booth_category_handler::create_booth_category_routes,
    booth_handler::create_booth_read_routes,
    type_booth_handler::create_type_booth_routes,
    booth_booking_handler::create_booth_booking_read_routes,
    event_handler::create_event_read_routes,
    event_type_handler::create_event_type_routes,
    lead_provenance_handler::create_lead_provenance_read_routes,
    lead_provenance_registration_handler::create_lead_provenance_registration_read_routes,
    lead_request_handler::create_lead_request_read_routes,
    lead_rule_handler::create_lead_rule_read_routes,
    lead_rule_predicate_handler::create_lead_rule_predicate_read_routes,
    mail_handler::create_mail_read_routes,
    mail_registration_handler::create_mail_registration_routes,
    mail_slot_handler::create_mail_slot_routes,
    question_handler::create_question_read_routes,
    question_answer_handler::create_question_answer_routes,
    registration_question_handler::create_registration_question_routes,
    registration_handler::create_registration_read_routes,
    registration_answer_handler::create_registration_answer_routes,
    slot_handler::create_slot_routes,
    stage_handler::create_stage_routes,
    tag_category_handler::create_tag_category_routes,
    tag_handler::create_tag_routes,
    ticket_handler::create_ticket_routes,
    type_mail_handler::create_type_mail_routes,
};

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

/// Services collection for all CRUD endpoints
pub struct HttpServices {
    pub booth_category: Arc<BoothCategoryService>,
    pub booth: Arc<BoothService>,
    pub type_booth: Arc<TypeBoothService>,
    pub booth_booking: Arc<BoothBookingService>,
    pub event: Arc<EventService>,
    pub event_type: Arc<EventTypeService>,
    pub lead_provenance: Arc<LeadProvenanceService>,
    pub lead_provenance_registration: Arc<LeadProvenanceRegistrationService>,
    pub lead_request: Arc<LeadRequestService>,
    pub lead_rule: Arc<LeadRuleService>,
    pub lead_rule_predicate: Arc<LeadRulePredicateService>,
    pub mail: Arc<MailService>,
    pub mail_registration: Arc<MailRegistrationService>,
    pub mail_slot: Arc<MailSlotService>,
    pub question: Arc<QuestionService>,
    pub question_answer: Arc<QuestionAnswerService>,
    pub registration_question: Arc<RegistrationQuestionService>,
    pub registration: Arc<RegistrationService>,
    pub registration_answer: Arc<RegistrationAnswerService>,
    pub slot: Arc<SlotService>,
    pub stage: Arc<StageService>,
    pub tag_category: Arc<TagCategoryService>,
    pub tag: Arc<TagService>,
    pub ticket: Arc<TicketService>,
    pub type_mail: Arc<TypeMailService>,
}

/// Configure all HTTP routes for this module using Axum and BackboneCrudHandler.
///
/// Each entity gets 12 standard Backbone CRUD endpoints:
/// 1. GET /api/v1/{collection} - List with pagination
/// 2. POST /api/v1/{collection} - Create
/// 3. GET /api/v1/{collection}/:id - Get by ID
/// 4. PUT /api/v1/{collection}/:id - Full update
/// 5. PATCH /api/v1/{collection}/:id - Partial update
/// 6. DELETE /api/v1/{collection}/:id - Soft delete
/// 7. POST /api/v1/{collection}/bulk - Bulk create
/// 8. POST /api/v1/{collection}/upsert - Upsert
/// 9. GET /api/v1/{collection}/trash - List deleted
/// 10. POST /api/v1/{collection}/:id/restore - Restore
/// 11. DELETE /api/v1/{collection}/empty - Empty trash
/// 12. GET /api/v1/{collection}/:id/deleted - Get deleted by ID
pub fn configure_routes(services: HttpServices) -> Router {
    Router::new()
        // BoothCategory routes (12 Backbone endpoints)
        .merge(create_booth_category_routes(services.booth_category))
        // Booth routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_booth_read_routes(services.booth))
        // TypeBooth routes (12 Backbone endpoints)
        .merge(create_type_booth_routes(services.type_booth))
        // BoothBooking routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_booth_booking_read_routes(services.booth_booking))
        // Event routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_event_read_routes(services.event))
        // EventType routes (12 Backbone endpoints)
        .merge(create_event_type_routes(services.event_type))
        // LeadProvenance routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_lead_provenance_read_routes(services.lead_provenance))
        // LeadProvenanceRegistration routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_lead_provenance_registration_read_routes(services.lead_provenance_registration))
        // LeadRequest routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_lead_request_read_routes(services.lead_request))
        // LeadRule routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_lead_rule_read_routes(services.lead_rule))
        // LeadRulePredicate routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_lead_rule_predicate_read_routes(services.lead_rule_predicate))
        // Mail routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_mail_read_routes(services.mail))
        // MailRegistration routes (12 Backbone endpoints)
        .merge(create_mail_registration_routes(services.mail_registration))
        // MailSlot routes (12 Backbone endpoints)
        .merge(create_mail_slot_routes(services.mail_slot))
        // Question routes (READ-ONLY mount — hand_set lifecycle; the state field moves only through the module's validated verbs)
        .merge(create_question_read_routes(services.question))
        // QuestionAnswer routes (12 Backbone endpoints)
        .merge(create_question_answer_routes(services.question_answer))
        // RegistrationQuestion routes (12 Backbone endpoints)
        .merge(create_registration_question_routes(services.registration_question))
        // Registration routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_registration_read_routes(services.registration))
        // RegistrationAnswer routes (12 Backbone endpoints)
        .merge(create_registration_answer_routes(services.registration_answer))
        // Slot routes (12 Backbone endpoints)
        .merge(create_slot_routes(services.slot))
        // Stage routes (12 Backbone endpoints)
        .merge(create_stage_routes(services.stage))
        // TagCategory routes (12 Backbone endpoints)
        .merge(create_tag_category_routes(services.tag_category))
        // Tag routes (12 Backbone endpoints)
        .merge(create_tag_routes(services.tag))
        // Ticket routes (12 Backbone endpoints)
        .merge(create_ticket_routes(services.ticket))
        // TypeMail routes (12 Backbone endpoints)
        .merge(create_type_mail_routes(services.type_mail))
}

/// Create an individual entity's routes (for modular configuration)
pub mod individual {
    use super::*;

    pub fn booth_category_routes(service: Arc<BoothCategoryService>) -> Router {
        create_booth_category_routes(service)
    }

    pub fn booth_routes(service: Arc<BoothService>) -> Router {
        create_booth_read_routes(service)
    }

    pub fn type_booth_routes(service: Arc<TypeBoothService>) -> Router {
        create_type_booth_routes(service)
    }

    pub fn booth_booking_routes(service: Arc<BoothBookingService>) -> Router {
        create_booth_booking_read_routes(service)
    }

    pub fn event_routes(service: Arc<EventService>) -> Router {
        create_event_read_routes(service)
    }

    pub fn event_type_routes(service: Arc<EventTypeService>) -> Router {
        create_event_type_routes(service)
    }

    pub fn lead_provenance_routes(service: Arc<LeadProvenanceService>) -> Router {
        create_lead_provenance_read_routes(service)
    }

    pub fn lead_provenance_registration_routes(service: Arc<LeadProvenanceRegistrationService>) -> Router {
        create_lead_provenance_registration_read_routes(service)
    }

    pub fn lead_request_routes(service: Arc<LeadRequestService>) -> Router {
        create_lead_request_read_routes(service)
    }

    pub fn lead_rule_routes(service: Arc<LeadRuleService>) -> Router {
        create_lead_rule_read_routes(service)
    }

    pub fn lead_rule_predicate_routes(service: Arc<LeadRulePredicateService>) -> Router {
        create_lead_rule_predicate_read_routes(service)
    }

    pub fn mail_routes(service: Arc<MailService>) -> Router {
        create_mail_read_routes(service)
    }

    pub fn mail_registration_routes(service: Arc<MailRegistrationService>) -> Router {
        create_mail_registration_routes(service)
    }

    pub fn mail_slot_routes(service: Arc<MailSlotService>) -> Router {
        create_mail_slot_routes(service)
    }

    pub fn question_routes(service: Arc<QuestionService>) -> Router {
        create_question_read_routes(service)
    }

    pub fn question_answer_routes(service: Arc<QuestionAnswerService>) -> Router {
        create_question_answer_routes(service)
    }

    pub fn registration_question_routes(service: Arc<RegistrationQuestionService>) -> Router {
        create_registration_question_routes(service)
    }

    pub fn registration_routes(service: Arc<RegistrationService>) -> Router {
        create_registration_read_routes(service)
    }

    pub fn registration_answer_routes(service: Arc<RegistrationAnswerService>) -> Router {
        create_registration_answer_routes(service)
    }

    pub fn slot_routes(service: Arc<SlotService>) -> Router {
        create_slot_routes(service)
    }

    pub fn stage_routes(service: Arc<StageService>) -> Router {
        create_stage_routes(service)
    }

    pub fn tag_category_routes(service: Arc<TagCategoryService>) -> Router {
        create_tag_category_routes(service)
    }

    pub fn tag_routes(service: Arc<TagService>) -> Router {
        create_tag_routes(service)
    }

    pub fn ticket_routes(service: Arc<TicketService>) -> Router {
        create_ticket_routes(service)
    }

    pub fn type_mail_routes(service: Arc<TypeMailService>) -> Router {
        create_type_mail_routes(service)
    }

}