backbone-digest 0.3.0

KPI digests — the periodic KPI-email engine: a declarative name-keyed KPI registry other modules extend, per-recipient fenced rendering with declared (never row-count) KPI drops, the anti-spam slowdown ladder, a shared tips carousel, and a daily plain-pull cron whose due-date column is the queue (Odoo digest 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::{
    digest_digest_handler::create_digest_digest_read_routes,
    digest_subscription_handler::create_digest_subscription_read_routes,
    digest_digest_kpi_handler::create_digest_digest_kpi_routes,
    digest_tip_handler::create_digest_tip_routes,
    digest_tip_user_handler::create_digest_tip_user_routes,
};

use crate::application::service::{
    DigestDigestService,
    DigestSubscriptionService,
    DigestDigestKpiService,
    DigestTipService,
    DigestTipUserService,
};

/// Services collection for all CRUD endpoints
pub struct HttpServices {
    pub digest_digest: Arc<DigestDigestService>,
    pub digest_subscription: Arc<DigestSubscriptionService>,
    pub digest_digest_kpi: Arc<DigestDigestKpiService>,
    pub digest_tip: Arc<DigestTipService>,
    pub digest_tip_user: Arc<DigestTipUserService>,
}

/// 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()
        // DigestDigest routes (READ-ONLY mount — hand_set lifecycle; the state field moves only through the module's validated verbs)
        .merge(create_digest_digest_read_routes(services.digest_digest))
        // DigestSubscription routes (READ-ONLY mount — hand_set lifecycle; the state field moves only through the module's validated verbs)
        .merge(create_digest_subscription_read_routes(services.digest_subscription))
        // DigestDigestKpi routes (12 Backbone endpoints)
        .merge(create_digest_digest_kpi_routes(services.digest_digest_kpi))
        // DigestTip routes (12 Backbone endpoints)
        .merge(create_digest_tip_routes(services.digest_tip))
        // DigestTipUser routes (12 Backbone endpoints)
        .merge(create_digest_tip_user_routes(services.digest_tip_user))
}

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

    pub fn digest_digest_routes(service: Arc<DigestDigestService>) -> Router {
        create_digest_digest_read_routes(service)
    }

    pub fn digest_subscription_routes(service: Arc<DigestSubscriptionService>) -> Router {
        create_digest_subscription_read_routes(service)
    }

    pub fn digest_digest_kpi_routes(service: Arc<DigestDigestKpiService>) -> Router {
        create_digest_digest_kpi_routes(service)
    }

    pub fn digest_tip_routes(service: Arc<DigestTipService>) -> Router {
        create_digest_tip_routes(service)
    }

    pub fn digest_tip_user_routes(service: Arc<DigestTipUserService>) -> Router {
        create_digest_tip_user_routes(service)
    }

}