api/routes/users/
mod.rs

1//! # Users Routes Module
2//!
3//! This module defines and wires up routes for the `/api/users` endpoint group.
4//!
5//! ## Structure
6//! - `get.rs` — GET handlers (e.g., list users)
7//! - `put.rs` — PUT handlers (e.g., update user)
8//! - `delete.rs` — DELETE handlers (e.g., delete user)
9//!
10//! ## Middleware
11//! The GET, PUT, and DELETE routes are protected using `require_admin` middleware.
12//!
13//! ## Usage
14//! The `users_routes()` function returns a `Router` which is nested under `/users` in the main application.
15
16use axum::{Router, routing::{get, put, delete, post}};
17use post::{create_user, bulk_create_users};
18use get::{list_users, get_user_modules, get_user};
19use put::update_user;
20use delete::delete_user;
21use util::state::AppState;
22use crate::routes::users::put::upload_avatar;
23
24pub mod post;
25pub mod get;
26pub mod put;
27pub mod delete;
28pub mod common;
29
30/// Builds the `/users` route group, mapping HTTP methods to handlers.
31///
32/// - `GET /users` → `list_users` (admin only)
33/// - `POST /users` → `create_user` (admin only)
34/// - `POST /users/bulk` → `bulk_create_users` (admin only)
35/// - `GET /users/{user_id}/modules` → `get_user_modules` (admin only)
36/// - `GET /users/{user_id}` → `get_user` (admin only)
37/// - `PUT /users/{user_id}` → `update_user` (admin only)
38/// - `DELETE /users/{user_id}` → `delete_user` (admin only)
39/// - `PUT /users/{user_id}/avatar` → `upload_avatar` (admin only)
40///
41/// # Returns
42/// A configured `Router` instance to be nested in the main app.
43
44pub fn users_routes() -> Router<AppState> {
45    Router::new()
46        .route("/", get(list_users))
47        .route("/", post(create_user))
48        .route("/bulk", post(bulk_create_users))
49        .route("/{user_id}/modules", get(get_user_modules))
50        .route("/{user_id}", get(get_user))
51        .route("/{user_id}", put(update_user))
52        .route("/{user_id}", delete(delete_user))
53        .route("/{user_id}/avatar", put(upload_avatar))
54}