#![recursion_limit = "1024"]
#![allow(unused_imports)]
pub mod domain;
pub mod infrastructure;
pub mod application;
pub mod presentation;
pub mod seeders;
pub mod exports;
pub mod request_pool;
pub use domain::entity::*;
pub use domain::state_machine::*;
pub use infrastructure::persistence::*;
pub use application::service::BoothCategoryService;
pub use application::service::BoothService;
pub use application::service::TypeBoothService;
pub use application::service::BoothBookingService;
pub use application::service::EventService;
pub use application::service::EventTypeService;
pub use application::service::LeadProvenanceService;
pub use application::service::LeadProvenanceRegistrationService;
pub use application::service::LeadRequestService;
pub use application::service::LeadRuleService;
pub use application::service::LeadRulePredicateService;
pub use application::service::MailService;
pub use application::service::MailRegistrationService;
pub use application::service::MailSlotService;
pub use application::service::QuestionService;
pub use application::service::QuestionAnswerService;
pub use application::service::RegistrationQuestionService;
pub use application::service::RegistrationService;
pub use application::service::RegistrationAnswerService;
pub use application::service::SlotService;
pub use application::service::StageService;
pub use application::service::TagCategoryService;
pub use application::service::TagService;
pub use application::service::TicketService;
pub use application::service::TypeMailService;
use std::sync::Arc;
use axum::Router;
use sqlx::PgPool;
pub struct EventModule {
pub(crate) booth_category_service: Arc<BoothCategoryService>,
pub(crate) booth_service: Arc<BoothService>,
pub(crate) type_booth_service: Arc<TypeBoothService>,
pub(crate) booth_booking_service: Arc<BoothBookingService>,
pub(crate) event_service: Arc<EventService>,
pub(crate) event_type_service: Arc<EventTypeService>,
pub(crate) lead_provenance_service: Arc<LeadProvenanceService>,
pub(crate) lead_provenance_registration_service: Arc<LeadProvenanceRegistrationService>,
pub(crate) lead_request_service: Arc<LeadRequestService>,
pub(crate) lead_rule_service: Arc<LeadRuleService>,
pub(crate) lead_rule_predicate_service: Arc<LeadRulePredicateService>,
pub(crate) mail_service: Arc<MailService>,
pub(crate) mail_registration_service: Arc<MailRegistrationService>,
pub(crate) mail_slot_service: Arc<MailSlotService>,
pub(crate) question_service: Arc<QuestionService>,
pub(crate) question_answer_service: Arc<QuestionAnswerService>,
pub(crate) registration_question_service: Arc<RegistrationQuestionService>,
pub(crate) registration_service: Arc<RegistrationService>,
pub(crate) registration_answer_service: Arc<RegistrationAnswerService>,
pub(crate) slot_service: Arc<SlotService>,
pub(crate) stage_service: Arc<StageService>,
pub(crate) tag_category_service: Arc<TagCategoryService>,
pub(crate) tag_service: Arc<TagService>,
pub(crate) ticket_service: Arc<TicketService>,
pub(crate) type_mail_service: Arc<TypeMailService>,
}
impl EventModule {
pub fn builder() -> EventModuleBuilder {
EventModuleBuilder::new()
}
pub fn all_crud_routes(&self) -> Router {
use presentation::http::{
create_booth_category_routes,
create_booth_read_routes,
create_type_booth_routes,
create_booth_booking_read_routes,
create_event_read_routes,
create_event_type_routes,
create_lead_provenance_read_routes,
create_lead_provenance_registration_read_routes,
create_lead_request_read_routes,
create_lead_rule_read_routes,
create_lead_rule_predicate_read_routes,
create_mail_read_routes,
create_mail_registration_routes,
create_mail_slot_routes,
create_question_read_routes,
create_question_answer_routes,
create_registration_question_routes,
create_registration_read_routes,
create_registration_answer_routes,
create_slot_routes,
create_stage_routes,
create_tag_category_routes,
create_tag_routes,
create_ticket_routes,
create_type_mail_routes,
};
Router::new()
.merge(create_booth_category_routes(self.booth_category_service.clone()))
.merge(create_booth_read_routes(self.booth_service.clone()))
.merge(create_type_booth_routes(self.type_booth_service.clone()))
.merge(create_booth_booking_read_routes(self.booth_booking_service.clone()))
.merge(create_event_read_routes(self.event_service.clone()))
.merge(create_event_type_routes(self.event_type_service.clone()))
.merge(create_lead_provenance_read_routes(self.lead_provenance_service.clone()))
.merge(create_lead_provenance_registration_read_routes(self.lead_provenance_registration_service.clone()))
.merge(create_lead_request_read_routes(self.lead_request_service.clone()))
.merge(create_lead_rule_read_routes(self.lead_rule_service.clone()))
.merge(create_lead_rule_predicate_read_routes(self.lead_rule_predicate_service.clone()))
.merge(create_mail_read_routes(self.mail_service.clone()))
.merge(create_mail_registration_routes(self.mail_registration_service.clone()))
.merge(create_mail_slot_routes(self.mail_slot_service.clone()))
.merge(create_question_read_routes(self.question_service.clone()))
.merge(create_question_answer_routes(self.question_answer_service.clone()))
.merge(create_registration_question_routes(self.registration_question_service.clone()))
.merge(create_registration_read_routes(self.registration_service.clone()))
.merge(create_registration_answer_routes(self.registration_answer_service.clone()))
.merge(create_slot_routes(self.slot_service.clone()))
.merge(create_stage_routes(self.stage_service.clone()))
.merge(create_tag_category_routes(self.tag_category_service.clone()))
.merge(create_tag_routes(self.tag_service.clone()))
.merge(create_ticket_routes(self.ticket_service.clone()))
.merge(create_type_mail_routes(self.type_mail_service.clone()))
}
#[deprecated(note = "mounts unvalidated generic CRUD; prefer readonly_routes() + validated writes, or all_crud_routes() for the full/unguarded surface")]
pub fn routes(&self) -> Router {
self.all_crud_routes()
}
pub fn readonly_routes(&self) -> Router {
use presentation::http::{
create_booth_category_read_routes,
create_booth_read_routes,
create_type_booth_read_routes,
create_booth_booking_read_routes,
create_event_read_routes,
create_event_type_read_routes,
create_lead_provenance_read_routes,
create_lead_provenance_registration_read_routes,
create_lead_request_read_routes,
create_lead_rule_read_routes,
create_lead_rule_predicate_read_routes,
create_mail_read_routes,
create_mail_registration_read_routes,
create_mail_slot_read_routes,
create_question_read_routes,
create_question_answer_read_routes,
create_registration_question_read_routes,
create_registration_read_routes,
create_registration_answer_read_routes,
create_slot_read_routes,
create_stage_read_routes,
create_tag_category_read_routes,
create_tag_read_routes,
create_ticket_read_routes,
create_type_mail_read_routes,
};
Router::new()
.merge(create_booth_category_read_routes(self.booth_category_service.clone()))
.merge(create_booth_read_routes(self.booth_service.clone()))
.merge(create_type_booth_read_routes(self.type_booth_service.clone()))
.merge(create_booth_booking_read_routes(self.booth_booking_service.clone()))
.merge(create_event_read_routes(self.event_service.clone()))
.merge(create_event_type_read_routes(self.event_type_service.clone()))
.merge(create_lead_provenance_read_routes(self.lead_provenance_service.clone()))
.merge(create_lead_provenance_registration_read_routes(self.lead_provenance_registration_service.clone()))
.merge(create_lead_request_read_routes(self.lead_request_service.clone()))
.merge(create_lead_rule_read_routes(self.lead_rule_service.clone()))
.merge(create_lead_rule_predicate_read_routes(self.lead_rule_predicate_service.clone()))
.merge(create_mail_read_routes(self.mail_service.clone()))
.merge(create_mail_registration_read_routes(self.mail_registration_service.clone()))
.merge(create_mail_slot_read_routes(self.mail_slot_service.clone()))
.merge(create_question_read_routes(self.question_service.clone()))
.merge(create_question_answer_read_routes(self.question_answer_service.clone()))
.merge(create_registration_question_read_routes(self.registration_question_service.clone()))
.merge(create_registration_read_routes(self.registration_service.clone()))
.merge(create_registration_answer_read_routes(self.registration_answer_service.clone()))
.merge(create_slot_read_routes(self.slot_service.clone()))
.merge(create_stage_read_routes(self.stage_service.clone()))
.merge(create_tag_category_read_routes(self.tag_category_service.clone()))
.merge(create_tag_read_routes(self.tag_service.clone()))
.merge(create_ticket_read_routes(self.ticket_service.clone()))
.merge(create_type_mail_read_routes(self.type_mail_service.clone()))
}
}
pub struct EventModuleBuilder {
db_pool: Option<PgPool>,
}
impl EventModuleBuilder {
pub fn new() -> Self {
Self {
db_pool: None,
}
}
pub fn with_database(mut self, pool: PgPool) -> Self {
self.db_pool = Some(pool);
self
}
pub fn build(self) -> anyhow::Result<EventModule> {
let db_pool = self.db_pool
.ok_or_else(|| anyhow::anyhow!("Database pool not configured"))?;
let booth_category_repository = Arc::new(BoothCategoryRepository::new(db_pool.clone()));
let booth_category_service = Arc::new(BoothCategoryService::with_repository(booth_category_repository.clone()));
let booth_repository = Arc::new(BoothRepository::new(db_pool.clone()));
let booth_service = Arc::new(BoothService::with_repository(booth_repository.clone()));
let type_booth_repository = Arc::new(TypeBoothRepository::new(db_pool.clone()));
let type_booth_service = Arc::new(TypeBoothService::with_repository(type_booth_repository.clone()));
let booth_booking_repository = Arc::new(BoothBookingRepository::new(db_pool.clone()));
let booth_booking_service = Arc::new(BoothBookingService::with_repository(booth_booking_repository.clone()));
let event_repository = Arc::new(EventRepository::new(db_pool.clone()));
let event_service = Arc::new(EventService::with_repository(event_repository.clone()));
let event_type_repository = Arc::new(EventTypeRepository::new(db_pool.clone()));
let event_type_service = Arc::new(EventTypeService::with_repository(event_type_repository.clone()));
let lead_provenance_repository = Arc::new(LeadProvenanceRepository::new(db_pool.clone()));
let lead_provenance_service = Arc::new(LeadProvenanceService::with_repository(lead_provenance_repository.clone()));
let lead_provenance_registration_repository = Arc::new(LeadProvenanceRegistrationRepository::new(db_pool.clone()));
let lead_provenance_registration_service = Arc::new(LeadProvenanceRegistrationService::with_repository(lead_provenance_registration_repository.clone()));
let lead_request_repository = Arc::new(LeadRequestRepository::new(db_pool.clone()));
let lead_request_service = Arc::new(LeadRequestService::with_repository(lead_request_repository.clone()));
let lead_rule_repository = Arc::new(LeadRuleRepository::new(db_pool.clone()));
let lead_rule_service = Arc::new(LeadRuleService::with_repository(lead_rule_repository.clone()));
let lead_rule_predicate_repository = Arc::new(LeadRulePredicateRepository::new(db_pool.clone()));
let lead_rule_predicate_service = Arc::new(LeadRulePredicateService::with_repository(lead_rule_predicate_repository.clone()));
let mail_repository = Arc::new(MailRepository::new(db_pool.clone()));
let mail_service = Arc::new(MailService::with_repository(mail_repository.clone()));
let mail_registration_repository = Arc::new(MailRegistrationRepository::new(db_pool.clone()));
let mail_registration_service = Arc::new(MailRegistrationService::with_repository(mail_registration_repository.clone()));
let mail_slot_repository = Arc::new(MailSlotRepository::new(db_pool.clone()));
let mail_slot_service = Arc::new(MailSlotService::with_repository(mail_slot_repository.clone()));
let question_repository = Arc::new(QuestionRepository::new(db_pool.clone()));
let question_service = Arc::new(QuestionService::with_repository(question_repository.clone()));
let question_answer_repository = Arc::new(QuestionAnswerRepository::new(db_pool.clone()));
let question_answer_service = Arc::new(QuestionAnswerService::with_repository(question_answer_repository.clone()));
let registration_question_repository = Arc::new(RegistrationQuestionRepository::new(db_pool.clone()));
let registration_question_service = Arc::new(RegistrationQuestionService::with_repository(registration_question_repository.clone()));
let registration_repository = Arc::new(RegistrationRepository::new(db_pool.clone()));
let registration_service = Arc::new(RegistrationService::with_repository(registration_repository.clone()));
let registration_answer_repository = Arc::new(RegistrationAnswerRepository::new(db_pool.clone()));
let registration_answer_service = Arc::new(RegistrationAnswerService::with_repository(registration_answer_repository.clone()));
let slot_repository = Arc::new(SlotRepository::new(db_pool.clone()));
let slot_service = Arc::new(SlotService::with_repository(slot_repository.clone()));
let stage_repository = Arc::new(StageRepository::new(db_pool.clone()));
let stage_service = Arc::new(StageService::with_repository(stage_repository.clone()));
let tag_category_repository = Arc::new(TagCategoryRepository::new(db_pool.clone()));
let tag_category_service = Arc::new(TagCategoryService::with_repository(tag_category_repository.clone()));
let tag_repository = Arc::new(TagRepository::new(db_pool.clone()));
let tag_service = Arc::new(TagService::with_repository(tag_repository.clone()));
let ticket_repository = Arc::new(TicketRepository::new(db_pool.clone()));
let ticket_service = Arc::new(TicketService::with_repository(ticket_repository.clone()));
let type_mail_repository = Arc::new(TypeMailRepository::new(db_pool.clone()));
let type_mail_service = Arc::new(TypeMailService::with_repository(type_mail_repository.clone()));
Ok(EventModule {
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,
})
}
}
impl Default for EventModuleBuilder {
fn default() -> Self {
Self::new()
}
}