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}