Function list_plagiarism_cases

Source
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 module
  • assignment_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 user
  • sort: (Optional) Comma-separated sorting criteria; prefix with - for descending. Valid fields: "created_at", "status", "similarity"

§Returns

  • 200 OK with paginated cases on success
  • 400 BAD REQUEST for invalid params (status/sort/pagination)
  • 403 FORBIDDEN if user lacks permissions
  • 500 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" }