backbone-mailing 0.4.0

Email marketing — mass-mail engine: audiences, subscriptions, hand-set mailing lifecycle, seeded A/B testing, per-recipient traces, cycle-44 bridge targets (Odoo mass_mailing port)
//! 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::{
    mailing_ab_test_handler::create_mailing_ab_test_routes,
    mailing_audience_handler::create_mailing_audience_routes,
    mailing_contact_handler::create_mailing_contact_routes,
    mailing_subscription_handler::create_mailing_subscription_routes,
    opt_out_reason_handler::create_opt_out_reason_routes,
    mailing_handler::create_mailing_read_routes,
    mailing_trace_handler::create_mailing_trace_read_routes,
    mailing_filter_handler::create_mailing_filter_routes,
};

use crate::application::service::{
    MailingAbTestService,
    MailingAudienceService,
    MailingContactService,
    MailingSubscriptionService,
    OptOutReasonService,
    MailingService,
    MailingTraceService,
    MailingFilterService,
};

/// Services collection for all CRUD endpoints
pub struct HttpServices {
    pub mailing_ab_test: Arc<MailingAbTestService>,
    pub mailing_audience: Arc<MailingAudienceService>,
    pub mailing_contact: Arc<MailingContactService>,
    pub mailing_subscription: Arc<MailingSubscriptionService>,
    pub opt_out_reason: Arc<OptOutReasonService>,
    pub mailing: Arc<MailingService>,
    pub mailing_trace: Arc<MailingTraceService>,
    pub mailing_filter: Arc<MailingFilterService>,
}

/// 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()
        // MailingAbTest routes (12 Backbone endpoints)
        .merge(create_mailing_ab_test_routes(services.mailing_ab_test))
        // MailingAudience routes (12 Backbone endpoints)
        .merge(create_mailing_audience_routes(services.mailing_audience))
        // MailingContact routes (12 Backbone endpoints)
        .merge(create_mailing_contact_routes(services.mailing_contact))
        // MailingSubscription routes (12 Backbone endpoints)
        .merge(create_mailing_subscription_routes(services.mailing_subscription))
        // OptOutReason routes (12 Backbone endpoints)
        .merge(create_opt_out_reason_routes(services.opt_out_reason))
        // Mailing routes (READ-ONLY mount — hand_set lifecycle; the state field moves only through the module's validated verbs)
        .merge(create_mailing_read_routes(services.mailing))
        // MailingTrace routes (READ-ONLY mount — hand_set lifecycle; the state field moves only through the module's validated verbs)
        .merge(create_mailing_trace_read_routes(services.mailing_trace))
        // MailingFilter routes (12 Backbone endpoints)
        .merge(create_mailing_filter_routes(services.mailing_filter))
}

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

    pub fn mailing_ab_test_routes(service: Arc<MailingAbTestService>) -> Router {
        create_mailing_ab_test_routes(service)
    }

    pub fn mailing_audience_routes(service: Arc<MailingAudienceService>) -> Router {
        create_mailing_audience_routes(service)
    }

    pub fn mailing_contact_routes(service: Arc<MailingContactService>) -> Router {
        create_mailing_contact_routes(service)
    }

    pub fn mailing_subscription_routes(service: Arc<MailingSubscriptionService>) -> Router {
        create_mailing_subscription_routes(service)
    }

    pub fn opt_out_reason_routes(service: Arc<OptOutReasonService>) -> Router {
        create_opt_out_reason_routes(service)
    }

    pub fn mailing_routes(service: Arc<MailingService>) -> Router {
        create_mailing_read_routes(service)
    }

    pub fn mailing_trace_routes(service: Arc<MailingTraceService>) -> Router {
        create_mailing_trace_read_routes(service)
    }

    pub fn mailing_filter_routes(service: Arc<MailingFilterService>) -> Router {
        create_mailing_filter_routes(service)
    }

}