backend/api/v1/
mod.rs

1//! `/api/v1` Contains version 1 of the api
2
3use 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}