api/routes/modules/assignments/plagiarism/mod.rs
1//! Plagiarism routes module.
2//!
3//! Provides the `/assignments/plagiarism` route group for handling plagiarism cases in assignments.
4//!
5//! Routes include:
6//! - Create, update, delete, and list plagiarism cases
7//! - Run MOSS plagiarism checks and get MOSS reports
8//! - Flag and review plagiarism cases
9//! - Retrieve plagiarism graph for visualization
10//!
11//! Access control should be enforced via middleware (not shown here) for lecturers, tutors, or assistants.
12
13use axum::{routing::{delete, get, patch, post, put}, Router};
14use get::{list_plagiarism_cases, get_graph, get_moss_report};
15use post::{create_plagiarism_case, run_moss_check};
16use put::update_plagiarism_case;
17use delete::{delete_plagiarism_case, bulk_delete_plagiarism_cases};
18use patch::{patch_plagiarism_flag, patch_plagiarism_review};
19use util::state::AppState;
20
21pub mod get;
22pub mod post;
23pub mod put;
24pub mod delete;
25pub mod patch;
26
27/// Builds and returns the `/assignments/plagiarism` route group.
28///
29/// Routes:
30/// - `GET /assignments/plagiarism` → List plagiarism cases
31/// - `GET /assignments/plagiarism/graph` → Get plagiarism graph
32/// - `POST /assignments/plagiarism` → Create a new plagiarism case
33/// - `POST /assignments/plagiarism/moss` → Run MOSS check on submissions
34/// - `GET /assignments/plagiarism/moss` → Get MOSS report
35/// - `PUT /assignments/plagiarism/{case_id}` → Update a plagiarism case
36/// - `DELETE /assignments/plagiarism/{case_id}` → Delete a plagiarism case
37/// - `DELETE /assignments/plagiarism/bulk` → Bulk delete plagiarism cases
38/// - `PATCH /assignments/plagiarism/{case_id}/flag` → Flag a plagiarism case
39/// - `PATCH /assignments/plagiarism/{case_id}/review`→ Review a plagiarism case
40pub fn plagiarism_routes() -> Router<AppState> {
41 Router::new()
42 .route("/", get(list_plagiarism_cases))
43 .route("/graph", get(get_graph))
44 .route("/", post(create_plagiarism_case))
45 .route("/moss", post(run_moss_check))
46 .route("/moss", get(get_moss_report))
47 .route("/{case_id}", put(update_plagiarism_case))
48 .route("/{case_id}", delete(delete_plagiarism_case))
49 .route("/bulk", delete(bulk_delete_plagiarism_cases))
50 .route("/{case_id}/flag", patch(patch_plagiarism_flag))
51 .route("/{case_id}/review", patch(patch_plagiarism_review))
52}