use axum::Router;
use std::sync::Arc;
use crate::presentation::http::{
create_bank_routes,
create_bank_read_routes,
create_bank_account_routes,
create_bank_account_read_routes,
create_bank_clearance_routes,
create_bank_clearance_read_routes,
create_bank_reconciliation_routes,
create_bank_reconciliation_read_routes,
create_bank_statement_import_routes,
create_bank_statement_import_read_routes,
create_bank_transaction_routes,
create_bank_transaction_read_routes,
create_fx_gain_loss_routes,
create_fx_gain_loss_read_routes,
create_reconcile_preset_routes,
create_reconcile_preset_read_routes
};
use crate::handlers::AppState;
pub fn create_stateless_routes(module: &crate::BankingModule) -> Router<()> {
Router::new()
.merge(create_bank_routes(module.bank_service.clone()))
.merge(create_bank_account_routes(module.bank_account_service.clone()))
.merge(create_bank_clearance_routes(module.bank_clearance_service.clone()))
.merge(create_bank_reconciliation_routes(module.bank_reconciliation_service.clone()))
.merge(create_bank_statement_import_routes(module.bank_statement_import_service.clone()))
.merge(create_bank_transaction_routes(module.bank_transaction_service.clone()))
.merge(create_fx_gain_loss_routes(module.fx_gain_loss_service.clone()))
.merge(create_reconcile_preset_routes(module.reconcile_preset_service.clone()))
}
pub fn create_readonly_banking_routes(module: &crate::BankingModule) -> Router<()> {
Router::new()
.merge(create_bank_read_routes(module.bank_service.clone()))
.merge(create_bank_account_read_routes(module.bank_account_service.clone()))
.merge(create_bank_clearance_read_routes(module.bank_clearance_service.clone()))
.merge(create_bank_reconciliation_read_routes(module.bank_reconciliation_service.clone()))
.merge(create_bank_statement_import_read_routes(module.bank_statement_import_service.clone()))
.merge(create_bank_transaction_read_routes(module.bank_transaction_service.clone()))
.merge(create_fx_gain_loss_read_routes(module.fx_gain_loss_service.clone()))
.merge(create_reconcile_preset_read_routes(module.reconcile_preset_service.clone()))
}
pub fn get_routes(module: &crate::BankingModule) -> 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::BankingModule) -> 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::BankingModule) -> Router<AppState> {
Router::new()
.nest("/api/v1", create_combined_routes(module))
}