pub mod openapi; use axum::Router; use export::AppState; use session::{SessionLayer, store}; use tower_http::limit::RequestBodyLimitLayer; use tower_http::trace::{DefaultMakeSpan, DefaultOnRequest, DefaultOnResponse, TraceLayer}; use tracing::Level; /// Max chat JSON request body (covers the 512 KiB base64 emoji upload). const MAX_REQUEST_BODY_BYTES: usize = 2 * 1024 * 1024; pub async fn router(state: AppState) -> Result { let store = store::connect(state.redis.clone(), &state.config.session).await?; let auth = auth::services::AuthService::new(state.clone()); let chat = chat::services::service::ChatService::new(state.clone()); let issues = issues::services::service::IssueService::new(state.clone()); let space = space::services::service::SpaceService::new(state.clone()); let user = user::services::service::UserService::new(state.clone()); let git = git::service::GitService::new(state); let router: Router = Router::new() .merge(auth::routes::router(auth.clone()).with_state(auth)) .merge(chat::routes::router(chat.clone()).with_state(chat)) .merge(issues::routes::router(issues.clone()).with_state(issues)) .merge(space::routes::router(space.clone()).with_state(space)) .merge(user::routes::router(user.clone()).with_state(user)) .merge(git::routes::router(git.clone()).with_state(git)) .layer(SessionLayer::new(store)) .layer(RequestBodyLimitLayer::new(MAX_REQUEST_BODY_BYTES)) .layer( TraceLayer::new_for_http() .make_span_with( DefaultMakeSpan::new() .level(Level::INFO) .include_headers(false), ) .on_request(DefaultOnRequest::new().level(Level::INFO)) .on_response(DefaultOnResponse::new().level(Level::INFO)), ); Ok(router) }