use axum::Router;
use std::sync::Arc;
use crate::presentation::http::{
create_account_routes,
create_account_read_routes,
create_accounting_post_routes,
create_accounting_post_read_routes,
create_cost_center_routes,
create_cost_center_read_routes,
create_financial_statement_routes,
create_financial_statement_read_routes,
create_fiscal_period_routes,
create_fiscal_period_read_routes,
create_journal_routes,
create_journal_read_routes,
create_journal_line_routes,
create_journal_line_read_routes,
create_ledger_routes,
create_ledger_read_routes,
create_reconciliation_routes,
create_reconciliation_read_routes,
create_reconciliation_item_routes,
create_reconciliation_item_read_routes
};
use crate::handlers::AppState;
pub fn create_stateless_routes(module: &crate::AccountingModule) -> Router<()> {
Router::new()
.merge(create_account_routes(module.account_service.clone()))
.merge(create_accounting_post_routes(module.accounting_post_service.clone()))
.merge(create_cost_center_routes(module.cost_center_service.clone()))
.merge(create_financial_statement_routes(module.financial_statement_service.clone()))
.merge(create_fiscal_period_routes(module.fiscal_period_service.clone()))
.merge(create_journal_routes(module.journal_service.clone()))
.merge(create_journal_line_routes(module.journal_line_service.clone()))
.merge(create_ledger_routes(module.ledger_service.clone()))
.merge(create_reconciliation_routes(module.reconciliation_service.clone()))
.merge(create_reconciliation_item_routes(module.reconciliation_item_service.clone()))
}
pub fn create_readonly_accounting_routes(module: &crate::AccountingModule) -> Router<()> {
Router::new()
.merge(create_account_read_routes(module.account_service.clone()))
.merge(create_accounting_post_read_routes(module.accounting_post_service.clone()))
.merge(create_cost_center_read_routes(module.cost_center_service.clone()))
.merge(create_financial_statement_read_routes(module.financial_statement_service.clone()))
.merge(create_fiscal_period_read_routes(module.fiscal_period_service.clone()))
.merge(create_journal_read_routes(module.journal_service.clone()))
.merge(create_journal_line_read_routes(module.journal_line_service.clone()))
.merge(create_ledger_read_routes(module.ledger_service.clone()))
.merge(create_reconciliation_read_routes(module.reconciliation_service.clone()))
.merge(create_reconciliation_item_read_routes(module.reconciliation_item_service.clone()))
}
pub fn get_routes(module: &crate::AccountingModule) -> Router<()> {
Router::new()
.nest("/api/v1", create_stateless_routes(module))
}
pub fn create_stateful_routes() -> Router<AppState> {
Router::new()
}
pub fn create_combined_routes(module: &crate::AccountingModule) -> Router<AppState> {
let crud_routes: Router<()> = create_stateless_routes(module);
let crud_routes_stateful: Router<AppState> = crud_routes.with_state(()).into();
Router::new()
.merge(crud_routes_stateful)
.merge(create_stateful_routes())
}
pub fn get_routes_with_state(module: &crate::AccountingModule) -> Router<AppState> {
Router::new()
.nest("/api/v1", create_combined_routes(module))
}