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}