1use std::sync::Arc;
4
5use axum::{Router, middleware::from_fn_with_state, routing::get};
6
7use crate::{AppState, api::v1::auth::CurrentUser};
8
9mod auth;
10mod channels;
11mod guilds;
12mod invites;
13mod me;
14mod members;
15mod stats;
16mod users;
17
18pub fn router(app_state: Arc<AppState>) -> Router<Arc<AppState>> {
19 let router_with_auth = Router::new()
20 .nest("/users", users::router())
21 .nest("/guilds", guilds::router())
22 .nest("/invites", invites::router())
23 .nest("/members", members::router())
24 .nest("/me", me::router())
25 .layer(from_fn_with_state(
26 app_state.clone(),
27 CurrentUser::check_auth_layer,
28 ));
29
30 Router::new()
31 .route("/stats", get(stats::res))
32 .nest("/auth", auth::router(app_state.clone()))
33 .nest("/channels", channels::router(app_state))
34 .merge(router_with_auth)
35}