{
  "openapi": "3.0.1",
  "info": {
    "title": "SoftLanding.ApiService | teacher",
    "version": "1.0.0"
  },
  "paths": {
    "/teacher/attendance-documents": {
      "post": {
        "tags": [
          "AttendanceDocument (Teacher)"
        ],
        "summary": "Upload an absence document (multipart/form-data).",
        "description": "As the office endpoint: stores the file and returns its id for the following lesson `PATCH`. Accepts\nPDF, JPEG and PNG up to 10 MB; anything else is `400`.",
        "operationId": "UploadAttendanceDocumentTeacher",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "file"
                ],
                "type": "object",
                "properties": {
                  "file": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadedDocument"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/attendance-documents/{id}": {
      "delete": {
        "tags": [
          "AttendanceDocument (Teacher)"
        ],
        "summary": "Discard your own not-yet-attached upload.",
        "description": "Deletes a document this teacher uploaded that is not attached to any attendance record — what the\ndialog calls when it is closed without saving, so a picked-but-abandoned file leaves nothing behind.\n\nDeliberately narrower than the office route: a document that IS attached to a record cannot be deleted\nhere, and neither can somebody else's upload. Both answer `404` — never `403`, which would already\nconfirm the document exists.",
        "operationId": "DiscardAttendanceDocumentTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "AttendanceDocument (Teacher)"
        ],
        "summary": "Download an absence document of one of your own lessons.",
        "description": "Streams the stored file. A teacher may only read documents attached to an attendance record of a lesson\nof a course they teach (main or additional teacher), plus their own not-yet-attached upload.\n\nAnything else is `404`, never `403` — these are medical certificates about named students, and a `403`\nwould already confirm that the document exists.",
        "operationId": "DownloadAttendanceDocumentTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/lessons": {
      "get": {
        "tags": [
          "Lesson (Teacher)"
        ],
        "summary": "List the signed-in teacher's lessons.",
        "description": "Returns the signed-in teacher's own lessons (\"my lessons\"), each as a `LessonGet` with course\ncontext, date, start/end time, duration, computed status, teaching salary and travel\nallowance, cancellation flag, homework, attendance records and lesson notes. Lessons of other\nteachers are never returned. Soft-deleted lessons are excluded unless you pass\n`showRemoved=true`. Filter with `searchTerm` (matches course display and homework text), a\n`dateFrom`/`dateTo` range and `isCancelled`.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50,\n`-50` = last 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property\nname of the returned object, case-insensitive) and `desc` query parameters. The body is a\nplain JSON array; the total count is returned in the `Content-Range` response header\n(`items {start}-{end}/{total}`). Status is `206` when a `Range` is sent, `416` if the range\nis invalid.",
        "operationId": "GetLessonsTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "DateFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "DateTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "IsCancelled",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LessonGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LessonGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      },
      "post": {
        "tags": [
          "Lesson (Teacher)"
        ],
        "summary": "Create a lesson for the signed-in teacher.",
        "description": "Creates a lesson from the `LessonPost` body (target `courseId` and date/time); the lesson is\nassigned to the signed-in teacher (a lesson has exactly one teacher), and only under a course they\nteach — otherwise `400`. Returns the created `LessonGet` with its generated id, or\n`400` with validation details if the body is invalid.",
        "operationId": "CreateLessonTeacher",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LessonPost"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LessonGet"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/lessons/{id}": {
      "get": {
        "tags": [
          "Lesson (Teacher)"
        ],
        "summary": "Get one of the signed-in teacher's lessons by id.",
        "description": "Returns a single one of the signed-in teacher's lessons, as a `LessonGet`. Returns `404` if\nno such lesson exists or if it is not one of the signed-in teacher's lessons.",
        "operationId": "GetLessonTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LessonGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Lesson (Teacher)"
        ],
        "summary": "Partially update one of the signed-in teacher's lessons.",
        "description": "Partially updates one of the signed-in teacher's lessons: only the fields present in the\n`LessonPatch` body are changed, the rest stay as they are. Returns the updated `LessonGet`,\n`400` on validation errors, or `404` if the lesson does not exist or is not one of your own.\n\nBesides date/time, homework, notes, travel allowance and the attendance records, two\nassignments can be changed here:\n\n* `roomId` moves THIS lesson to another room, overriding the course's room for it;\n  `removeRoom` clears that override so the lesson takes place in the course's room again\n  (never \"nowhere\"). An unknown room is a `400`.\n* `teacherId` changes WHO holds the lesson — a lesson has exactly one teacher, so it REPLACES\n  the assignment. Only the MAIN teacher of the course may do that (`403` otherwise), and the id must\n  already be a teacher of that course (`400`).",
        "operationId": "UpdateLessonTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LessonPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LessonGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Lesson (Teacher)"
        ],
        "summary": "Delete one of the signed-in teacher's lessons (soft by default; ?hard=true to hard-delete).",
        "description": "Deletes one of the signed-in teacher's lessons. By default this is a soft delete — the lesson\nis hidden from normal listings but can be restored; pass `?hard=true` to remove it\npermanently. Returns `204`, or `404` if the lesson does not exist or is not one of your own.",
        "operationId": "DeleteLessonTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "hard",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/lessons/{id}/restore": {
      "post": {
        "tags": [
          "Lesson (Teacher)"
        ],
        "summary": "Restore one of the signed-in teacher's soft-deleted lessons.",
        "description": "Restores one of the signed-in teacher's previously soft-deleted lessons so it appears in\nnormal listings again. Returns `204`, or `404` if no such lesson exists or it is not one of\nyour own.",
        "operationId": "RestoreLessonTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/courses": {
      "get": {
        "tags": [
          "Course (Teacher)"
        ],
        "summary": "List the signed-in teacher's courses.",
        "description": "Returns the courses assigned to the signed-in teacher (\"my courses\"), each as a `CourseGet`\nwith name, type, subject, level, status, colour, capacity, weekly schedule, start/end dates,\nroom, required materials, assigned students and lessons. Pricing and invite information are\nnot part of the teacher view, and courses belonging to other teachers are never returned.\nSoft-deleted courses are excluded unless you pass `showRemoved=true`. Filter with `searchTerm`\n(matches course name and description), `courseTypeId`, `courseTypeIds`, `statusId`,\n`subjectId`, `levelId`, a `startDateFrom`/`startDateTo` range and `isForChildren`.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50,\n`-50` = last 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property\nname of the returned object, case-insensitive) and `desc` query parameters. The body is a\nplain JSON array; the total count is returned in the `Content-Range` response header\n(`items {start}-{end}/{total}`). Status is `206` when a `Range` is sent, `416` if the range\nis invalid.",
        "operationId": "GetCoursesTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "CourseTypeId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "CourseTypeIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "StatusId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "SubjectId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "LevelId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "StartDateFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "StartDateTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "IsForChildren",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CourseGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CourseGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      }
    },
    "/teacher/courses/{id}": {
      "get": {
        "tags": [
          "Course (Teacher)"
        ],
        "summary": "Get one of the signed-in teacher's courses by id.",
        "description": "Returns a single course assigned to the signed-in teacher, as a `CourseGet`. Returns `404` if\nno such course exists or if it is not assigned to the signed-in teacher.",
        "operationId": "GetCourseTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CourseGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/courses/{id}/materials": {
      "post": {
        "tags": [
          "Course (Teacher)"
        ],
        "summary": "Add material to one of the signed-in teacher's courses (Materialbestellung, Fall 2).",
        "description": "Adds one or more materials to the material list of a course the signed-in teacher teaches (main or\nadditional teacher), and starts the material-order process for them. No office approval is involved.\n\nThe addition applies to the WHOLE course, not to individually chosen students: every enrolled student\ngets the new articles as `pending` rows on their confirmation page, and each is announced by\nnotification AND e-mail — to the student directly when they are an adult, to the responsible customer\nwhen they are a minor. Articles that were already answered are left untouched, so the confirmer is only\nasked about what is new.\n\nAdding is the only operation offered. Whether a teacher may remove material again, and what should then\nhappen to articles that are already ordered, is still an open point of the specification.\n\nIdempotent: a material already on the list is skipped, so re-sending the same request adds nothing and\nnotifies nobody. The response is the number of materials actually added.\n\nMaterial confirmed this way is billed on the customer's next monthly invoice (not as a separate material\ninvoice, which is what confirming the list together with the course invitation produces).\n\nReturns `400` when the selection is empty, contains a duplicate or names a material that does not\nexist, `403` without the `teacher` role, and `404` when the course does not exist or is not one the\nsigned-in teacher teaches.",
        "operationId": "AddCourseMaterialsTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CourseMaterialAddPost"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CourseMaterialAddResult"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/my-profile": {
      "get": {
        "tags": [
          "Teacher MyProfile"
        ],
        "summary": "Get the signed-in teacher's own profile.",
        "description": "Returns the signed-in teacher's own profile as a `TeacherGet` (personal and employment\ndetails, address, bank information, spoken languages, weekly availability and absences). The\nrecord is resolved from the signed-in user, so no id is passed. Returns `404` when the\nsigned-in user has no linked teacher record.",
        "operationId": "GetTeacherMyProfile",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeacherGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Teacher MyProfile"
        ],
        "summary": "Partially update the signed-in teacher's own profile (reduced self-edit DTO).",
        "description": "Partially updates the signed-in teacher's own profile from a reduced self-edit body\n(`MyProfilePatch`): only address, bank information (IBAN, account holder), spoken languages,\nweekly time slots and absence periods are editable here; all other fields (including email,\nname and employment data) are read-only for the teacher and are never changed. Collection\nfields use an add/update/remove strategy. Returns the updated `TeacherGet`, `400` on\nvalidation errors, or `404` when the signed-in user has no linked teacher record.",
        "operationId": "UpdateTeacherMyProfile",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MyProfilePatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeacherGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/my-payments": {
      "get": {
        "tags": [
          "TeacherPayment (Teacher)"
        ],
        "summary": "List the signed-in teacher's payments.",
        "description": "Returns the salary payments of the signed-in teacher (\"my payments\"), each as a\n`TeacherPaymentGet` with the payment month, lesson count and line items, base/gross/net/actual\npay, supplements, social-insurance deductions, travel expenses, child entitlement and any\npayment warnings. Payments of other teachers are never returned; this view is read-only.\nFilter with a `paymentMonthFrom`/`paymentMonthTo` range, `minTotalLessons`/`maxTotalLessons`\nand `minActualPay`/`maxActualPay`; soft-deleted entries are excluded unless you pass\n`showRemoved=true`.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50,\n`-50` = last 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property\nname of the returned object, case-insensitive) and `desc` query parameters. The body is a\nplain JSON array; the total count is returned in the `Content-Range` response header\n(`items {start}-{end}/{total}`). Status is `206` when a `Range` is sent, `416` if the range\nis invalid.",
        "operationId": "GetMyPaymentsTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "TeacherId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "PaymentMonthFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "PaymentMonthTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "MinTotalLessons",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "MaxTotalLessons",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "MinActualPay",
            "in": "query",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "MaxActualPay",
            "in": "query",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeacherPaymentGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeacherPaymentGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      }
    },
    "/teacher/my-payments/{id}": {
      "get": {
        "tags": [
          "TeacherPayment (Teacher)"
        ],
        "summary": "Get one of the signed-in teacher's payments by id.",
        "description": "Returns a single one of the signed-in teacher's payments, as a `TeacherPaymentGet`. Returns\n`404` if no such payment exists or if it does not belong to the signed-in teacher.",
        "operationId": "GetMyPaymentTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeacherPaymentGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/my-invites": {
      "get": {
        "tags": [
          "TeacherInvite (Teacher)"
        ],
        "summary": "List the signed-in teacher's invites.",
        "description": "Returns the course invitations addressed to the signed-in teacher (\"my invites\"), each as a\n`TeacherInviteGet` with the invited course, status and timestamps. Invitations for other\nteachers are never returned. By default only pending invitations are shown; pass a specific\n`statusId` (or `showPendingOnly=false`) to widen. Filter additionally with `searchTerm`\n(matches teacher and course name) and `courseId`; soft-deleted entries are excluded unless you\npass `showRemoved=true`.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50,\n`-50` = last 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property\nname of the returned object, case-insensitive) and `desc` query parameters. The body is a\nplain JSON array; the total count is returned in the `Content-Range` response header\n(`items {start}-{end}/{total}`). Status is `206` when a `Range` is sent, `416` if the range\nis invalid.",
        "operationId": "GetMyInvitesTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "CourseId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "TeacherId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "StatusId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "ShowPendingOnly",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeacherInviteGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeacherInviteGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      }
    },
    "/teacher/my-invites/{id}": {
      "get": {
        "tags": [
          "TeacherInvite (Teacher)"
        ],
        "summary": "Get one of the signed-in teacher's invites by id.",
        "description": "Returns a single invitation addressed to the signed-in teacher, as a `TeacherInviteGet`.\nReturns `404` if no such invitation exists or if it is not addressed to the signed-in teacher.",
        "operationId": "GetMyInviteTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeacherInviteGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "TeacherInvite (Teacher)"
        ],
        "summary": "Accept or deny one of the signed-in teacher's own invites.",
        "description": "Accepts or denies one of the signed-in teacher's own invitations by updating its status\n(`TeacherInvitePatch`). Only the invited teacher may respond. Returns the updated\n`TeacherInviteGet`, `400` on validation errors, or `404` if the invitation does not exist or\nis not addressed to the signed-in teacher.",
        "operationId": "UpdateMyInviteTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeacherInvitePatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeacherInviteGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/my-students": {
      "get": {
        "tags": [
          "TeacherStudent (Teacher)"
        ],
        "summary": "List the signed-in teacher's students.",
        "description": "Returns the students taught by the signed-in teacher (\"my students\"), each as a\n`TeacherStudentGet` with reduced student details, learning subjects, responsible-customer\ncontact data, enrolled courses, attended lessons, received materials, exam records and teacher\nnotes. Membership is derived from the students' enrolments in the courses you are ASSIGNED to —\nas the main teacher or as an additional one, the two count the same. Students of other teachers\nare never returned, and the teacher notes shown are only your own, not those of colleagues.\nBeing assigned to the course is also what makes a student's name visible at all: before that,\na request about them is anonymised in `/teacher/my-applications`.\nFilter with `searchTerm` (matches student name, customer name and email),\n`nativeLanguageId`, `customerTypeId`, `customerId` and `isChild`; soft-deleted entries are\nexcluded unless you pass `showRemoved=true`.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50,\n`-50` = last 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property\nname of the returned object, case-insensitive) and `desc` query parameters. The body is a\nplain JSON array; the total count is returned in the `Content-Range` response header\n(`items {start}-{end}/{total}`). Status is `206` when a `Range` is sent, `416` if the range\nis invalid.",
        "operationId": "GetMyStudentsTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "NativeLanguageId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "CustomerTypeId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "IsChild",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "CustomerId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Status",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/NullableOfEStudentStatus"
            }
          },
          {
            "name": "TeacherId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeacherStudentGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TeacherStudentGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      }
    },
    "/teacher/my-students/{id}": {
      "get": {
        "tags": [
          "TeacherStudent (Teacher)"
        ],
        "summary": "Get one of the signed-in teacher's students by id.",
        "description": "Returns a single one of the signed-in teacher's students, as a `TeacherStudentGet`. Returns\n`404` if no such student exists or if they are not enrolled in a course the signed-in teacher\nis assigned to (main or additional teacher) — a `404` rather than a `403`, so the reply does\nnot confirm that the student exists.",
        "operationId": "GetMyStudentTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeacherStudentGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "TeacherStudent (Teacher)"
        ],
        "summary": "Update one of the signed-in teacher's students (notes / exam records).",
        "description": "Updates one of the signed-in teacher's own students, limited to teacher notes and exam records\n(`TeacherStudentPatch`, add/update/remove strategy) — the student's core data is not editable\nhere, and the notes added are the teacher's own. Only a student taught by the signed-in\nteacher may be updated. Returns the updated `TeacherStudentGet`, `400` on validation errors,\nor `404` if the student is not in your set.",
        "operationId": "UpdateMyStudentTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeacherStudentPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeacherStudentGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/my-applications": {
      "get": {
        "tags": [
          "MatchingInterest (Teacher)"
        ],
        "summary": "List interests matching the signed-in teacher's qualifications.",
        "description": "Returns the open student interests (learning requests) that match the signed-in teacher's\nqualifications — the teacher's \"my applications\" view — each as an `InterestGet` with the\nrequested language, level, interest type, time period, desired frequency, availability time\nslots and the current teacher applications. Only interests matching your qualifications are\nreturned.\n\n**The requesting party is anonymised**, and stays so until the office assigns you to the\nstudent's course (as its main or as an additional teacher — from then on the student appears\nin `/teacher/my-students` with their full details). Withheld here: the requesting customer,\nthe preferred address, and the student's name (`firstName`, `lastName` and `displayName` are\nall empty). Kept, because the decision to apply is a pedagogical one: language, level,\ninterest type, time period, frequency, time slots, the request notes, and the student's\n`age`, `isChild` and native language.\n\nFilter with `searchTerm` (matches language and level — deliberately NOT the student name,\nwhich would hand back the identity one guess at a time), `languageId`, `levelId` and\n`interestTypeId`.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50,\n`-50` = last 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property\nname of the returned object, case-insensitive) and `desc` query parameters. The body is a\nplain JSON array; the total count is returned in the `Content-Range` response header\n(`items {start}-{end}/{total}`). Status is `206` when a `Range` is sent, `416` if the range\nis invalid.",
        "operationId": "GetMyApplicationsTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "LanguageId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "LevelId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "InterestTypeId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "TeacherId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InterestGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InterestGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      }
    },
    "/teacher/my-applications/{id}": {
      "get": {
        "tags": [
          "MatchingInterest (Teacher)"
        ],
        "summary": "Get one matching interest by id (must be in the teacher's matched set).",
        "description": "Returns a single matching interest by its id as an `InterestGet`, provided it is part of the\nsigned-in teacher's matched set. Returns `404` otherwise. As in the list view, the requesting\ncustomer, the address and the student's NAME are withheld until you are assigned to the\nstudent's course; the age, the native language and the pedagogical fields are returned.",
        "operationId": "GetMyApplicationTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterestGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "MatchingInterest (Teacher)"
        ],
        "summary": "Express interest in / withdraw from a matching interest (teacher application).",
        "description": "Expresses interest in, or withdraws from, a matching interest (the teacher \"applies\" or\nretracts their application) via the `InterestPatch` body. Only interests in the signed-in\nteacher's matched set may be acted on. Returns the updated `InterestGet`, `400` on validation\nerrors, or `404` if the interest is not part of your matched set.",
        "operationId": "UpdateMyApplicationTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InterestPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterestGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/rooms": {
      "get": {
        "tags": [
          "Room (Teacher)"
        ],
        "summary": "List rooms (teacher, read-only).",
        "description": "Returns the rooms a teacher can assign one of their lessons to, each as a `RoomGet` with its name,\nsize in square meters, maximum student capacity, operational status and the location it belongs to.\nNot row-restricted — a room is shared infrastructure, and the teacher needs to see the ones that\nexist. Soft-deleted rooms are excluded unless you pass `showRemoved=true`. Filter with `searchTerm`\n(matches the room name), `statusId` (resolvable via the room-status lookup), `locationId`, and the\n`minSizeInSquareMeters`/`maxSizeInSquareMeters` and `minMaxStudents`/`maxMaxStudents` ranges.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50,\n`-50` = last 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property name\nof the returned object, case-insensitive) and `desc` query parameters. The body is a plain JSON\narray; the total count is returned in the `Content-Range` response header\n(`items {start}-{end}/{total}`). Status is `206` when a `Range` is sent, `416` if the range is\ninvalid. `401` when not signed in, `403` without the teacher role.",
        "operationId": "GetRoomsTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "StatusId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "LocationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "MinSizeInSquareMeters",
            "in": "query",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "MaxSizeInSquareMeters",
            "in": "query",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "MinMaxStudents",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "MaxMaxStudents",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoomGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoomGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      }
    },
    "/teacher/rooms/{id}": {
      "get": {
        "tags": [
          "Room (Teacher)"
        ],
        "summary": "Get a single room by id (teacher, read-only).",
        "description": "Returns a single room by its id as a `RoomGet` — what the lesson dialog reads back to show the room\na lesson is currently assigned to. Returns `404` if no room with that id exists, `401` when not\nsigned in and `403` without the teacher role.",
        "operationId": "GetRoomTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoomGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/teacher/materials": {
      "get": {
        "tags": [
          "Material (Teacher)"
        ],
        "summary": "List materials (teacher, read-only).",
        "description": "Returns the materials a teacher can add to one of their courses, each as a `MaterialGet` with its\ntitle, description, ISBN, language, level, type, price, citizenship flag and stock amount. Not\nrow-restricted — a material is shared infrastructure, and the teacher needs to see the ones that\nexist. Soft-deleted materials are excluded unless you pass `showRemoved=true`. Filter with\n`searchTerm` (matches title, description and ISBN), `languageId`, `levelId`, `typeId` and\n`citizenship`.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50, `-50` =\nlast 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property name of the\nreturned object, case-insensitive) and `desc` query parameters. The body is a plain JSON array; the\ntotal count is returned in the `Content-Range` response header (`items {start}-{end}/{total}`).\nStatus is `206` when a `Range` is sent, `416` if the range is invalid. `401` when not signed in,\n`403` without the teacher role.",
        "operationId": "GetMaterialsTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "LanguageId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "LevelId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "TypeId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Citizenship",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      }
    },
    "/teacher/materials/{id}": {
      "get": {
        "tags": [
          "Material (Teacher)"
        ],
        "summary": "Get a single material by id (teacher, read-only).",
        "description": "Returns a single material by its id as a `MaterialGet` — what the material picker reads back to show a\nmaterial that is already on the course. Returns `404` if no material with that id exists, `401` when\nnot signed in and `403` without the teacher role.",
        "operationId": "GetMaterialTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/teacher/homeworks": {
      "get": {
        "tags": [
          "Homework (Teacher)"
        ],
        "summary": "List homeworks of the signed-in teacher's lessons.",
        "description": "Returns the homework of the signed-in teacher's own lessons, each as a `HomeworkGet` with the\ntask description, due date and the owning lesson/course context. Homework of other teachers'\nlessons is never returned. Soft-deleted entries are excluded unless you pass `showRemoved=true`.\nFilter with `searchTerm` (matches the description) and `lessonId` to narrow to a single lesson.\nResults are ordered by due date.\n\nSupports pagination and sorting: send an optional `Range` request header (`0-49` = first 50,\n`-50` = last 50, `50` = from index 50; 0-based, end inclusive) plus the `orderBy` (a property\nname of the returned object, case-insensitive) and `desc` query parameters. The body is a\nplain JSON array; the total count is returned in the `Content-Range` response header\n(`items {start}-{end}/{total}`). Status is `206` when a `Range` is sent, `416` if the range\nis invalid.",
        "operationId": "GetHomeworksTeacher",
        "parameters": [
          {
            "name": "SearchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ShowRemoved",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "LessonId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Range",
            "in": "header",
            "description": "Pagination window (zero-based, end inclusive): `{start}-{end}` e.g. `0-49`; `-{n}` = last n; `{n}` = first n. When set, the response is 206 with a `Content-Range` header.",
            "schema": {
              "type": "string",
              "example": "0-49"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort by this result property name (case-insensitive). Unknown property → 400.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "desc",
            "in": "query",
            "description": "Sort descending when true (default false). Applied before pagination.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HomeworkGet"
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial Content — returned when a `Range` header is present. Body is the requested window.",
            "headers": {
              "Content-Range": {
                "description": "`items {start}-{end}/{total}` (empty page → `items */{total}`).",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HomeworkGet"
                  }
                }
              }
            }
          },
          "416": {
            "description": "Range Not Satisfiable — the `Range` header is malformed or starts beyond the last item."
          }
        }
      },
      "post": {
        "tags": [
          "Homework (Teacher)"
        ],
        "summary": "Create a homework for one of the signed-in teacher's lessons.",
        "description": "Creates a homework for one of the signed-in teacher's lessons from the `HomeworkPost` body\n(target `lessonId`, description and due date) and returns the created `HomeworkGet` with its\ngenerated id. Returns `400` with validation details if the body is invalid, e.g. if the\nreferenced lesson is not one of your own.",
        "operationId": "CreateHomeworkTeacher",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HomeworkPost"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HomeworkGet"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/homeworks/{id}": {
      "get": {
        "tags": [
          "Homework (Teacher)"
        ],
        "summary": "Get one of the signed-in teacher's homeworks by id.",
        "description": "Returns a single homework by its id as a `HomeworkGet`. Returns `404` if no such homework\nexists or if it does not belong to one of the signed-in teacher's lessons.",
        "operationId": "GetHomeworkTeacherById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HomeworkGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Homework (Teacher)"
        ],
        "summary": "Partially update one of the signed-in teacher's homeworks.",
        "description": "Partially updates one of the signed-in teacher's homework assignments: only the fields present\nin the `HomeworkPatch` body (description, due date) are changed; the owning lesson cannot be\nreassigned. Returns the updated `HomeworkGet`, `400` on validation errors, or `404` if the\nhomework does not exist or is not on one of your own lessons.",
        "operationId": "UpdateHomeworkTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HomeworkPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HomeworkGet"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Homework (Teacher)"
        ],
        "summary": "Delete one of the signed-in teacher's homeworks (soft by default; ?hard=true to hard-delete).",
        "description": "Deletes one of the signed-in teacher's homework assignments. By default this is a soft delete\n— the homework is hidden from normal listings but can be restored; pass `?hard=true` to remove\nit permanently. Returns `204`, or `404` if the homework does not exist or is not on one of\nyour own lessons.",
        "operationId": "DeleteHomeworkTeacher",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "hard",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/teacher/dashboard": {
      "get": {
        "tags": [
          "Dashboard (Teacher)"
        ],
        "summary": "Get the teacher dashboard aggregate.",
        "description": "Returns a single read-only snapshot object for the signed-in teacher's home screen, assembled in\none call instead of from the individual teacher endpoints.\n\nIt is scoped to the signed-in teacher and contains only their own data:\n- counters for today (lessons today, absences reported today, lessons this month) and the number of\n  matching interests still open to apply for,\n- the next upcoming lesson today and the ordered list of today's lessons,\n- absence notifications affecting today's lessons.\n\nThe figures are point-in-time and computed on each request. Another teacher's data is never included.",
        "operationId": "GetTeacherDashboard",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeacherDashboardGet"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AbsenceNotificationItem": {
        "type": "object",
        "properties": {
          "studentName": {
            "type": "string"
          },
          "courseName": {
            "type": "string"
          },
          "lessonStartTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "lessonEndTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfEAttendanceStatus"
          },
          "hasDocument": {
            "type": "boolean"
          }
        }
      },
      "AbsencePeriodGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "reason": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "AbsencePeriodPatch": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "nullable": true
          },
          "removeReason": {
            "type": "boolean"
          }
        }
      },
      "AbsencePeriodPatchWithId": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "patch": {
            "$ref": "#/components/schemas/AbsencePeriodPatch"
          }
        }
      },
      "AbsencePeriodPost": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "reason": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "AddressInfoDto": {
        "type": "object",
        "properties": {
          "street": {
            "type": "string"
          },
          "houseNumber": {
            "type": "string",
            "nullable": true
          },
          "additionalLine": {
            "type": "string",
            "nullable": true
          },
          "postalCode": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "poBox": {
            "type": "string",
            "nullable": true
          }
        },
        "nullable": true
      },
      "AttendanceRecordGet": {
        "type": "object",
        "properties": {
          "ownerRef": {
            "type": "string",
            "format": "uuid"
          },
          "ownerTypeName": {
            "type": "string"
          },
          "studentId": {
            "type": "string",
            "format": "uuid"
          },
          "student": {
            "$ref": "#/components/schemas/StudentRef"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfEAttendanceStatus"
          },
          "absenceDocumentPath": {
            "type": "string",
            "nullable": true
          },
          "absenceDocumentId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "absenceDocumentSizeBytes": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "AttendanceRecordPatch": {
        "type": "object",
        "properties": {
          "ownerRef": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "ownerTypeName": {
            "type": "string",
            "nullable": true
          },
          "studentId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "statusId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "absenceDocumentPath": {
            "type": "string",
            "nullable": true
          },
          "absenceDocumentId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "removeAbsenceDocument": {
            "type": "boolean"
          },
          "removeAbsenceDocumentPath": {
            "type": "boolean"
          }
        }
      },
      "AttendanceRecordPatchWithId": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "patch": {
            "$ref": "#/components/schemas/AttendanceRecordPatch"
          }
        }
      },
      "AttendanceRecordPost": {
        "type": "object",
        "properties": {
          "ownerRef": {
            "type": "string",
            "format": "uuid"
          },
          "ownerTypeName": {
            "type": "string"
          },
          "studentId": {
            "type": "string",
            "format": "uuid"
          },
          "statusId": {
            "type": "string",
            "format": "uuid"
          },
          "absenceDocumentPath": {
            "type": "string",
            "nullable": true
          },
          "absenceDocumentId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        }
      },
      "ChildInfoGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "childDob": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "childEntitledFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "childEntitledTo": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "childName": {
            "type": "string",
            "nullable": true
          },
          "childAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        }
      },
      "CompletedTrainingGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "trainingCourseId": {
            "type": "string",
            "format": "uuid"
          },
          "trainingCourse": {
            "$ref": "#/components/schemas/TrainingCourseRef"
          },
          "completionDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CourseColorEnumDto": {
        "type": "object",
        "properties": {
          "propertyName": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "enumValue": {
            "$ref": "#/components/schemas/ECourseColor"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "CourseGet": {
        "type": "object",
        "properties": {
          "courseType": {
            "$ref": "#/components/schemas/EnumDtoOfECourseType"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfECourseStatus"
          },
          "subject": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfETeachingLevel"
          },
          "color": {
            "$ref": "#/components/schemas/CourseColorEnumDto"
          },
          "isForChildren": {
            "type": "boolean"
          },
          "minStudents": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "maxStudents": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "capacity": {
            "$ref": "#/components/schemas/EnumDtoOfECourseCapacity"
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "studentCount": {
            "type": "integer",
            "format": "int32"
          },
          "studentIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "students": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StudentRef2"
            },
            "nullable": true
          },
          "mainTeacherId": {
            "type": "string",
            "format": "uuid"
          },
          "teacherIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "teachers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeacherRef2"
            },
            "nullable": true
          },
          "isMainTeacher": {
            "type": "boolean"
          },
          "startDate": {
            "type": "string",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "format": "date"
          },
          "weeklySchedule": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeeklyScheduleSlotDto"
            }
          },
          "roomId": {
            "type": "string",
            "format": "uuid"
          },
          "room": {
            "$ref": "#/components/schemas/RoomRef"
          },
          "requiredMaterialIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "requiredMaterials": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialRef"
            },
            "nullable": true
          },
          "lessons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LessonRef"
            },
            "nullable": true
          },
          "lessonCount": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "CourseMaterialAddPost": {
        "type": "object",
        "properties": {
          "materialIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "CourseMaterialAddResult": {
        "required": [
          "added"
        ],
        "type": "object",
        "properties": {
          "added": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "CourseRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "courseType": {
            "$ref": "#/components/schemas/EnumDtoOfECourseType"
          },
          "name": {
            "type": "string"
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "subject": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfETeachingLevel"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfECourseStatus"
          },
          "teacher": {
            "$ref": "#/components/schemas/TeacherRef"
          },
          "price": {
            "type": "number",
            "format": "double"
          },
          "roomId": {
            "type": "string",
            "format": "uuid"
          },
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "weeklySchedule": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeeklyScheduleSlotDto"
            }
          }
        },
        "nullable": true
      },
      "CourseRef2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "courseType": {
            "$ref": "#/components/schemas/EnumDtoOfECourseType"
          },
          "name": {
            "type": "string"
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "subject": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfETeachingLevel"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfECourseStatus"
          },
          "teacher": {
            "$ref": "#/components/schemas/TeacherRef"
          },
          "price": {
            "type": "number",
            "format": "double"
          },
          "roomId": {
            "type": "string",
            "format": "uuid"
          },
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "weeklySchedule": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeeklyScheduleSlotDto"
            }
          }
        }
      },
      "CustomerRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "displayName": {
            "type": "string"
          },
          "customerType": {
            "$ref": "#/components/schemas/EnumDtoOfECustomerType"
          },
          "isActive": {
            "type": "boolean"
          },
          "address": {
            "$ref": "#/components/schemas/AddressInfoDto"
          }
        },
        "nullable": true
      },
      "DayOfWeek": {
        "type": "integer"
      },
      "EAccountStatus": {
        "type": "integer"
      },
      "EAttendanceStatus": {
        "type": "integer"
      },
      "ECivilStatus": {
        "type": "integer"
      },
      "ECountryCode": {
        "type": "integer"
      },
      "ECourseCapacity": {
        "type": "integer"
      },
      "ECourseColor": {
        "type": "integer"
      },
      "ECourseStatus": {
        "type": "integer"
      },
      "ECourseType": {
        "type": "integer"
      },
      "ECustomerType": {
        "type": "integer"
      },
      "EGender": {
        "type": "integer"
      },
      "EInterestStatus": {
        "type": "integer"
      },
      "EInterestType": {
        "type": "integer"
      },
      "EInviteStatus": {
        "type": "integer"
      },
      "ELanguage": {
        "type": "integer"
      },
      "ELessonStatus": {
        "type": "integer"
      },
      "EMaterialLevel": {
        "type": "integer"
      },
      "EMaterialType": {
        "type": "integer"
      },
      "EnumDtoOfEAccountStatus": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EAccountStatus"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfEAttendanceStatus": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EAttendanceStatus"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfECivilStatus": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ECivilStatus"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfECountryCode": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ECountryCode"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfECourseCapacity": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ECourseCapacity"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfECourseStatus": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ECourseStatus"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfECourseType": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ECourseType"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfECustomerType": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ECustomerType"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfEGender": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EGender"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfEInterestStatus": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EInterestStatus"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfEInterestType": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EInterestType"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfEInviteStatus": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EInviteStatus"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfELanguage": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ELanguage"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfELessonStatus": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ELessonStatus"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfEMaterialLevel": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EMaterialLevel"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfEMaterialType": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EMaterialType"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfEPreferredLocation": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/EPreferredLocation"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "EnumDtoOfERoomStatus": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ERoomStatus"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfESwissCanton": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ESwissCanton"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "EnumDtoOfETeachingLevel": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ETeachingLevel"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EnumDtoOfETest": {
        "type": "object",
        "properties": {
          "enumValue": {
            "$ref": "#/components/schemas/ETest"
          },
          "displayName": {
            "type": "string"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "EPreferredLocation": {
        "type": "integer"
      },
      "ERoomStatus": {
        "type": "integer"
      },
      "ESwissCanton": {
        "type": "integer"
      },
      "ETeachingLevel": {
        "type": "integer"
      },
      "ETest": {
        "type": "integer"
      },
      "ExamRecordGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "description": {
            "type": "string"
          },
          "examDate": {
            "type": "string",
            "format": "date-time"
          },
          "result": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "ExamRecordPatch": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "examDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "result": {
            "type": "string",
            "nullable": true
          },
          "removeResult": {
            "type": "boolean"
          }
        }
      },
      "ExamRecordPatchWithId": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "patch": {
            "$ref": "#/components/schemas/ExamRecordPatch"
          }
        }
      },
      "ExamRecordPost": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string"
          },
          "examDate": {
            "type": "string",
            "format": "date-time"
          },
          "result": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "HomeworkGet": {
        "type": "object",
        "properties": {
          "lessonId": {
            "type": "string",
            "format": "uuid"
          },
          "description": {
            "type": "string"
          },
          "dueDate": {
            "type": "string",
            "format": "date"
          },
          "lessonStartDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "course": {
            "$ref": "#/components/schemas/CourseRef"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "HomeworkPatch": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "dueDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          }
        }
      },
      "HomeworkPost": {
        "type": "object",
        "properties": {
          "lessonId": {
            "type": "string",
            "format": "uuid"
          },
          "description": {
            "type": "string"
          },
          "dueDate": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "HomeworkRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "description": {
            "type": "string"
          },
          "dueDate": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "HttpValidationProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      },
      "IFormFile": {
        "type": "string",
        "format": "binary"
      },
      "InterestGet": {
        "type": "object",
        "properties": {
          "studentId": {
            "type": "string",
            "format": "uuid"
          },
          "studentRef": {
            "$ref": "#/components/schemas/StudentRef"
          },
          "requestingCustomerId": {
            "type": "string",
            "format": "uuid"
          },
          "requestingCustomer": {
            "$ref": "#/components/schemas/CustomerRef"
          },
          "requestedStudentIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "requestedStudents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StudentRef2"
            },
            "nullable": true
          },
          "language": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfETeachingLevel"
          },
          "interestType": {
            "$ref": "#/components/schemas/EnumDtoOfEInterestType"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfEInterestStatus"
          },
          "declinedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "declineReason": {
            "type": "string",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "lessonsPerWeek": {
            "type": "integer",
            "format": "int32"
          },
          "lessonDurationMinutes": {
            "type": "integer",
            "format": "int32"
          },
          "numberOfLessons": {
            "type": "integer",
            "format": "int32"
          },
          "preferredLocation": {
            "$ref": "#/components/schemas/EnumDtoOfEPreferredLocation"
          },
          "preferredAddress": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "estimatedPrice": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "timeSlots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimeSlotDto"
            }
          },
          "teacherApplications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeacherApplicationGet"
            }
          },
          "teacherApplicationCount": {
            "type": "integer",
            "format": "int32"
          },
          "hasTeacherApplications": {
            "type": "boolean"
          },
          "studentName": {
            "type": "string",
            "nullable": true
          },
          "studentAge": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "InterestPatch": {
        "type": "object",
        "properties": {
          "requestingCustomerId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "requestedStudentIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          },
          "languageId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "levelId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "interestTypeId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "statusId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "declineReason": {
            "type": "string",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lessonsPerWeek": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "lessonDurationMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "numberOfLessons": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "preferredLocationId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "preferredAddress": {
            "type": "string",
            "nullable": true
          },
          "removePreferredAddress": {
            "type": "boolean"
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "removeNotes": {
            "type": "boolean"
          },
          "timeSlotsToAdd": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimeSlotDto"
            },
            "nullable": true
          },
          "timeSlotsToUpdate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimeSlotPatchWithId"
            },
            "nullable": true
          },
          "timeSlotIdsToRemove": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          },
          "teacherApplicationsToAdd": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeacherApplicationPost"
            },
            "nullable": true
          },
          "teacherApplicationIdsToRemove": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          }
        }
      },
      "LessonGet": {
        "type": "object",
        "properties": {
          "courseId": {
            "type": "string",
            "format": "uuid"
          },
          "course": {
            "$ref": "#/components/schemas/CourseRef"
          },
          "startDate": {
            "type": "string",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "format": "date"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "roomId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "room": {
            "$ref": "#/components/schemas/RoomRef"
          },
          "hasOwnRoom": {
            "type": "boolean"
          },
          "durationMinutes": {
            "type": "integer",
            "format": "int32"
          },
          "courseDisplay": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfELessonStatus"
          },
          "teachingSalary": {
            "type": "number",
            "format": "double"
          },
          "travelAllowance": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "isCancelled": {
            "type": "boolean"
          },
          "homeworks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HomeworkGet"
            },
            "nullable": true
          },
          "nextLessonStartDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "grammar": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "teacherId": {
            "type": "string",
            "format": "uuid"
          },
          "teacher": {
            "$ref": "#/components/schemas/TeacherRef"
          },
          "attendanceRecords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AttendanceRecordGet"
            },
            "nullable": true
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "LessonPatch": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string",
            "nullable": true
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string",
            "nullable": true
          },
          "roomId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "removeRoom": {
            "type": "boolean"
          },
          "teacherId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "grammar": {
            "type": "string",
            "nullable": true
          },
          "removeGrammar": {
            "type": "boolean"
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "removeNotes": {
            "type": "boolean"
          },
          "travelAllowance": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "removeTravelAllowance": {
            "type": "boolean"
          },
          "attendanceRecordsToAdd": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AttendanceRecordPost"
            },
            "nullable": true
          },
          "attendanceRecordsToUpdate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AttendanceRecordPatchWithId"
            },
            "nullable": true
          },
          "attendanceRecordIdsToRemove": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          }
        }
      },
      "LessonPost": {
        "type": "object",
        "properties": {
          "courseId": {
            "type": "string",
            "format": "uuid"
          },
          "startDate": {
            "type": "string",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "format": "date"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          }
        }
      },
      "LessonRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "displayName": {
            "type": "string"
          },
          "startDate": {
            "type": "string",
            "format": "date"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "isCancelled": {
            "type": "boolean"
          },
          "isInvoiced": {
            "type": "boolean"
          },
          "travelAllowance": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "courseDisplay": {
            "type": "string"
          },
          "lessonPrice": {
            "type": "number",
            "format": "double"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfELessonStatus"
          },
          "course": {
            "$ref": "#/components/schemas/CourseRef"
          },
          "teacher": {
            "$ref": "#/components/schemas/TeacherRef"
          },
          "homeworks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HomeworkRef"
            },
            "nullable": true
          }
        }
      },
      "LocationAddressGet": {
        "type": "object",
        "properties": {
          "street": {
            "type": "string"
          },
          "houseNumber": {
            "type": "string",
            "nullable": true
          },
          "postalCode": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "canton": {
            "$ref": "#/components/schemas/EnumDtoOfESwissCanton"
          }
        }
      },
      "LocationGet": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "address": {
            "$ref": "#/components/schemas/LocationAddressGet"
          },
          "addressDisplay": {
            "type": "string",
            "nullable": true
          },
          "arrivalDescription": {
            "type": "string",
            "nullable": true
          },
          "parkingDescription": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "MaterialGet": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "isbn": {
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfEMaterialLevel"
          },
          "price": {
            "type": "number",
            "format": "double"
          },
          "type": {
            "$ref": "#/components/schemas/EnumDtoOfEMaterialType"
          },
          "citizenship": {
            "type": "boolean"
          },
          "storageAmount": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "MaterialRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string"
          },
          "isbn": {
            "type": "string"
          },
          "language": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfEMaterialLevel"
          },
          "price": {
            "type": "number",
            "format": "double"
          },
          "type": {
            "$ref": "#/components/schemas/EnumDtoOfEMaterialType"
          }
        }
      },
      "MiniListDataOfAbsenceNotificationItem": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AbsenceNotificationItem"
            }
          },
          "viewAllUrl": {
            "type": "string",
            "nullable": true
          },
          "maxItems": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MiniListDataOfTodayLessonItem": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TodayLessonItem2"
            }
          },
          "viewAllUrl": {
            "type": "string",
            "nullable": true
          },
          "maxItems": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MyProfilePatch": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "nullable": true
          },
          "postalCode": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "type": "string",
            "nullable": true
          },
          "countryCodeId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "removeCountryCodeId": {
            "type": "boolean"
          },
          "iban": {
            "type": "string",
            "nullable": true
          },
          "accountHolder": {
            "type": "string",
            "nullable": true
          },
          "removeAccountHolder": {
            "type": "boolean"
          },
          "spokenLanguagesToAdd": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SpokenLanguagePost"
            },
            "nullable": true
          },
          "spokenLanguagesToUpdate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SpokenLanguagePatchWithId"
            },
            "nullable": true
          },
          "spokenLanguageIdsToRemove": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          },
          "weeklyTimeSlotsToAdd": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeeklyTimeSlotPost"
            },
            "nullable": true
          },
          "weeklyTimeSlotsToUpdate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeeklyTimeSlotPatchWithId"
            },
            "nullable": true
          },
          "weeklyTimeSlotIdsToRemove": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          },
          "absencePeriodsToAdd": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AbsencePeriodPost"
            },
            "nullable": true
          },
          "absencePeriodsToUpdate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AbsencePeriodPatchWithId"
            },
            "nullable": true
          },
          "absencePeriodIdsToRemove": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          }
        }
      },
      "NullableOfDayOfWeek": {
        "type": "integer",
        "nullable": true
      },
      "NullableOfEStudentStatus": {
        "type": "integer"
      },
      "PaymentLineItemGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "lessonIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "lessons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LessonRef"
            },
            "nullable": true
          },
          "lessonCount": {
            "type": "integer",
            "format": "int32"
          },
          "rate": {
            "type": "number",
            "format": "double"
          },
          "lineTotal": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "RoomGet": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "sizeInSquareMeters": {
            "type": "number",
            "format": "double"
          },
          "maxStudents": {
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfERoomStatus"
          },
          "locationId": {
            "type": "string",
            "format": "uuid"
          },
          "location": {
            "$ref": "#/components/schemas/LocationGet"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "RoomRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "displayName": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "maxStudents": {
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfERoomStatus"
          }
        },
        "nullable": true
      },
      "SpokenLanguageGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "language": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfETeachingLevel"
          }
        }
      },
      "SpokenLanguagePatch": {
        "type": "object",
        "properties": {
          "languageId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "levelId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        }
      },
      "SpokenLanguagePatchWithId": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "patch": {
            "$ref": "#/components/schemas/SpokenLanguagePatch"
          }
        }
      },
      "SpokenLanguagePost": {
        "type": "object",
        "properties": {
          "languageId": {
            "type": "string",
            "format": "uuid"
          },
          "levelId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "StatCardData": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "icon": {
            "type": "string",
            "nullable": true
          },
          "trendPercent": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "color": {
            "type": "string",
            "nullable": true
          },
          "link": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "StudentRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "nativeLanguage": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "isChild": {
            "type": "boolean",
            "nullable": true
          },
          "age": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "nullable": true
      },
      "StudentRef2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "nativeLanguage": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "isChild": {
            "type": "boolean",
            "nullable": true
          },
          "age": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "SubjectGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "language": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfETeachingLevel"
          }
        }
      },
      "TeacherApplicationGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "teacherId": {
            "type": "string",
            "format": "uuid"
          },
          "teacherRef": {
            "$ref": "#/components/schemas/TeacherRef"
          },
          "proposedTimeSlots": {
            "type": "array",
            "items": { }
          },
          "appliedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TeacherApplicationPost": {
        "type": "object",
        "properties": {
          "teacherId": {
            "type": "string",
            "format": "uuid"
          },
          "proposedTimeSlots": {
            "type": "array",
            "items": { }
          }
        }
      },
      "TeacherDashboardGet": {
        "type": "object",
        "properties": {
          "lessonsToday": {
            "$ref": "#/components/schemas/StatCardData"
          },
          "availableApplications": {
            "$ref": "#/components/schemas/StatCardData"
          },
          "absencesToday": {
            "$ref": "#/components/schemas/StatCardData"
          },
          "lessonsThisMonth": {
            "$ref": "#/components/schemas/StatCardData"
          },
          "nextLesson": {
            "$ref": "#/components/schemas/TodayLessonItem"
          },
          "todayLessons": {
            "$ref": "#/components/schemas/MiniListDataOfTodayLessonItem"
          },
          "absenceNotifications": {
            "$ref": "#/components/schemas/MiniListDataOfAbsenceNotificationItem"
          }
        }
      },
      "TeacherGet": {
        "type": "object",
        "properties": {
          "gender": {
            "$ref": "#/components/schemas/EnumDtoOfEGender"
          },
          "birthDate": {
            "type": "string",
            "format": "date-time"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "accountStatus": {
            "$ref": "#/components/schemas/EnumDtoOfEAccountStatus"
          },
          "loginNumber": {
            "type": "string",
            "nullable": true
          },
          "privateEmail": {
            "type": "string",
            "nullable": true
          },
          "mobilePhone": {
            "type": "string"
          },
          "landlinePhone": {
            "type": "string",
            "nullable": true
          },
          "address": {
            "type": "string"
          },
          "postalCode": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "countryCode": {
            "$ref": "#/components/schemas/EnumDtoOfECountryCode"
          },
          "joinDate": {
            "type": "string",
            "format": "date-time"
          },
          "leftSoftLandingDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "inactive": {
            "type": "boolean"
          },
          "nationality": {
            "type": "string",
            "nullable": true
          },
          "civilStatus": {
            "$ref": "#/components/schemas/EnumDtoOfECivilStatus"
          },
          "ahvNumber": {
            "type": "string"
          },
          "quellensteuer": {
            "type": "boolean"
          },
          "quellensteuerFreibetrag": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "ahv": {
            "type": "boolean"
          },
          "alv": {
            "type": "boolean"
          },
          "nbu": {
            "type": "boolean"
          },
          "ktg": {
            "type": "boolean"
          },
          "bvg": {
            "type": "boolean"
          },
          "bvgDeductionAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "flatSalary": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "iban": {
            "type": "string"
          },
          "accountHolder": {
            "type": "string",
            "nullable": true
          },
          "lessonsToChildren": {
            "type": "boolean"
          },
          "challengingStudents": {
            "type": "boolean"
          },
          "einbuergerungsprogramm": {
            "type": "boolean"
          },
          "testPreparation": {
            "type": "boolean"
          },
          "teachingLanguages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeachingLanguageGet"
            }
          },
          "teachingLanguagesDisplay": {
            "type": "string",
            "nullable": true
          },
          "spokenLanguages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SpokenLanguageGet"
            }
          },
          "spokenLanguagesDisplay": {
            "type": "string",
            "nullable": true
          },
          "hasChildren": {
            "type": "boolean"
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChildInfoGet"
            }
          },
          "weeklyTimeSlots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeeklyTimeSlotGet"
            }
          },
          "absencePeriods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AbsencePeriodGet"
            }
          },
          "completedTrainings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompletedTrainingGet"
            }
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "TeacherInviteGet": {
        "type": "object",
        "properties": {
          "courseId": {
            "type": "string",
            "format": "uuid"
          },
          "course": {
            "$ref": "#/components/schemas/CourseRef"
          },
          "teacherId": {
            "type": "string",
            "format": "uuid"
          },
          "teacher": {
            "$ref": "#/components/schemas/TeacherRef"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfEInviteStatus"
          },
          "invitedAt": {
            "type": "string",
            "format": "date-time"
          },
          "respondedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "isPending": {
            "type": "boolean"
          },
          "courseInfo": {
            "type": "string",
            "nullable": true
          },
          "scheduleInfo": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "TeacherInvitePatch": {
        "type": "object",
        "properties": {
          "statusId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "respondedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "TeacherNoteGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "teacherId": {
            "type": "string",
            "format": "uuid"
          },
          "teacherName": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "text": {
            "type": "string"
          }
        }
      },
      "TeacherNotePost": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          }
        }
      },
      "TeacherPaymentGet": {
        "type": "object",
        "properties": {
          "teacherId": {
            "type": "string",
            "format": "uuid"
          },
          "teacher": {
            "$ref": "#/components/schemas/TeacherRef"
          },
          "teacherDisplayName": {
            "type": "string",
            "nullable": true
          },
          "paymentMonth": {
            "type": "string",
            "format": "date-time"
          },
          "totalLessons": {
            "type": "integer",
            "format": "int32"
          },
          "lineItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentLineItemGet"
            }
          },
          "basePay": {
            "type": "number",
            "format": "double"
          },
          "vacationSupplementRate": {
            "type": "number",
            "format": "double"
          },
          "vacationSupplementAmount": {
            "type": "number",
            "format": "double"
          },
          "grossPay": {
            "type": "number",
            "format": "double"
          },
          "ahvRate": {
            "type": "number",
            "format": "double"
          },
          "ahvAmount": {
            "type": "number",
            "format": "double"
          },
          "alvRate": {
            "type": "number",
            "format": "double"
          },
          "alvAmount": {
            "type": "number",
            "format": "double"
          },
          "ktgRate": {
            "type": "number",
            "format": "double"
          },
          "ktgAmount": {
            "type": "number",
            "format": "double"
          },
          "nbuRate": {
            "type": "number",
            "format": "double"
          },
          "nbuAmount": {
            "type": "number",
            "format": "double"
          },
          "netPay": {
            "type": "number",
            "format": "double"
          },
          "travelExpenses": {
            "type": "number",
            "format": "double"
          },
          "actualPay": {
            "type": "number",
            "format": "double"
          },
          "childEntitlement": {
            "type": "number",
            "format": "double"
          },
          "childEntitlementFromConfig": {
            "type": "number",
            "format": "double"
          },
          "childEntitlementComment": {
            "type": "string",
            "nullable": true
          },
          "isChildEntitlementOverridden": {
            "type": "boolean"
          },
          "hasAdditionalTravelCostWarning": {
            "type": "boolean"
          },
          "hasPensionWarning": {
            "type": "boolean"
          },
          "hasQuellensteuerWarning": {
            "type": "boolean"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "TeacherRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "displayName": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "mobilePhone": {
            "type": "string"
          },
          "lessonsToChildren": {
            "type": "boolean"
          },
          "inactive": {
            "type": "boolean"
          },
          "teachingLanguages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EnumDtoOfELanguage"
            }
          }
        },
        "nullable": true
      },
      "TeacherRef2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "displayName": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "mobilePhone": {
            "type": "string"
          },
          "lessonsToChildren": {
            "type": "boolean"
          },
          "inactive": {
            "type": "boolean"
          },
          "teachingLanguages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EnumDtoOfELanguage"
            }
          }
        }
      },
      "TeacherStudentGet": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "age": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "isChild": {
            "type": "boolean",
            "nullable": true
          },
          "nativeLanguage": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "nullable": true
          },
          "subjects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubjectGet"
            }
          },
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "customerDisplayName": {
            "type": "string"
          },
          "customerType": {
            "$ref": "#/components/schemas/EnumDtoOfECustomerType"
          },
          "customerEmail": {
            "type": "string",
            "nullable": true
          },
          "customerPhone": {
            "type": "string",
            "nullable": true
          },
          "customerStreet": {
            "type": "string",
            "nullable": true
          },
          "customerPostalCode": {
            "type": "string",
            "nullable": true
          },
          "customerCity": {
            "type": "string",
            "nullable": true
          },
          "customerCountry": {
            "type": "string",
            "nullable": true
          },
          "courses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CourseRef2"
            },
            "nullable": true
          },
          "lessons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LessonRef"
            },
            "nullable": true
          },
          "materials": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialRef"
            },
            "nullable": true
          },
          "teacherNotes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeacherNoteGet"
            },
            "nullable": true
          },
          "examRecords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExamRecordGet"
            },
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "subjectsDisplay": {
            "type": "string",
            "nullable": true
          },
          "contactDisplay": {
            "type": "string",
            "nullable": true
          },
          "customerAddressDisplay": {
            "type": "string",
            "nullable": true
          },
          "courseCount": {
            "type": "integer",
            "format": "int32"
          },
          "lessonCount": {
            "type": "integer",
            "format": "int32"
          },
          "materialCount": {
            "type": "integer",
            "format": "int32"
          },
          "noteCount": {
            "type": "integer",
            "format": "int32"
          },
          "examRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "currentLevelsDisplay": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "removed": {
            "type": "boolean"
          }
        }
      },
      "TeacherStudentPatch": {
        "type": "object",
        "properties": {
          "teacherNotesToAdd": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeacherNotePost"
            },
            "nullable": true
          },
          "teacherNoteIdsToRemove": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          },
          "examRecordsToAdd": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExamRecordPost"
            },
            "nullable": true
          },
          "examRecordsToUpdate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExamRecordPatchWithId"
            },
            "nullable": true
          },
          "examRecordIdsToRemove": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          }
        }
      },
      "TeachingLanguageGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "language": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfETeachingLevel"
          },
          "testPreparations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EnumDtoOfETest"
            }
          },
          "testExaminers": {
            "type": "array",
            "items": { }
          }
        }
      },
      "TimeSlotDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "day": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          }
        }
      },
      "TimeSlotPatch": {
        "type": "object",
        "properties": {
          "day": {
            "$ref": "#/components/schemas/NullableOfDayOfWeek"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string",
            "nullable": true
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string",
            "nullable": true
          }
        }
      },
      "TimeSlotPatchWithId": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "patch": {
            "$ref": "#/components/schemas/TimeSlotPatch"
          }
        }
      },
      "TodayLessonItem": {
        "type": "object",
        "properties": {
          "lessonId": {
            "type": "string",
            "format": "uuid"
          },
          "courseName": {
            "type": "string"
          },
          "courseType": {
            "$ref": "#/components/schemas/EnumDtoOfECourseType"
          },
          "subject": {
            "$ref": "#/components/schemas/EnumDtoOfELanguage"
          },
          "level": {
            "$ref": "#/components/schemas/EnumDtoOfETeachingLevel"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "roomName": {
            "type": "string"
          },
          "studentCount": {
            "type": "integer",
            "format": "int32"
          },
          "absenceCount": {
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "$ref": "#/components/schemas/EnumDtoOfELessonStatus"
          },
          "isCancelled": {
            "type": "boolean"
          },
          "isAttendanceComplete": {
            "type": "boolean"
          }
        },
        "nullable": true
      },
      "TodayLessonItem2": {
        "type": "object",
        "properties": {
          "lessonId": {
            "type": "string",
            "format": "uuid"
          },
          "courseName": {
            "type": "string"
          },
          "courseType": { },
          "subject": { },
          "level": { },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "roomName": {
            "type": "string"
          },
          "studentCount": {
            "type": "integer",
            "format": "int32"
          },
          "absenceCount": {
            "type": "integer",
            "format": "int32"
          },
          "status": { },
          "isCancelled": {
            "type": "boolean"
          },
          "isAttendanceComplete": {
            "type": "boolean"
          }
        }
      },
      "TrainingCourseRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "points": {
            "type": "integer",
            "format": "int32"
          }
        },
        "nullable": true
      },
      "UploadedDocument": {
        "required": [
          "id",
          "fileName",
          "sizeBytes"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "fileName": {
            "type": "string"
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "WeeklyScheduleSlotDto": {
        "type": "object",
        "properties": {
          "day": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          }
        }
      },
      "WeeklyTimeSlotGet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "dayOfWeek": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          }
        }
      },
      "WeeklyTimeSlotPatch": {
        "type": "object",
        "properties": {
          "dayOfWeek": {
            "$ref": "#/components/schemas/NullableOfDayOfWeek"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string",
            "nullable": true
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string",
            "nullable": true
          }
        }
      },
      "WeeklyTimeSlotPatchWithId": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "patch": {
            "$ref": "#/components/schemas/WeeklyTimeSlotPatch"
          }
        }
      },
      "WeeklyTimeSlotPost": {
        "type": "object",
        "properties": {
          "dayOfWeek": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "startTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "endTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          }
        }
      }
    },
    "securitySchemes": {
      "keycloak": {
        "type": "oauth2",
        "description": "Log in via Keycloak (Authorization Code + PKCE). Uses the public 'swagger-ui' client.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://auth.triskela.com/realms/softlanding/protocol/openid-connect/auth",
            "tokenUrl": "https://auth.triskela.com/realms/softlanding/protocol/openid-connect/token",
            "scopes": {
              "openid": "OpenID Connect",
              "profile": "User profile",
              "email": "User email"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "keycloak": [
        "openid",
        "profile",
        "email"
      ]
    }
  ],
  "tags": [
    {
      "name": "AttendanceDocument (Teacher)"
    },
    {
      "name": "Lesson (Teacher)"
    },
    {
      "name": "Course (Teacher)"
    },
    {
      "name": "Teacher MyProfile"
    },
    {
      "name": "TeacherPayment (Teacher)"
    },
    {
      "name": "TeacherInvite (Teacher)"
    },
    {
      "name": "TeacherStudent (Teacher)"
    },
    {
      "name": "MatchingInterest (Teacher)"
    },
    {
      "name": "Room (Teacher)"
    },
    {
      "name": "Material (Teacher)"
    },
    {
      "name": "Homework (Teacher)"
    },
    {
      "name": "Dashboard (Teacher)"
    }
  ]
}