{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/politecnico-di-torino/main/json-schema/politecnico-di-torino-exam-schema.json",
  "title": "Exam",
  "description": "An exam session a Politecnico di Torino student can view or book via the Students API (source: polito/api-spec).",
  "type": "object",
  "required": [
    "id",
    "courseId",
    "courseShortcode",
    "courseName",
    "teacherId",
    "type",
    "status",
    "bookingEndsAt",
    "bookedCount",
    "availableCount"
  ],
  "properties": {
    "id": { "type": "integer" },
    "courseId": { "type": "number" },
    "courseShortcode": { "type": "string" },
    "courseName": { "type": "string" },
    "teacherId": { "type": "integer" },
    "type": { "type": "string" },
    "status": {
      "type": "string",
      "enum": [
        "available",
        "booked",
        "requestable",
        "requested",
        "requestAccepted",
        "requestRejected",
        "unavailable"
      ]
    },
    "bookingStartsAt": { "type": ["string", "null"], "format": "date-time" },
    "bookingEndsAt": { "type": "string", "format": "date-time" },
    "examStartsAt": { "type": ["string", "null"], "format": "date-time" },
    "examEndsAt": { "type": ["string", "null"], "format": "date-time" },
    "bookedCount": { "type": "integer" },
    "availableCount": { "type": "integer" },
    "isReschedulable": {
      "type": "boolean",
      "description": "If true, the student can ask the professor to reschedule the exam"
    },
    "feedback": { "type": ["string", "null"] },
    "notes": { "type": ["string", "null"] },
    "moduleNumber": { "type": "integer", "description": "The module number, if this is a module" }
  }
}
