api/routes/modules/personnel/mod.rs
1//! # Module Personnel Routes
2//!
3//! Defines and wires up routes for the `/modules/{module_id}/personnel` endpoint group.
4//!
5//! ## Structure
6//! - `post.rs` — POST handlers (e.g., assign users to a role in a module)
7//! - `get.rs` — GET handlers (e.g., fetch assigned or eligible users)
8//! - `delete.rs` — DELETE handlers (e.g., remove users from a module role)
9//!
10//! ## Usage
11//! Called via `modules_routes()` as a nested router mounted under `/modules/{module_id}/personnel`.
12//! This route group is protected by `require_lecturer` middleware in the parent router.
13
14use axum::{Router, routing::{get, post, delete}};
15use util::state::AppState;
16
17mod get;
18mod post;
19mod delete;
20
21/// Builds and returns the `/modules/{module_id}/personnel` route group.
22///
23/// Routes:
24/// - `GET /personnel` → get all assigned users grouped by role
25/// - `POST /personnel` → assign one or more users to a role
26/// - `DELETE /personnel` → remove one or more users from a role
27/// - `GET /personnel/eligible` → fetch users not assigned to any role in the module
28pub fn personnel_routes() -> Router<AppState> {
29 Router::new()
30 .route("/", get(get::get_personnel))
31 .route("/", post(post::assign_personnel))
32 .route("/", delete(delete::remove_personnel))
33 .route("/eligible", get(get::get_eligible_users_for_module))
34}