backbone-payroll 0.3.49

Payroll: salary structures, payroll runs and computed salary slips over effective-dated statutory tables, plus compensation changes
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::{
    compensation_change_handler::create_compensation_change_read_routes,
    payroll_entry_handler::create_payroll_entry_routes,
    salary_slip_handler::create_salary_slip_routes,
    salary_slip_line_handler::create_salary_slip_line_routes,
    salary_structure_handler::create_salary_structure_routes,
    salary_component_handler::create_salary_component_routes,
};

use crate::application::service::{
    CompensationChangeService,
    PayrollEntryService,
    SalarySlipService,
    SalarySlipLineService,
    SalaryStructureService,
    SalaryComponentService,
};

/// Services collection for all CRUD endpoints
pub struct HttpServices {
    pub compensation_change: Arc<CompensationChangeService>,
    pub payroll_entry: Arc<PayrollEntryService>,
    pub salary_slip: Arc<SalarySlipService>,
    pub salary_slip_line: Arc<SalarySlipLineService>,
    pub salary_structure: Arc<SalaryStructureService>,
    pub salary_component: Arc<SalaryComponentService>,
}

/// 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()
        // CompensationChange routes (READ-ONLY — append-only/event-sourced entity; writes arrive via the event handlers)
        .merge(create_compensation_change_read_routes(services.compensation_change))
        // PayrollEntry routes (12 Backbone endpoints)
        .merge(create_payroll_entry_routes(services.payroll_entry))
        // SalarySlip routes (12 Backbone endpoints)
        .merge(create_salary_slip_routes(services.salary_slip))
        // SalarySlipLine routes (12 Backbone endpoints)
        .merge(create_salary_slip_line_routes(services.salary_slip_line))
        // SalaryStructure routes (12 Backbone endpoints)
        .merge(create_salary_structure_routes(services.salary_structure))
        // SalaryComponent routes (12 Backbone endpoints)
        .merge(create_salary_component_routes(services.salary_component))
}

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

    pub fn compensation_change_routes(service: Arc<CompensationChangeService>) -> Router {
        create_compensation_change_read_routes(service)
    }

    pub fn payroll_entry_routes(service: Arc<PayrollEntryService>) -> Router {
        create_payroll_entry_routes(service)
    }

    pub fn salary_slip_routes(service: Arc<SalarySlipService>) -> Router {
        create_salary_slip_routes(service)
    }

    pub fn salary_slip_line_routes(service: Arc<SalarySlipLineService>) -> Router {
        create_salary_slip_line_routes(service)
    }

    pub fn salary_structure_routes(service: Arc<SalaryStructureService>) -> Router {
        create_salary_structure_routes(service)
    }

    pub fn salary_component_routes(service: Arc<SalaryComponentService>) -> Router {
        create_salary_component_routes(service)
    }

}