pub async fn list_plagiarism_cases(
__arg0: State<AppState>,
__arg1: Path<(i64, i64)>,
__arg2: Query<ListPlagiarismCaseQueryParams>,
) -> impl IntoResponse
Expand description
GET /api/modules/{module_id}/assignments/{assignment_id}/plagiarism
Retrieves paginated plagiarism cases for a specific assignment with filtering and sorting. Only accessible to lecturers and assistant lecturers assigned to the module.
§Path Parameters
module_id
: The ID of the parent moduleassignment_id
: The ID of the assignment to retrieve plagiarism cases for
§Query Parameters
page
: (Optional) Page number (default: 1, min: 1)per_page
: (Optional) Items per page (default: 20, max: 100)status
: (Optional) Filter by status:"review"
,"flagged"
, or"reviewed"
query
: (Optional) Case-insensitive fuzzy search on usernames of either submission’s usersort
: (Optional) Comma-separated sorting criteria; prefix with-
for descending. Valid fields:"created_at"
,"status"
,"similarity"
§Returns
200 OK
with paginated cases on success400 BAD REQUEST
for invalid params (status/sort/pagination)403 FORBIDDEN
if user lacks permissions500 INTERNAL SERVER ERROR
for database failures
§Example Response (200 OK)
{
"success": true,
"message": "Plagiarism cases retrieved successfully",
"data": {
"cases": [
{
"id": 12,
"status": "flagged",
"description": "Very similar submissions",
"similarity": 84.3,
"created_at": "2024-05-15T08:30:00Z",
"updated_at": "2024-05-16T10:15:00Z",
"submission_1": {
"id": 42,
"filename": "main.cpp",
"created_at": "2024-05-14T09:00:00Z",
"user": { "id": 5, "username": "u12345678", "email": "[email protected]", "profile_picture_path": null }
},
"submission_2": {
"id": 43,
"filename": "main.cpp",
"created_at": "2024-05-14T10:30:00Z",
"user": { "id": 6, "username": "u98765432", "email": "[email protected]", "profile_picture_path": null }
}
}
],
"page": 1,
"per_page": 20,
"total": 1
}
}
§Example Errors
400 Bad Request
—{ "success": false, "message": "Invalid status parameter" }
403 Forbidden
—{ "success": false, "message": "Forbidden: Insufficient permissions" }
500 Internal Server Error
—{ "success": false, "message": "Failed to retrieve plagiarism cases" }