use crate::http::OxRouter; use crate::http::middleware; use axum::{Router, middleware as axum_middleware}; use utoipa::OpenApi; use utoipa_swagger_ui::SwaggerUi; pub mod attachment; pub mod auth; pub mod category; pub mod channel; pub mod conversation; pub mod core; pub mod emoji; pub mod gateway; pub mod message; pub mod openapi; pub mod role; pub mod rtc; pub mod server; pub mod server_item_order; pub mod user; pub mod voice; pub fn router() -> OxRouter { // Routes nécessitant une authentification let secure_routes = Router::new() .merge(server::routes::router()) .merge(server_item_order::routes::router()) .merge(category::routes::router()) .merge(channel::routes::router()) .merge(conversation::routes::router()) .merge(role::routes::router()) .merge(message::routes::router()) .merge(attachment::routes::secure_router()) .merge(user::routes::router()) .merge(emoji::routes::router()) .layer(axum_middleware::from_fn(middleware::require_auth)); // Routes publiques (ou gérant leur propre auth) let api_routes = Router::new() .merge(secure_routes) .merge(auth::routes::router()) .merge(core::routes::router()); let public_attachment_routes = attachment::routes::public_router(); let ws_routes = Router::new() .merge(gateway::routes::router()) .merge(voice::routes::router()) .merge(rtc::routes::router()); Router::new() .nest("/api", api_routes) .nest("/api", public_attachment_routes) .nest("/ws", ws_routes) .merge(SwaggerUi::new("/swagger").url("/api-docs/openapi.json", openapi::ApiDoc::openapi())) }