use axum::Router;
use std::sync::Arc;
use crate::presentation::http::{
create_issue_routes,
create_issue_read_routes,
create_service_level_agreement_routes,
create_service_level_agreement_read_routes,
create_service_level_priority_routes,
create_service_level_priority_read_routes,
create_warranty_claim_routes,
create_warranty_claim_read_routes
};
use crate::handlers::AppState;
pub fn create_stateless_routes(module: &crate::SupportModule) -> Router<()> {
Router::new()
.merge(create_issue_routes(module.issue_service.clone()))
.merge(create_service_level_agreement_routes(module.service_level_agreement_service.clone()))
.merge(create_service_level_priority_routes(module.service_level_priority_service.clone()))
.merge(create_warranty_claim_routes(module.warranty_claim_service.clone()))
}
pub fn create_readonly_support_routes(module: &crate::SupportModule) -> Router<()> {
Router::new()
.merge(create_issue_read_routes(module.issue_service.clone()))
.merge(create_service_level_agreement_read_routes(module.service_level_agreement_service.clone()))
.merge(create_service_level_priority_read_routes(module.service_level_priority_service.clone()))
.merge(create_warranty_claim_read_routes(module.warranty_claim_service.clone()))
}
pub fn get_routes(module: &crate::SupportModule) -> 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::SupportModule) -> 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::SupportModule) -> Router<AppState> {
Router::new()
.nest("/api/v1", create_combined_routes(module))
}