api/routes/modules/
mod.rs1use axum::{middleware::{from_fn, from_fn_with_state}, routing::{delete, get, post, put}, Router};
16use delete::{delete_module, bulk_delete_modules};
17use get::{get_module, get_modules, get_my_details};
18use post::create;
19use put::{edit_module, bulk_edit_modules};
20use assignments::assignment_routes;
21use util::state::AppState;
22use crate::{auth::guards::{require_admin, require_assigned_to_module, require_lecturer}, routes::modules::{announcements::announcement_routes, personnel::personnel_routes}};
23
24pub mod assignments;
25pub mod personnel;
26pub mod delete;
27pub mod get;
28pub mod post;
29pub mod put;
30pub mod common;
31pub mod announcements;
32
33pub fn modules_routes(app_state: AppState) -> Router<AppState> {
47 Router::new()
48 .route("/", get(get_modules))
49 .route("/me", get(get_my_details))
50 .route("/{module_id}", get(get_module).route_layer(from_fn_with_state(app_state.clone(),require_assigned_to_module)))
51 .route("/", post(create).route_layer(from_fn(require_admin)))
52 .route("/{module_id}", put(edit_module).route_layer(from_fn(require_admin)))
53 .route("/{module_id}", delete(delete_module).route_layer(from_fn(require_admin)))
54 .route("/bulk", delete(bulk_delete_modules).route_layer(from_fn(require_admin)))
55 .route("/bulk", put(bulk_edit_modules).route_layer(from_fn(require_admin)))
56 .nest("/{module_id}/assignments", assignment_routes(app_state.clone()))
57 .nest("/{module_id}/personnel", personnel_routes().route_layer(from_fn_with_state(app_state.clone(),require_lecturer)))
58 .nest("/{module_id}/announcements", announcement_routes(app_state.clone()).route_layer(from_fn_with_state(app_state.clone(), require_assigned_to_module)))
59}