use axum::Router;
use std::sync::Arc;
use crate::presentation::http::{
create_attribute_routes,
create_attribute_read_routes,
create_attribute_value_routes,
create_attribute_value_read_routes,
create_brand_routes,
create_brand_read_routes,
create_item_routes,
create_item_read_routes,
create_item_group_routes,
create_item_group_read_routes,
create_item_variant_routes,
create_item_variant_read_routes,
create_uom_routes,
create_uom_read_routes,
create_uom_conversion_routes,
create_uom_conversion_read_routes
};
use crate::handlers::AppState;
#[cfg(any(test, feature = "unguarded"))]
pub fn create_stateless_routes(module: &crate::CatalogModule) -> Router<()> {
Router::new()
.merge(create_attribute_routes(module.attribute_service.clone()))
.merge(create_attribute_value_routes(module.attribute_value_service.clone()))
.merge(create_brand_routes(module.brand_service.clone()))
.merge(create_item_routes(module.item_service.clone()))
.merge(create_item_group_routes(module.item_group_service.clone()))
.merge(create_item_variant_routes(module.item_variant_service.clone()))
.merge(create_uom_routes(module.uom_service.clone()))
.merge(create_uom_conversion_routes(module.uom_conversion_service.clone()))
}
pub fn create_readonly_catalog_routes(module: &crate::CatalogModule) -> Router<()> {
Router::new()
.merge(create_attribute_read_routes(module.attribute_service.clone()))
.merge(create_attribute_value_read_routes(module.attribute_value_service.clone()))
.merge(create_brand_read_routes(module.brand_service.clone()))
.merge(create_item_read_routes(module.item_service.clone()))
.merge(create_item_group_read_routes(module.item_group_service.clone()))
.merge(create_item_variant_read_routes(module.item_variant_service.clone()))
.merge(create_uom_read_routes(module.uom_service.clone()))
.merge(create_uom_conversion_read_routes(module.uom_conversion_service.clone()))
}
#[cfg(any(test, feature = "unguarded"))]
pub fn get_routes(module: &crate::CatalogModule) -> Router<()> {
Router::new()
.nest("/api/v1", create_stateless_routes(module))
}
pub fn create_stateful_routes() -> Router<AppState> {
Router::new()
}
#[cfg(any(test, feature = "unguarded"))]
pub fn create_combined_routes(module: &crate::CatalogModule) -> 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())
}
#[cfg(any(test, feature = "unguarded"))]
pub fn get_routes_with_state(module: &crate::CatalogModule) -> Router<AppState> {
Router::new()
.nest("/api/v1", create_combined_routes(module))
}