backbone-catalog 0.7.0

Canonical product/service identity: Item, Item Group, UOM (Indonesia-first)
Documentation
//! 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::{
    attribute_handler::create_attribute_routes,
    attribute_value_handler::create_attribute_value_routes,
    brand_handler::create_brand_routes,
    item_handler::create_item_routes,
    item_group_handler::create_item_group_routes,
    item_variant_handler::create_item_variant_routes,
    uom_handler::create_uom_routes,
    uom_conversion_handler::create_uom_conversion_routes,
};

use crate::application::service::{
    AttributeService,
    AttributeValueService,
    BrandService,
    ItemService,
    ItemGroupService,
    ItemVariantService,
    UomService,
    UomConversionService,
};

/// Services collection for all CRUD endpoints
pub struct HttpServices {
    pub attribute: Arc<AttributeService>,
    pub attribute_value: Arc<AttributeValueService>,
    pub brand: Arc<BrandService>,
    pub item: Arc<ItemService>,
    pub item_group: Arc<ItemGroupService>,
    pub item_variant: Arc<ItemVariantService>,
    pub uom: Arc<UomService>,
    pub uom_conversion: Arc<UomConversionService>,
}

/// 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()
        // Attribute routes (12 Backbone endpoints)
        .merge(create_attribute_routes(services.attribute))
        // AttributeValue routes (12 Backbone endpoints)
        .merge(create_attribute_value_routes(services.attribute_value))
        // Brand routes (12 Backbone endpoints)
        .merge(create_brand_routes(services.brand))
        // Item routes (12 Backbone endpoints)
        .merge(create_item_routes(services.item))
        // ItemGroup routes (12 Backbone endpoints)
        .merge(create_item_group_routes(services.item_group))
        // ItemVariant routes (12 Backbone endpoints)
        .merge(create_item_variant_routes(services.item_variant))
        // Uom routes (12 Backbone endpoints)
        .merge(create_uom_routes(services.uom))
        // UomConversion routes (12 Backbone endpoints)
        .merge(create_uom_conversion_routes(services.uom_conversion))
}

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

    pub fn attribute_routes(service: Arc<AttributeService>) -> Router {
        create_attribute_routes(service)
    }

    pub fn attribute_value_routes(service: Arc<AttributeValueService>) -> Router {
        create_attribute_value_routes(service)
    }

    pub fn brand_routes(service: Arc<BrandService>) -> Router {
        create_brand_routes(service)
    }

    pub fn item_routes(service: Arc<ItemService>) -> Router {
        create_item_routes(service)
    }

    pub fn item_group_routes(service: Arc<ItemGroupService>) -> Router {
        create_item_group_routes(service)
    }

    pub fn item_variant_routes(service: Arc<ItemVariantService>) -> Router {
        create_item_variant_routes(service)
    }

    pub fn uom_routes(service: Arc<UomService>) -> Router {
        create_uom_routes(service)
    }

    pub fn uom_conversion_routes(service: Arc<UomConversionService>) -> Router {
        create_uom_conversion_routes(service)
    }

}