{
    "openapi": "3.0.0",
    "info": {
        "title": "Huruf API",
        "description": "REST API pour l'apprentissage de l'alphabet arabe. Fournit les lettres, voyelles, syllabes, audio et gestion de projet.\n",
        "version": "1.0.0"
    },
    "paths": {
        "/tracker/sprints/velocity": {
            "get": {
                "operationId": "get_app_tracker_presentation_sprint_velocity__invoke",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 10
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/alphabet/export": {
            "get": {
                "operationId": "get_app_alphabet_presentation_alphabetexport__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/alphabet/import": {
            "post": {
                "operationId": "post_app_alphabet_presentation_alphabetimport__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/letters": {
            "post": {
                "tags": [
                    "Alphabet - Letters (Admin)"
                ],
                "summary": "Cr\u00e9er une lettre",
                "operationId": "post_app_alphabet_presentation_letter_lettercreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "slug",
                                    "order",
                                    "character",
                                    "name",
                                    "nameAr",
                                    "transliteration",
                                    "pronunciationGuide",
                                    "formIsolated",
                                    "formInitial",
                                    "formMedial",
                                    "formFinal",
                                    "group"
                                ],
                                "properties": {
                                    "slug": {
                                        "type": "string"
                                    },
                                    "order": {
                                        "type": "integer"
                                    },
                                    "character": {
                                        "type": "string"
                                    },
                                    "name": {
                                        "type": "string"
                                    },
                                    "nameAr": {
                                        "type": "string"
                                    },
                                    "transliteration": {
                                        "type": "string"
                                    },
                                    "pronunciationGuide": {
                                        "type": "string"
                                    },
                                    "formIsolated": {
                                        "type": "string"
                                    },
                                    "formInitial": {
                                        "type": "string"
                                    },
                                    "formMedial": {
                                        "type": "string"
                                    },
                                    "formFinal": {
                                        "type": "string"
                                    },
                                    "connectable": {
                                        "type": "boolean"
                                    },
                                    "group": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Lettre cr\u00e9\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Letter"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admin/letters/{slug}": {
            "put": {
                "tags": [
                    "Alphabet - Letters (Admin)"
                ],
                "summary": "Modifier une lettre",
                "operationId": "put_app_alphabet_presentation_letter_letterupdate__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "order": {
                                        "type": "integer",
                                        "nullable": true
                                    },
                                    "character": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "name": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "nameAr": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "transliteration": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "pronunciationGuide": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "formIsolated": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "formInitial": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "formMedial": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "formFinal": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "connectable": {
                                        "type": "boolean",
                                        "nullable": true
                                    },
                                    "group": {
                                        "type": "string",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Lettre modifi\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Letter"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Lettre non trouv\u00e9e"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Alphabet - Letters (Admin)"
                ],
                "summary": "Supprimer une lettre",
                "operationId": "delete_app_alphabet_presentation_letter_letterdelete__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Lettre supprim\u00e9e"
                    },
                    "404": {
                        "description": "Lettre non trouv\u00e9e"
                    },
                    "409": {
                        "description": "Audio associ\u00e9"
                    }
                }
            }
        },
        "/letters": {
            "get": {
                "tags": [
                    "Alphabet - Letters"
                ],
                "summary": "Liste des lettres arabes",
                "operationId": "get_app_alphabet_presentation_letter_letterlist__invoke",
                "responses": {
                    "200": {
                        "description": "Liste des lettres",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Letter"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/letters/{slug}": {
            "get": {
                "tags": [
                    "Alphabet - Letters"
                ],
                "summary": "D\u00e9tail d'une lettre arabe",
                "operationId": "get_app_alphabet_presentation_letter_lettershow__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "description": "Identifiant de la lettre (ex: ba, alif, jim)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "example": "ba"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tail de la lettre",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Letter"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Lettre non trouv\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "Letter not found"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admin/syllables": {
            "post": {
                "tags": [
                    "Alphabet - Syllables (Admin)"
                ],
                "summary": "Cr\u00e9er une syllabe",
                "operationId": "post_app_alphabet_presentation_syllable_syllablecreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "letterSlug",
                                    "vowelSlug"
                                ],
                                "properties": {
                                    "letterSlug": {
                                        "type": "string"
                                    },
                                    "vowelSlug": {
                                        "type": "string"
                                    },
                                    "transliteration": {
                                        "type": "string"
                                    },
                                    "difficulty": {
                                        "type": "integer"
                                    },
                                    "active": {
                                        "type": "boolean"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Syllabe cr\u00e9\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Syllable"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admin/syllables/{slug}": {
            "put": {
                "tags": [
                    "Alphabet - Syllables (Admin)"
                ],
                "summary": "Modifier une syllabe",
                "operationId": "put_app_alphabet_presentation_syllable_syllableupdate__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "transliteration": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "difficulty": {
                                        "type": "integer",
                                        "nullable": true
                                    },
                                    "active": {
                                        "type": "boolean",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Syllabe modifi\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Syllable"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Syllabe non trouv\u00e9e"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Alphabet - Syllables (Admin)"
                ],
                "summary": "Supprimer une syllabe",
                "operationId": "delete_app_alphabet_presentation_syllable_syllabledelete__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Syllabe supprim\u00e9e"
                    },
                    "404": {
                        "description": "Syllabe non trouv\u00e9e"
                    }
                }
            }
        },
        "/admin/syllables/generate": {
            "post": {
                "tags": [
                    "Alphabet - Syllables (Admin)"
                ],
                "summary": "G\u00e9n\u00e9rer toutes les syllabes manquantes",
                "operationId": "post_app_alphabet_presentation_syllable_syllablegenerate__invoke",
                "responses": {
                    "200": {
                        "description": "Syllabes g\u00e9n\u00e9r\u00e9es",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "created": {
                                            "type": "integer",
                                            "example": 385
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/syllables": {
            "get": {
                "tags": [
                    "Alphabet - Syllables"
                ],
                "summary": "Liste des syllabes",
                "operationId": "get_app_alphabet_presentation_syllable_syllablelist__invoke",
                "responses": {
                    "200": {
                        "description": "Liste des syllabes",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Syllable"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/syllables/{slug}": {
            "get": {
                "tags": [
                    "Alphabet - Syllables"
                ],
                "summary": "D\u00e9tail d'une syllabe",
                "operationId": "get_app_alphabet_presentation_syllable_syllableshow__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "description": "Identifiant de la syllabe (ex: ba-fatha)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "example": "ba-fatha"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tail de la syllabe",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Syllable"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Syllabe non trouv\u00e9e"
                    }
                }
            }
        },
        "/admin/vowels": {
            "post": {
                "tags": [
                    "Alphabet - Vowels (Admin)"
                ],
                "summary": "Cr\u00e9er une voyelle",
                "operationId": "post_app_alphabet_presentation_vowel_vowelcreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "slug",
                                    "order",
                                    "name",
                                    "nameAr",
                                    "symbol",
                                    "transliteration",
                                    "description",
                                    "position",
                                    "category"
                                ],
                                "properties": {
                                    "slug": {
                                        "type": "string"
                                    },
                                    "order": {
                                        "type": "integer"
                                    },
                                    "name": {
                                        "type": "string"
                                    },
                                    "nameAr": {
                                        "type": "string"
                                    },
                                    "symbol": {
                                        "type": "string"
                                    },
                                    "transliteration": {
                                        "type": "string"
                                    },
                                    "description": {
                                        "type": "string"
                                    },
                                    "position": {
                                        "type": "string",
                                        "enum": [
                                            "above",
                                            "below"
                                        ]
                                    },
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "short_vowel",
                                            "sukun",
                                            "shadda",
                                            "tanwin"
                                        ]
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Voyelle cr\u00e9\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Vowel"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admin/vowels/{slug}": {
            "put": {
                "tags": [
                    "Alphabet - Vowels (Admin)"
                ],
                "summary": "Modifier une voyelle",
                "operationId": "put_app_alphabet_presentation_vowel_vowelupdate__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "order": {
                                        "type": "integer",
                                        "nullable": true
                                    },
                                    "name": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "nameAr": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "symbol": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "transliteration": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "description": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "position": {
                                        "type": "string",
                                        "enum": [
                                            "above",
                                            "below"
                                        ],
                                        "nullable": true
                                    },
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "short_vowel",
                                            "sukun",
                                            "shadda",
                                            "tanwin"
                                        ],
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Voyelle modifi\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Vowel"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Voyelle non trouv\u00e9e"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Alphabet - Vowels (Admin)"
                ],
                "summary": "Supprimer une voyelle",
                "operationId": "delete_app_alphabet_presentation_vowel_voweldelete__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Voyelle supprim\u00e9e"
                    },
                    "404": {
                        "description": "Voyelle non trouv\u00e9e"
                    },
                    "409": {
                        "description": "Audio associ\u00e9"
                    }
                }
            }
        },
        "/vowels": {
            "get": {
                "tags": [
                    "Alphabet - Vowels"
                ],
                "summary": "Liste des voyelles arabes",
                "operationId": "get_app_alphabet_presentation_vowel_vowellist__invoke",
                "responses": {
                    "200": {
                        "description": "Liste des voyelles",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Vowel"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/vowels/{slug}": {
            "get": {
                "tags": [
                    "Alphabet - Vowels"
                ],
                "summary": "D\u00e9tail d'une voyelle arabe",
                "operationId": "get_app_alphabet_presentation_vowel_vowelshow__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "description": "Identifiant de la voyelle (ex: fatha, kasra, damma)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "example": "fatha"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tail de la voyelle",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Vowel"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Voyelle non trouv\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "Vowel not found"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/student/assignments": {
            "get": {
                "operationId": "get_app_assignment_presentation_student_studentassignmentlist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/assignments/{id}": {
            "get": {
                "operationId": "get_app_assignment_presentation_student_studentassignmentshow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/submissions/{id}/feedback": {
            "get": {
                "operationId": "get_app_assignment_presentation_student_studentfeedback__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/assignments/{id}/start": {
            "post": {
                "operationId": "post_app_assignment_presentation_student_studentstartsubmission__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/submissions/{id}/submit": {
            "post": {
                "operationId": "post_app_assignment_presentation_student_studentsubmit__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SubmitAssignment"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/submissions/{id}/drawings": {
            "post": {
                "operationId": "post_app_assignment_presentation_student_studentuploaddrawing__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UploadDrawing"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/voices/{voiceSlug}/letters/audio/bulk": {
            "post": {
                "tags": [
                    "Audio - Letters (Admin)"
                ],
                "summary": "Upload en masse des audios de lettres",
                "operationId": "post_app_audio_presentation_letteraudio_letteraudiobulk__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "properties": {
                                    "files[]": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "format": "binary"
                                        }
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Audios upload\u00e9s"
                    }
                }
            }
        },
        "/admin/voices/{voiceSlug}/letters/{letterSlug}/audio": {
            "put": {
                "operationId": "put_app_audio_presentation_letteraudio_letteraudioupload__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "letterSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "post": {
                "tags": [
                    "Audio - Letters (Admin)"
                ],
                "summary": "Uploader l'audio d'une lettre",
                "operationId": "post_app_audio_presentation_letteraudio_letteraudioupload__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "letterSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "properties": {
                                    "audio": {
                                        "type": "string",
                                        "format": "binary"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Audio upload\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/LetterAudio"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "Audio - Letters (Admin)"
                ],
                "summary": "Supprimer l'audio d'une lettre",
                "operationId": "delete_app_audio_presentation_letteraudio_letteraudiodelete__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "letterSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Audio supprim\u00e9"
                    },
                    "404": {
                        "description": "Audio non trouv\u00e9"
                    }
                }
            }
        },
        "/voices/{voiceSlug}/availability": {
            "get": {
                "tags": [
                    "Audio - Stream"
                ],
                "summary": "Disponibilit\u00e9 des audios pour une voix",
                "operationId": "get_app_audio_presentation_stream_audioavailability__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Disponibilit\u00e9 des audios",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/AudioAvailability"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Voix non trouv\u00e9e"
                    }
                }
            }
        },
        "/voices/{voiceSlug}/letters/{letterSlug}/audio": {
            "get": {
                "tags": [
                    "Audio - Stream"
                ],
                "summary": "Streamer l'audio d'une lettre",
                "operationId": "get_app_audio_presentation_stream_letteraudiostream__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "letterSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Fichier audio (audio/mpeg)"
                    },
                    "404": {
                        "description": "Audio non trouv\u00e9"
                    }
                }
            }
        },
        "/voices/{voiceSlug}/syllables/{letterSlug}/{vowelSlug}/audio": {
            "get": {
                "tags": [
                    "Audio - Stream"
                ],
                "summary": "Streamer l'audio d'une syllabe",
                "operationId": "get_app_audio_presentation_stream_syllableaudiostream__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "letterSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "vowelSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Fichier audio (audio/mpeg)"
                    },
                    "404": {
                        "description": "Audio non trouv\u00e9"
                    }
                }
            }
        },
        "/admin/voices/{voiceSlug}/syllables/audio/bulk": {
            "post": {
                "tags": [
                    "Audio - Syllables (Admin)"
                ],
                "summary": "Upload en masse des audios de syllabes",
                "operationId": "post_app_audio_presentation_syllableaudio_syllableaudiobulk__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "properties": {
                                    "files[]": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "format": "binary"
                                        }
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Audios upload\u00e9s"
                    }
                }
            }
        },
        "/admin/voices/{voiceSlug}/syllables/{letterSlug}/{vowelSlug}/audio": {
            "put": {
                "operationId": "put_app_audio_presentation_syllableaudio_syllableaudioupload__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "letterSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "vowelSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "post": {
                "tags": [
                    "Audio - Syllables (Admin)"
                ],
                "summary": "Uploader l'audio d'une syllabe",
                "operationId": "post_app_audio_presentation_syllableaudio_syllableaudioupload__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "letterSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "vowelSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "properties": {
                                    "audio": {
                                        "type": "string",
                                        "format": "binary"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Audio upload\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/SyllableAudio"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "Audio - Syllables (Admin)"
                ],
                "summary": "Supprimer l'audio d'une syllabe",
                "operationId": "delete_app_audio_presentation_syllableaudio_syllableaudiodelete__invoke",
                "parameters": [
                    {
                        "name": "voiceSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "letterSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "vowelSlug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Audio supprim\u00e9"
                    },
                    "404": {
                        "description": "Audio non trouv\u00e9"
                    }
                }
            }
        },
        "/admin/voices/{slug}/activate": {
            "patch": {
                "tags": [
                    "Audio - Voices (Admin)"
                ],
                "summary": "Activer une voix",
                "operationId": "patch_app_audio_presentation_voice_voiceactivate__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Voix activ\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Voice"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Voix non trouv\u00e9e"
                    }
                }
            }
        },
        "/admin/voices": {
            "post": {
                "tags": [
                    "Audio - Voices (Admin)"
                ],
                "summary": "Cr\u00e9er une voix",
                "operationId": "post_app_audio_presentation_voice_voicecreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "name",
                                    "gender"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "gender": {
                                        "type": "string"
                                    },
                                    "description": {
                                        "type": "string",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Voix cr\u00e9\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Voice"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admin/voices/{slug}/deactivate": {
            "patch": {
                "tags": [
                    "Audio - Voices (Admin)"
                ],
                "summary": "D\u00e9sactiver une voix",
                "operationId": "patch_app_audio_presentation_voice_voicedeactivate__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Voix d\u00e9sactiv\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Voice"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Voix non trouv\u00e9e"
                    }
                }
            }
        },
        "/admin/voices/{slug}": {
            "put": {
                "tags": [
                    "Audio - Voices (Admin)"
                ],
                "summary": "Modifier une voix",
                "operationId": "put_app_audio_presentation_voice_voiceupdate__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "gender": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "description": {
                                        "type": "string",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Voix modifi\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Voice"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Voix non trouv\u00e9e"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Audio - Voices (Admin)"
                ],
                "summary": "Supprimer une voix",
                "operationId": "delete_app_audio_presentation_voice_voicedelete__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Voix supprim\u00e9e"
                    },
                    "404": {
                        "description": "Voix non trouv\u00e9e"
                    }
                }
            }
        },
        "/voices": {
            "get": {
                "tags": [
                    "Audio - Voices"
                ],
                "summary": "Liste des voix actives",
                "operationId": "get_app_audio_presentation_voice_voicelist__invoke",
                "responses": {
                    "200": {
                        "description": "Liste des voix",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Voice"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/voices/{slug}": {
            "get": {
                "tags": [
                    "Audio - Voices"
                ],
                "summary": "D\u00e9tail d'une voix",
                "operationId": "get_app_audio_presentation_voice_voiceshow__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tail de la voix",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Voice"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Voix non trouv\u00e9e"
                    }
                }
            }
        },
        "/admin/users": {
            "get": {
                "tags": [
                    "Admin - Users"
                ],
                "summary": "Liste des utilisateurs admin",
                "operationId": "get_app_identity_presentation_adminuser_adminuserlist__invoke",
                "responses": {
                    "200": {
                        "description": "Liste des utilisateurs"
                    }
                }
            },
            "post": {
                "tags": [
                    "Admin - Users"
                ],
                "summary": "Cr\u00e9er un utilisateur admin",
                "operationId": "post_app_identity_presentation_adminuser_adminusercreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "email",
                                    "password",
                                    "displayName"
                                ],
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "format": "email"
                                    },
                                    "password": {
                                        "type": "string",
                                        "minLength": 8
                                    },
                                    "displayName": {
                                        "type": "string"
                                    },
                                    "roles": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Utilisateur cr\u00e9\u00e9"
                    },
                    "400": {
                        "description": "Erreur de validation"
                    }
                }
            }
        },
        "/admin/users/{id}": {
            "get": {
                "tags": [
                    "Admin - Users"
                ],
                "summary": "D\u00e9tails d'un utilisateur admin",
                "operationId": "get_app_identity_presentation_adminuser_adminusershow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tails de l'utilisateur"
                    },
                    "404": {
                        "description": "Utilisateur non trouv\u00e9"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Admin - Users"
                ],
                "summary": "Supprimer un utilisateur admin",
                "operationId": "delete_app_identity_presentation_adminuser_adminuserdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Utilisateur supprim\u00e9"
                    },
                    "404": {
                        "description": "Utilisateur non trouv\u00e9"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Admin - Users"
                ],
                "summary": "Modifier un utilisateur admin",
                "operationId": "patch_app_identity_presentation_adminuser_adminuserupdate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "format": "email",
                                        "nullable": true
                                    },
                                    "displayName": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "roles": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Utilisateur modifi\u00e9"
                    },
                    "404": {
                        "description": "Utilisateur non trouv\u00e9"
                    }
                }
            }
        },
        "/admin/users/{id}/reset-password": {
            "post": {
                "tags": [
                    "Admin - Users"
                ],
                "summary": "R\u00e9initialiser le mot de passe d'un utilisateur admin",
                "operationId": "post_app_identity_presentation_adminuser_adminuserresetpassword__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "password"
                                ],
                                "properties": {
                                    "password": {
                                        "type": "string",
                                        "minLength": 8
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Mot de passe r\u00e9initialis\u00e9"
                    },
                    "404": {
                        "description": "Utilisateur non trouv\u00e9"
                    }
                }
            }
        },
        "/auth/login": {
            "post": {
                "tags": [
                    "Identity - Auth"
                ],
                "summary": "Authentification administrateur",
                "operationId": "post_api_auth_login",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "email",
                                    "password"
                                ],
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "format": "email",
                                        "example": "admin@huruf.app"
                                    },
                                    "password": {
                                        "type": "string",
                                        "example": "password"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Authentification r\u00e9ussie",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/TokenResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Identifiants invalides",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "Invalid credentials"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admin/me": {
            "get": {
                "operationId": "get_app_identity_presentation_me__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/digits": {
            "post": {
                "tags": [
                    "Numeral - Digits (Admin)"
                ],
                "summary": "Cr\u00e9er un chiffre",
                "operationId": "post_app_numeral_presentation_digitcreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "slug",
                                    "order",
                                    "symbol",
                                    "value",
                                    "name",
                                    "nameAr",
                                    "transliteration",
                                    "pronunciationGuide"
                                ],
                                "properties": {
                                    "slug": {
                                        "type": "string"
                                    },
                                    "order": {
                                        "type": "integer"
                                    },
                                    "symbol": {
                                        "type": "string"
                                    },
                                    "value": {
                                        "type": "integer"
                                    },
                                    "name": {
                                        "type": "string"
                                    },
                                    "nameAr": {
                                        "type": "string"
                                    },
                                    "transliteration": {
                                        "type": "string"
                                    },
                                    "pronunciationGuide": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Chiffre cr\u00e9\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Digit"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admin/digits/{slug}": {
            "put": {
                "tags": [
                    "Numeral - Digits (Admin)"
                ],
                "summary": "Modifier un chiffre",
                "operationId": "put_app_numeral_presentation_digitupdate__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "order": {
                                        "type": "integer",
                                        "nullable": true
                                    },
                                    "symbol": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "value": {
                                        "type": "integer",
                                        "nullable": true
                                    },
                                    "name": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "nameAr": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "transliteration": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "pronunciationGuide": {
                                        "type": "string",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Chiffre modifi\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Digit"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Chiffre non trouv\u00e9"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Numeral - Digits (Admin)"
                ],
                "summary": "Supprimer un chiffre",
                "operationId": "delete_app_numeral_presentation_digitdelete__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Chiffre supprim\u00e9"
                    },
                    "404": {
                        "description": "Chiffre non trouv\u00e9"
                    }
                }
            }
        },
        "/digits": {
            "get": {
                "tags": [
                    "Numeral - Digits"
                ],
                "summary": "Liste des chiffres arabo-indiques",
                "operationId": "get_app_numeral_presentation_digitlist__invoke",
                "responses": {
                    "200": {
                        "description": "Liste des chiffres",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Digit"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/digits/{slug}": {
            "get": {
                "tags": [
                    "Numeral - Digits"
                ],
                "summary": "D\u00e9tail d'un chiffre arabo-indique",
                "operationId": "get_app_numeral_presentation_digitshow__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "description": "Identifiant du chiffre (ex: wahid, sifr)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "example": "wahid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tail du chiffre",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Digit"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Chiffre non trouv\u00e9"
                    }
                }
            }
        },
        "/admin/analytics/overview": {
            "get": {
                "operationId": "get_app_shared_presentation_analyticsoverview__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/audit-log": {
            "get": {
                "operationId": "get_app_shared_presentation_auditloglist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/audit-log/{id}/rollback": {
            "post": {
                "operationId": "post_app_shared_presentation_rollbackauditlog__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/students": {
            "get": {
                "operationId": "get_app_student_presentation_admin_studentlist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "post": {
                "operationId": "post_app_student_presentation_admin_studentcreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateStudentPayload"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/students/{id}": {
            "get": {
                "operationId": "get_app_student_presentation_admin_studentshow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "delete": {
                "operationId": "delete_app_student_presentation_admin_studentdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "patch": {
                "operationId": "patch_app_student_presentation_admin_studentupdate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateStudentPayload"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/progress": {
            "get": {
                "operationId": "get_app_student_presentation_progressget__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "put": {
                "operationId": "put_app_student_presentation_progresssave__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SaveProgressPayload"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/register": {
            "post": {
                "operationId": "post_app_student_presentation_register__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RegisterStudent"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/classrooms": {
            "get": {
                "operationId": "get_app_student_presentation_studentclassroomlist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/classrooms/join": {
            "post": {
                "operationId": "post_app_student_presentation_studentjoinclassroom__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JoinClassroom"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/login": {
            "post": {
                "operationId": "post_app_student_presentation_studentlogin__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/StudentLoginCommand"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/student/me": {
            "get": {
                "operationId": "get_app_student_presentation_studentprofile__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/teachers": {
            "get": {
                "operationId": "get_app_teaching_presentation_admin_teacherlist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "post": {
                "operationId": "post_app_teaching_presentation_admin_teachercreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateTeacherCommand"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/teachers/{id}": {
            "get": {
                "operationId": "get_app_teaching_presentation_admin_teachershow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "delete": {
                "operationId": "delete_app_teaching_presentation_admin_teacherdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "patch": {
                "operationId": "patch_app_teaching_presentation_admin_teacherupdate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateTeacherPayload"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/assignments/{id}/close": {
            "post": {
                "operationId": "post_app_teaching_presentation_teacherassignmentclose__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/assignments": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherassignmentlist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "post": {
                "operationId": "post_app_teaching_presentation_teacherassignmentcreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateAssignment"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/assignments/{id}": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherassignmentshow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "put": {
                "operationId": "put_app_teaching_presentation_teacherassignmentupdate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateAssignment"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "delete": {
                "operationId": "delete_app_teaching_presentation_teacherassignmentdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/assignments/{id}/publish": {
            "post": {
                "operationId": "post_app_teaching_presentation_teacherassignmentpublish__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/classrooms": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherclassroomlist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "post": {
                "operationId": "post_app_teaching_presentation_teacherclassroomcreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateClassroom"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/classrooms/{id}": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherclassroomshow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "[0-9a-f-]{36}"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "put": {
                "operationId": "put_app_teaching_presentation_teacherclassroomupdate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateClassroom"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "delete": {
                "operationId": "delete_app_teaching_presentation_teacherclassroomdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/classrooms/{id}/report": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherclassroomreport__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/classrooms/{id}/enrollments": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherenrollmentlist__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "post": {
                "operationId": "post_app_teaching_presentation_teacherenrollmentcreate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/EnrollStudent"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/classrooms/{id}/enrollments/{enrollmentId}": {
            "delete": {
                "operationId": "delete_app_teaching_presentation_teacherenrollmentdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "enrollmentId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/login": {
            "post": {
                "operationId": "post_app_teaching_presentation_teacherlogin__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TeacherLoginCommand"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/me": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherprofile__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/students": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherstudentlist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/classrooms/{id}/students/{studentId}/report": {
            "get": {
                "operationId": "get_app_teaching_presentation_teacherstudentreport__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "studentId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/submissions/{id}/feedback": {
            "post": {
                "operationId": "post_app_teaching_presentation_teachersubmissionfeedback__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AddFeedback"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/submissions/{id}/grade": {
            "post": {
                "operationId": "post_app_teaching_presentation_teachersubmissiongrade__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/assignments/{id}/submissions": {
            "get": {
                "operationId": "get_app_teaching_presentation_teachersubmissionlist__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/teacher/submissions/{id}": {
            "get": {
                "operationId": "get_app_teaching_presentation_teachersubmissionshow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/admin/tracker-users": {
            "get": {
                "tags": [
                    "Admin - Tracker Users"
                ],
                "summary": "Liste des reporters du tracker",
                "operationId": "get_app_tracker_presentation_admin_trackeruserlist__invoke",
                "responses": {
                    "200": {
                        "description": "Liste des reporters"
                    }
                }
            },
            "post": {
                "tags": [
                    "Admin - Tracker Users"
                ],
                "summary": "Cr\u00e9er un reporter du tracker",
                "operationId": "post_app_tracker_presentation_admin_trackerusercreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "username",
                                    "displayName"
                                ],
                                "properties": {
                                    "username": {
                                        "type": "string"
                                    },
                                    "displayName": {
                                        "type": "string"
                                    },
                                    "email": {
                                        "type": "string",
                                        "format": "email",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Reporter cr\u00e9\u00e9"
                    },
                    "400": {
                        "description": "Erreur de validation"
                    }
                }
            }
        },
        "/admin/tracker-users/{id}": {
            "get": {
                "tags": [
                    "Admin - Tracker Users"
                ],
                "summary": "D\u00e9tails d'un reporter du tracker",
                "operationId": "get_app_tracker_presentation_admin_trackerusershow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tails du reporter"
                    },
                    "404": {
                        "description": "Reporter non trouv\u00e9"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Admin - Tracker Users"
                ],
                "summary": "Supprimer un reporter du tracker",
                "operationId": "delete_app_tracker_presentation_admin_trackeruserdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Reporter supprim\u00e9"
                    },
                    "404": {
                        "description": "Reporter non trouv\u00e9"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Admin - Tracker Users"
                ],
                "summary": "Modifier un reporter du tracker",
                "operationId": "patch_app_tracker_presentation_admin_trackeruserupdate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "displayName": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "email": {
                                        "type": "string",
                                        "format": "email",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Reporter modifi\u00e9"
                    },
                    "404": {
                        "description": "Reporter non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/api/tickets/{id}/process": {
            "post": {
                "tags": [
                    "Tracker - API"
                ],
                "summary": "Marquer un ticket comme trait\u00e9 (API Claude)",
                "operationId": "post_app_tracker_presentation_api_markticketprocessed__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ticket marqu\u00e9 comme trait\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Ticket"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/api/pending": {
            "get": {
                "tags": [
                    "Tracker - API"
                ],
                "summary": "Tickets en attente (API Claude)",
                "operationId": "get_app_tracker_presentation_api_pendingtickets__invoke",
                "parameters": [
                    {
                        "name": "app",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": null,
                            "nullable": true
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Tickets en attente",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Ticket"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tracker/api/summary": {
            "get": {
                "tags": [
                    "Tracker - API"
                ],
                "summary": "R\u00e9sum\u00e9 du tracker (API Claude)",
                "operationId": "get_app_tracker_presentation_api_trackersummary__invoke",
                "responses": {
                    "200": {
                        "description": "R\u00e9sum\u00e9 du tracker",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/TrackerSummary"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tracker/tickets/{ticketId}/attachments/{attachmentId}": {
            "delete": {
                "tags": [
                    "Tracker - Attachments"
                ],
                "summary": "Supprimer une pi\u00e8ce jointe",
                "operationId": "delete_app_tracker_presentation_attachment_attachmentdelete__invoke",
                "parameters": [
                    {
                        "name": "ticketId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "attachmentId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Pi\u00e8ce jointe supprim\u00e9e"
                    },
                    "404": {
                        "description": "Non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/tickets/{id}/attachments": {
            "post": {
                "tags": [
                    "Tracker - Attachments"
                ],
                "summary": "Ajouter une pi\u00e8ce jointe \u00e0 un ticket",
                "operationId": "post_app_tracker_presentation_attachment_attachmentupload__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary"
                                    },
                                    "commentId": {
                                        "type": "string",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Pi\u00e8ce jointe ajout\u00e9e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Attachment"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/tickets/{id}/comments": {
            "post": {
                "tags": [
                    "Tracker - Comments"
                ],
                "summary": "Ajouter un commentaire \u00e0 un ticket",
                "operationId": "post_app_tracker_presentation_comment_commentcreate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "content"
                                ],
                                "properties": {
                                    "content": {
                                        "type": "string"
                                    },
                                    "authorId": {
                                        "type": "string",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Commentaire ajout\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Comment"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/sprints/{id}/tickets/{ticketId}": {
            "post": {
                "operationId": "post_app_tracker_presentation_sprint_sprintassignticket__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "ticketId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "delete": {
                "operationId": "delete_app_tracker_presentation_sprint_sprintremoveticket__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "ticketId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/tracker/sprints/{id}/burndown": {
            "get": {
                "operationId": "get_app_tracker_presentation_sprint_sprintburndown__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/tracker/sprints": {
            "get": {
                "operationId": "get_app_tracker_presentation_sprint_sprintlist__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "post": {
                "operationId": "post_app_tracker_presentation_sprint_sprintcreate__invoke",
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/tracker/sprints/{id}": {
            "get": {
                "operationId": "get_app_tracker_presentation_sprint_sprintshow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "delete": {
                "operationId": "delete_app_tracker_presentation_sprint_sprintdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            },
            "patch": {
                "operationId": "patch_app_tracker_presentation_sprint_sprintupdate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/tracker/tickets/{id}/archive": {
            "post": {
                "tags": [
                    "Tracker - Tickets"
                ],
                "summary": "Archiver un ticket",
                "operationId": "post_app_tracker_presentation_ticket_ticketarchive__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ticket archiv\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Ticket"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/tickets": {
            "get": {
                "tags": [
                    "Tracker - Tickets"
                ],
                "summary": "Liste des tickets",
                "operationId": "get_app_tracker_presentation_ticket_ticketlist__invoke",
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "type",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "app",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "priority",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "assigneeId",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "reporterId",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "createdAfter",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "format": "date",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "createdBefore",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "format": "date",
                            "default": null,
                            "nullable": true
                        }
                    },
                    {
                        "name": "sprintId",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "format": "uuid",
                            "default": null,
                            "nullable": true
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Liste des tickets",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Ticket"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Tracker - Tickets"
                ],
                "summary": "Cr\u00e9er un ticket",
                "operationId": "post_app_tracker_presentation_ticket_ticketcreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "title",
                                    "type",
                                    "app"
                                ],
                                "properties": {
                                    "title": {
                                        "type": "string"
                                    },
                                    "type": {
                                        "type": "string"
                                    },
                                    "app": {
                                        "type": "string"
                                    },
                                    "description": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "priority": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "reporterId": {
                                        "type": "string",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Ticket cr\u00e9\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Ticket"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/tracker/tickets/{id}": {
            "get": {
                "tags": [
                    "Tracker - Tickets"
                ],
                "summary": "D\u00e9tail d'un ticket",
                "operationId": "get_app_tracker_presentation_ticket_ticketshow__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tail du ticket",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/TicketDetail"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Tracker - Tickets"
                ],
                "summary": "Supprimer un ticket",
                "operationId": "delete_app_tracker_presentation_ticket_ticketdelete__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Ticket supprim\u00e9"
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Tracker - Tickets"
                ],
                "summary": "Modifier un ticket",
                "operationId": "patch_app_tracker_presentation_ticket_ticketupdate__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "description": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "type": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "priority": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "app": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "assigneeId": {
                                        "type": "string",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ticket modifi\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Ticket"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/tickets/{id}/log-time": {
            "post": {
                "operationId": "post_app_tracker_presentation_ticket_ticketlogtime__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LogTimePayload"
                            }
                        }
                    }
                },
                "responses": {
                    "default": {
                        "description": ""
                    }
                }
            }
        },
        "/tracker/tickets/{id}/unarchive": {
            "post": {
                "tags": [
                    "Tracker - Tickets"
                ],
                "summary": "D\u00e9sarchiver un ticket",
                "operationId": "post_app_tracker_presentation_ticket_ticketunarchive__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ticket d\u00e9sarchiv\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Ticket"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/tickets/{id}/status": {
            "patch": {
                "tags": [
                    "Tracker - Tickets"
                ],
                "summary": "Modifier le statut d'un ticket",
                "operationId": "patch_app_tracker_presentation_ticket_ticketupdatestatus__invoke",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "status"
                                ],
                                "properties": {
                                    "status": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Statut modifi\u00e9",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Ticket"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Ticket non trouv\u00e9"
                    }
                }
            }
        },
        "/tracker/users": {
            "get": {
                "tags": [
                    "Tracker - Users"
                ],
                "summary": "Liste des utilisateurs du tracker",
                "operationId": "get_app_tracker_presentation_user_userlist__invoke",
                "responses": {
                    "200": {
                        "description": "Liste des utilisateurs"
                    }
                }
            },
            "post": {
                "tags": [
                    "Tracker - Users"
                ],
                "summary": "Cr\u00e9er un utilisateur tracker",
                "operationId": "post_app_tracker_presentation_user_usercreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "username",
                                    "displayName"
                                ],
                                "properties": {
                                    "username": {
                                        "type": "string"
                                    },
                                    "displayName": {
                                        "type": "string"
                                    },
                                    "email": {
                                        "type": "string",
                                        "format": "email",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Utilisateur cr\u00e9\u00e9"
                    },
                    "400": {
                        "description": "Erreur de validation"
                    }
                }
            }
        },
        "/admin/words": {
            "post": {
                "tags": [
                    "Mots (Admin)"
                ],
                "summary": "Cr\u00e9er un mot",
                "operationId": "post_app_word_presentation_wordcreate__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "slug",
                                    "arabic",
                                    "transliteration",
                                    "meaningFr",
                                    "category",
                                    "difficulty"
                                ],
                                "properties": {
                                    "slug": {
                                        "type": "string"
                                    },
                                    "arabic": {
                                        "type": "string"
                                    },
                                    "transliteration": {
                                        "type": "string"
                                    },
                                    "meaningFr": {
                                        "type": "string"
                                    },
                                    "meaningEn": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "category": {
                                        "type": "string"
                                    },
                                    "difficulty": {
                                        "type": "integer"
                                    },
                                    "imageUrl": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "audioUrl": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "letterSlugs": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    },
                                    "syllableKeys": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Mot cr\u00e9\u00e9"
                    }
                }
            }
        },
        "/admin/words/{slug}": {
            "put": {
                "tags": [
                    "Mots (Admin)"
                ],
                "summary": "Modifier un mot",
                "operationId": "put_app_word_presentation_wordupdate__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateWordPayload"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Mot modifi\u00e9"
                    },
                    "404": {
                        "description": "Mot non trouv\u00e9"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Mots (Admin)"
                ],
                "summary": "Supprimer un mot",
                "operationId": "delete_app_word_presentation_worddelete__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Mot supprim\u00e9"
                    },
                    "404": {
                        "description": "Mot non trouv\u00e9"
                    }
                }
            }
        },
        "/admin/words/import": {
            "post": {
                "tags": [
                    "Mots (Admin)"
                ],
                "summary": "Import en masse de mots",
                "operationId": "post_app_word_presentation_wordimport__invoke",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "words": {
                                        "type": "array",
                                        "items": {
                                            "type": "object"
                                        }
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "R\u00e9sultat de l'import"
                    }
                }
            }
        },
        "/words": {
            "get": {
                "tags": [
                    "Mots"
                ],
                "summary": "Liste des mots arabes",
                "operationId": "get_app_word_presentation_wordlist__invoke",
                "parameters": [
                    {
                        "name": "category",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "difficulty",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "letter",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Liste des mots",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Word"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/words/{slug}": {
            "get": {
                "tags": [
                    "Mots"
                ],
                "summary": "D\u00e9tail d'un mot arabe",
                "operationId": "get_app_word_presentation_wordshow__invoke",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "example": "kitab"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "D\u00e9tail du mot",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Word"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Mot non trouv\u00e9"
                    }
                }
            }
        },
        "/student/words/unlocked": {
            "get": {
                "tags": [
                    "Student - Mots"
                ],
                "summary": "Mots d\u00e9bloqu\u00e9s par l'\u00e9tudiant",
                "operationId": "get_app_word_presentation_wordunlocked__invoke",
                "responses": {
                    "200": {
                        "description": "Mots dont toutes les lettres sont apprises",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Word"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "LetterForms": {
                "description": "Les quatre formes d'une lettre arabe selon sa position dans le mot",
                "properties": {
                    "isolated": {
                        "description": "Forme isol\u00e9e",
                        "type": "string",
                        "example": "\u0628"
                    },
                    "initial": {
                        "description": "Forme initiale",
                        "type": "string",
                        "example": "\u0628\u0640"
                    },
                    "medial": {
                        "description": "Forme m\u00e9diane",
                        "type": "string",
                        "example": "\u0640\u0628\u0640"
                    },
                    "final": {
                        "description": "Forme finale",
                        "type": "string",
                        "example": "\u0640\u0628"
                    }
                },
                "type": "object"
            },
            "Letter": {
                "description": "Lettre de l'alphabet arabe",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid",
                        "example": "01953f8a-0000-7000-8000-000000000001"
                    },
                    "slug": {
                        "type": "string",
                        "example": "ba"
                    },
                    "order": {
                        "type": "integer",
                        "example": 2
                    },
                    "character": {
                        "type": "string",
                        "example": "\u0628"
                    },
                    "name": {
                        "type": "string",
                        "example": "Ba"
                    },
                    "nameAr": {
                        "type": "string",
                        "example": "\u0628\u0627\u0621"
                    },
                    "transliteration": {
                        "type": "string",
                        "example": "b"
                    },
                    "pronunciationGuide": {
                        "type": "string",
                        "example": "Comme le 'b' en fran\u00e7ais"
                    },
                    "forms": {
                        "$ref": "#/components/schemas/LetterForms"
                    },
                    "connectable": {
                        "type": "boolean",
                        "example": true
                    },
                    "group": {
                        "type": "string",
                        "example": "ba"
                    }
                },
                "type": "object"
            },
            "Syllable": {
                "description": "Syllabe arabe (lettre + voyelle)",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "slug": {
                        "type": "string",
                        "example": "ba-fatha"
                    },
                    "letterSlug": {
                        "type": "string",
                        "example": "ba"
                    },
                    "vowelSlug": {
                        "type": "string",
                        "example": "fatha"
                    },
                    "character": {
                        "type": "string",
                        "example": "\u0628\u064e"
                    },
                    "letterName": {
                        "type": "string",
                        "example": "Ba"
                    },
                    "vowelName": {
                        "type": "string",
                        "example": "Fatha"
                    },
                    "transliteration": {
                        "type": "string",
                        "example": "ba"
                    },
                    "difficulty": {
                        "type": "integer",
                        "example": 1
                    },
                    "active": {
                        "type": "boolean",
                        "example": true
                    }
                },
                "type": "object"
            },
            "Vowel": {
                "description": "Voyelle arabe (signe diacritique)",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid",
                        "example": "01953f8a-0000-7000-8000-000000000002"
                    },
                    "slug": {
                        "type": "string",
                        "example": "fatha"
                    },
                    "order": {
                        "type": "integer",
                        "example": 1
                    },
                    "name": {
                        "type": "string",
                        "example": "Fatha"
                    },
                    "nameAr": {
                        "type": "string",
                        "example": "\u0641\u064e\u062a\u0652\u062d\u064e\u0629"
                    },
                    "symbol": {
                        "type": "string",
                        "example": "\u064e"
                    },
                    "transliteration": {
                        "type": "string",
                        "example": "a"
                    },
                    "description": {
                        "type": "string",
                        "example": "Voyelle courte \"a\", plac\u00e9e au-dessus de la lettre"
                    },
                    "position": {
                        "type": "string",
                        "example": "above"
                    },
                    "category": {
                        "type": "string",
                        "example": "short_vowel"
                    }
                },
                "type": "object"
            },
            "AudioAvailability": {
                "description": "Disponibilit\u00e9 des audios pour une voix",
                "properties": {
                    "letters": {
                        "type": "object"
                    },
                    "syllables": {
                        "type": "object"
                    }
                },
                "type": "object"
            },
            "SyllableAudio": {
                "description": "Audio d'une syllabe",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "voiceSlug": {
                        "type": "string",
                        "example": "fatima"
                    },
                    "letterSlug": {
                        "type": "string",
                        "example": "ba"
                    },
                    "vowelSlug": {
                        "type": "string",
                        "example": "fatha"
                    },
                    "filePath": {
                        "type": "string"
                    },
                    "originalFilename": {
                        "type": "string"
                    },
                    "fileSize": {
                        "type": "integer"
                    },
                    "duration": {
                        "type": "integer"
                    },
                    "uploadedAt": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "type": "object"
            },
            "Voice": {
                "description": "Voix disponible pour l'audio",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "slug": {
                        "type": "string",
                        "example": "fatima"
                    },
                    "name": {
                        "type": "string",
                        "example": "Fatima"
                    },
                    "gender": {
                        "type": "string",
                        "example": "female"
                    },
                    "description": {
                        "type": "string"
                    },
                    "isDefault": {
                        "type": "boolean"
                    },
                    "active": {
                        "type": "boolean"
                    },
                    "createdAt": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "updatedAt": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "type": "object"
            },
            "LetterAudio": {
                "description": "Audio d'une lettre",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "voiceSlug": {
                        "type": "string",
                        "example": "fatima"
                    },
                    "letterSlug": {
                        "type": "string",
                        "example": "ba"
                    },
                    "filePath": {
                        "type": "string"
                    },
                    "originalFilename": {
                        "type": "string"
                    },
                    "fileSize": {
                        "type": "integer"
                    },
                    "duration": {
                        "type": "integer"
                    },
                    "uploadedAt": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "type": "object"
            },
            "TokenResponse": {
                "description": "R\u00e9ponse d'authentification avec token d'acc\u00e8s",
                "properties": {
                    "token": {
                        "type": "string",
                        "example": "a1b2c3d4e5f6..."
                    },
                    "expiresIn": {
                        "type": "integer",
                        "example": 86400
                    }
                },
                "type": "object"
            },
            "Digit": {
                "description": "Chiffre arabo-indique (\u0660-\u0669)",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "slug": {
                        "type": "string",
                        "example": "wahid"
                    },
                    "order": {
                        "type": "integer",
                        "example": 1
                    },
                    "symbol": {
                        "type": "string",
                        "example": "\u0661"
                    },
                    "value": {
                        "type": "integer",
                        "example": 1
                    },
                    "name": {
                        "type": "string",
                        "example": "Wahid"
                    },
                    "nameAr": {
                        "type": "string",
                        "example": "\u0648\u0627\u062d\u062f"
                    },
                    "transliteration": {
                        "type": "string",
                        "example": "wahid"
                    },
                    "pronunciationGuide": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "Ticket": {
                "description": "Ticket du tracker",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "title": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string"
                    },
                    "typeLabel": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string"
                    },
                    "statusLabel": {
                        "type": "string"
                    },
                    "priority": {
                        "type": "string"
                    },
                    "priorityLabel": {
                        "type": "string"
                    },
                    "app": {
                        "type": "string"
                    },
                    "appLabel": {
                        "type": "string"
                    },
                    "reporterId": {
                        "type": "string"
                    },
                    "reporterName": {
                        "type": "string"
                    },
                    "assigneeId": {
                        "type": "string"
                    },
                    "assigneeName": {
                        "type": "string"
                    },
                    "isArchived": {
                        "type": "boolean"
                    },
                    "processedByClaude": {
                        "type": "boolean"
                    },
                    "commentCount": {
                        "type": "integer"
                    },
                    "attachmentCount": {
                        "type": "integer"
                    },
                    "estimateHours": {
                        "type": "number"
                    },
                    "loggedHours": {
                        "type": "number"
                    },
                    "sprintId": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "sprintName": {
                        "type": "string"
                    },
                    "createdAt": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "updatedAt": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "type": "object"
            },
            "Attachment": {
                "description": "Pi\u00e8ce jointe d'un ticket ou commentaire",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "filename": {
                        "type": "string"
                    },
                    "originalFilename": {
                        "type": "string"
                    },
                    "url": {
                        "type": "string"
                    },
                    "mimeType": {
                        "type": "string"
                    },
                    "size": {
                        "type": "integer"
                    },
                    "isImage": {
                        "type": "boolean"
                    },
                    "createdAt": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "type": "object"
            },
            "Comment": {
                "description": "Commentaire sur un ticket",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "content": {
                        "type": "string"
                    },
                    "authorId": {
                        "type": "string"
                    },
                    "authorName": {
                        "type": "string"
                    },
                    "attachments": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Attachment"
                        }
                    },
                    "createdAt": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "type": "object"
            },
            "TicketDetail": {
                "description": "D\u00e9tail complet d'un ticket avec commentaires et pi\u00e8ces jointes"
            },
            "TrackerSummary": {
                "description": "R\u00e9sum\u00e9 du tracker",
                "properties": {
                    "total": {
                        "type": "integer"
                    },
                    "byStatus": {
                        "type": "object"
                    },
                    "byType": {
                        "type": "object"
                    },
                    "byApp": {
                        "type": "object"
                    },
                    "byPriority": {
                        "type": "object"
                    }
                },
                "type": "object"
            },
            "Word": {
                "description": "Mot arabe avec d\u00e9composition syllabique",
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "slug": {
                        "type": "string",
                        "example": "kitab"
                    },
                    "arabic": {
                        "type": "string",
                        "example": "\u0643\u0650\u062a\u064e\u0627\u0628"
                    },
                    "transliteration": {
                        "type": "string",
                        "example": "kitab"
                    },
                    "meaningFr": {
                        "type": "string",
                        "example": "livre"
                    },
                    "meaningEn": {
                        "type": "string",
                        "example": "book"
                    },
                    "category": {
                        "type": "string",
                        "example": "school"
                    },
                    "difficulty": {
                        "type": "integer",
                        "example": 3
                    },
                    "imageUrl": {
                        "type": "string"
                    },
                    "audioUrl": {
                        "type": "string"
                    },
                    "letterSlugs": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "syllableKeys": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "digitSlug": {
                        "type": "string",
                        "example": "wahid"
                    }
                },
                "type": "object"
            },
            "CreateLetter": {
                "required": [
                    "slug",
                    "order",
                    "character",
                    "name",
                    "nameAr",
                    "transliteration",
                    "pronunciationGuide",
                    "formIsolated",
                    "formInitial",
                    "formMedial",
                    "formFinal"
                ],
                "properties": {
                    "slug": {
                        "type": "string",
                        "maxLength": 20,
                        "pattern": "[a-z0-9-]+"
                    },
                    "order": {
                        "type": "integer",
                        "minimum": 0,
                        "exclusiveMinimum": true
                    },
                    "character": {
                        "type": "string",
                        "maxLength": 10
                    },
                    "name": {
                        "type": "string",
                        "maxLength": 50
                    },
                    "nameAr": {
                        "type": "string",
                        "maxLength": 50
                    },
                    "transliteration": {
                        "type": "string",
                        "maxLength": 20
                    },
                    "pronunciationGuide": {
                        "type": "string"
                    },
                    "formIsolated": {
                        "type": "string",
                        "maxLength": 10
                    },
                    "formInitial": {
                        "type": "string",
                        "maxLength": 10
                    },
                    "formMedial": {
                        "type": "string",
                        "maxLength": 10
                    },
                    "formFinal": {
                        "type": "string",
                        "maxLength": 10
                    },
                    "connectable": {
                        "type": "boolean",
                        "default": true
                    },
                    "group": {
                        "type": "string",
                        "default": "",
                        "maxLength": 20
                    }
                },
                "type": "object"
            },
            "UpdateLetterPayload": {
                "properties": {
                    "order": {
                        "type": "integer",
                        "default": null,
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "nullable": true
                    },
                    "character": {
                        "type": "string",
                        "default": null,
                        "maxLength": 10,
                        "nullable": true
                    },
                    "name": {
                        "type": "string",
                        "default": null,
                        "maxLength": 50,
                        "nullable": true
                    },
                    "nameAr": {
                        "type": "string",
                        "default": null,
                        "maxLength": 50,
                        "nullable": true
                    },
                    "transliteration": {
                        "type": "string",
                        "default": null,
                        "maxLength": 20,
                        "nullable": true
                    },
                    "pronunciationGuide": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "formIsolated": {
                        "type": "string",
                        "default": null,
                        "maxLength": 10,
                        "nullable": true
                    },
                    "formInitial": {
                        "type": "string",
                        "default": null,
                        "maxLength": 10,
                        "nullable": true
                    },
                    "formMedial": {
                        "type": "string",
                        "default": null,
                        "maxLength": 10,
                        "nullable": true
                    },
                    "formFinal": {
                        "type": "string",
                        "default": null,
                        "maxLength": 10,
                        "nullable": true
                    },
                    "connectable": {
                        "type": "boolean",
                        "default": null,
                        "nullable": true
                    },
                    "group": {
                        "type": "string",
                        "default": null,
                        "maxLength": 20,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateSyllable": {
                "required": [
                    "letterSlug",
                    "vowelSlug"
                ],
                "properties": {
                    "letterSlug": {
                        "type": "string",
                        "maxLength": 20
                    },
                    "vowelSlug": {
                        "type": "string",
                        "maxLength": 20
                    },
                    "transliteration": {
                        "type": "string",
                        "default": "",
                        "maxLength": 30
                    },
                    "difficulty": {
                        "type": "integer",
                        "default": 1,
                        "maximum": 3,
                        "minimum": 1
                    },
                    "active": {
                        "type": "boolean",
                        "default": true
                    }
                },
                "type": "object"
            },
            "UpdateSyllablePayload": {
                "properties": {
                    "transliteration": {
                        "type": "string",
                        "default": null,
                        "maxLength": 30,
                        "nullable": true
                    },
                    "difficulty": {
                        "type": "integer",
                        "default": null,
                        "maximum": 3,
                        "minimum": 1,
                        "nullable": true
                    },
                    "active": {
                        "type": "boolean",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateVowel": {
                "required": [
                    "slug",
                    "order",
                    "name",
                    "nameAr",
                    "symbol",
                    "transliteration",
                    "description",
                    "position",
                    "category"
                ],
                "properties": {
                    "slug": {
                        "type": "string",
                        "maxLength": 20,
                        "pattern": "[a-z0-9-]+"
                    },
                    "order": {
                        "type": "integer",
                        "minimum": 0,
                        "exclusiveMinimum": true
                    },
                    "name": {
                        "type": "string",
                        "maxLength": 50
                    },
                    "nameAr": {
                        "type": "string",
                        "maxLength": 50
                    },
                    "symbol": {
                        "type": "string",
                        "maxLength": 10
                    },
                    "transliteration": {
                        "type": "string",
                        "maxLength": 10
                    },
                    "description": {
                        "type": "string"
                    },
                    "position": {
                        "type": "string",
                        "enum": [
                            "above",
                            "below",
                            "after"
                        ]
                    },
                    "category": {
                        "type": "string",
                        "enum": [
                            "short_vowel",
                            "sukun",
                            "shadda",
                            "tanwin",
                            "long_vowel"
                        ]
                    }
                },
                "type": "object"
            },
            "UpdateVowelPayload": {
                "properties": {
                    "order": {
                        "type": "integer",
                        "default": null,
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "nullable": true
                    },
                    "name": {
                        "type": "string",
                        "default": null,
                        "maxLength": 50,
                        "nullable": true
                    },
                    "nameAr": {
                        "type": "string",
                        "default": null,
                        "maxLength": 50,
                        "nullable": true
                    },
                    "symbol": {
                        "type": "string",
                        "default": null,
                        "maxLength": 10,
                        "nullable": true
                    },
                    "transliteration": {
                        "type": "string",
                        "default": null,
                        "maxLength": 10,
                        "nullable": true
                    },
                    "description": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "position": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "above",
                            "below",
                            "after"
                        ],
                        "nullable": true
                    },
                    "category": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "short_vowel",
                            "sukun",
                            "shadda",
                            "tanwin",
                            "long_vowel"
                        ],
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "SubmitAssignment": {
                "required": [
                    "answers",
                    "score"
                ],
                "properties": {
                    "answers": {
                        "type": "array",
                        "items": {}
                    },
                    "score": {
                        "type": "integer",
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "UploadDrawing": {
                "required": [
                    "questionIndex",
                    "imageBase64"
                ],
                "properties": {
                    "questionIndex": {
                        "type": "integer",
                        "minimum": 0
                    },
                    "imageBase64": {
                        "type": "string"
                    },
                    "score": {
                        "type": "integer",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateVoice": {
                "required": [
                    "name",
                    "gender"
                ],
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 100
                    },
                    "gender": {
                        "type": "string",
                        "enum": [
                            "male",
                            "female"
                        ]
                    },
                    "description": {
                        "type": "string",
                        "default": null,
                        "maxLength": 1000,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "UpdateVoiceDto": {
                "properties": {
                    "name": {
                        "type": "string",
                        "default": null,
                        "maxLength": 100,
                        "nullable": true
                    },
                    "gender": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "male",
                            "female"
                        ],
                        "nullable": true
                    },
                    "description": {
                        "type": "string",
                        "default": null,
                        "maxLength": 1000,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateAdminUserPayload": {
                "required": [
                    "email",
                    "password",
                    "displayName"
                ],
                "properties": {
                    "email": {
                        "type": "string"
                    },
                    "password": {
                        "type": "string",
                        "minLength": 8
                    },
                    "displayName": {
                        "type": "string",
                        "maxLength": 100
                    },
                    "roles": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "ResetPasswordPayload": {
                "required": [
                    "password"
                ],
                "properties": {
                    "password": {
                        "type": "string",
                        "minLength": 8
                    }
                },
                "type": "object"
            },
            "UpdateAdminUserPayload": {
                "properties": {
                    "email": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "displayName": {
                        "type": "string",
                        "default": null,
                        "maxLength": 100,
                        "nullable": true
                    },
                    "roles": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "LoginCommand": {
                "required": [
                    "email",
                    "password"
                ],
                "properties": {
                    "email": {
                        "type": "string"
                    },
                    "password": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "CreateDigit": {
                "required": [
                    "slug",
                    "order",
                    "symbol",
                    "value",
                    "name",
                    "nameAr",
                    "transliteration",
                    "pronunciationGuide"
                ],
                "properties": {
                    "slug": {
                        "type": "string",
                        "maxLength": 20,
                        "pattern": "[a-z0-9-]+"
                    },
                    "order": {
                        "type": "integer",
                        "maximum": 9,
                        "minimum": 0
                    },
                    "symbol": {
                        "type": "string",
                        "maxLength": 10
                    },
                    "value": {
                        "type": "integer",
                        "maximum": 9,
                        "minimum": 0
                    },
                    "name": {
                        "type": "string",
                        "maxLength": 50
                    },
                    "nameAr": {
                        "type": "string",
                        "maxLength": 50
                    },
                    "transliteration": {
                        "type": "string",
                        "maxLength": 20
                    },
                    "pronunciationGuide": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "UpdateDigitPayload": {
                "properties": {
                    "order": {
                        "type": "integer",
                        "default": null,
                        "maximum": 9,
                        "minimum": 0,
                        "nullable": true
                    },
                    "symbol": {
                        "type": "string",
                        "default": null,
                        "maxLength": 10,
                        "nullable": true
                    },
                    "value": {
                        "type": "integer",
                        "default": null,
                        "maximum": 9,
                        "minimum": 0,
                        "nullable": true
                    },
                    "name": {
                        "type": "string",
                        "default": null,
                        "maxLength": 50,
                        "nullable": true
                    },
                    "nameAr": {
                        "type": "string",
                        "default": null,
                        "maxLength": 50,
                        "nullable": true
                    },
                    "transliteration": {
                        "type": "string",
                        "default": null,
                        "maxLength": 20,
                        "nullable": true
                    },
                    "pronunciationGuide": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateStudentPayload": {
                "required": [
                    "email",
                    "password",
                    "displayName"
                ],
                "properties": {
                    "email": {
                        "type": "string"
                    },
                    "password": {
                        "type": "string",
                        "minLength": 8
                    },
                    "displayName": {
                        "type": "string",
                        "maxLength": 100
                    }
                },
                "type": "object"
            },
            "UpdateStudentPayload": {
                "properties": {
                    "email": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "displayName": {
                        "type": "string",
                        "default": null,
                        "maxLength": 100,
                        "nullable": true
                    },
                    "active": {
                        "type": "boolean",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "SaveProgressPayload": {
                "required": [
                    "data"
                ],
                "properties": {
                    "data": {
                        "type": "object",
                        "additionalProperties": {}
                    }
                },
                "type": "object"
            },
            "RegisterStudent": {
                "required": [
                    "email",
                    "password",
                    "displayName"
                ],
                "properties": {
                    "email": {
                        "type": "string"
                    },
                    "password": {
                        "type": "string",
                        "minLength": 8
                    },
                    "displayName": {
                        "type": "string",
                        "maxLength": 100
                    }
                },
                "type": "object"
            },
            "JoinClassroom": {
                "required": [
                    "inviteCode"
                ],
                "properties": {
                    "inviteCode": {
                        "type": "string",
                        "maxLength": 8,
                        "minLength": 8
                    }
                },
                "type": "object"
            },
            "StudentLoginCommand": {
                "required": [
                    "email",
                    "password"
                ],
                "properties": {
                    "email": {
                        "type": "string"
                    },
                    "password": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "CreateTeacherCommand": {
                "required": [
                    "email",
                    "password",
                    "displayName"
                ],
                "properties": {
                    "email": {
                        "type": "string"
                    },
                    "password": {
                        "type": "string",
                        "minLength": 8
                    },
                    "displayName": {
                        "type": "string",
                        "maxLength": 100
                    }
                },
                "type": "object"
            },
            "UpdateTeacherPayload": {
                "properties": {
                    "email": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "displayName": {
                        "type": "string",
                        "default": null,
                        "maxLength": 100,
                        "nullable": true
                    },
                    "active": {
                        "type": "boolean",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateAssignment": {
                "required": [
                    "title",
                    "type",
                    "config",
                    "mode"
                ],
                "properties": {
                    "title": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "type": {
                        "type": "string",
                        "maxLength": 30
                    },
                    "config": {
                        "type": "array",
                        "items": {}
                    },
                    "mode": {
                        "type": "string",
                        "enum": [
                            "fixed",
                            "random"
                        ]
                    },
                    "classroomId": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "studentId": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "questions": {
                        "type": "array",
                        "items": {},
                        "default": null,
                        "nullable": true
                    },
                    "deadline": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "UpdateAssignment": {
                "required": [
                    "title",
                    "type",
                    "config",
                    "mode"
                ],
                "properties": {
                    "title": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "type": {
                        "type": "string",
                        "maxLength": 30
                    },
                    "config": {
                        "type": "array",
                        "items": {}
                    },
                    "mode": {
                        "type": "string",
                        "enum": [
                            "fixed",
                            "random"
                        ]
                    },
                    "questions": {
                        "type": "array",
                        "items": {},
                        "default": null,
                        "nullable": true
                    },
                    "deadline": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateClassroom": {
                "required": [
                    "name"
                ],
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 150
                    },
                    "description": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "UpdateClassroom": {
                "required": [
                    "name"
                ],
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 150
                    },
                    "description": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "EnrollStudent": {
                "required": [
                    "studentEmail"
                ],
                "properties": {
                    "studentEmail": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "TeacherLoginCommand": {
                "required": [
                    "email",
                    "password"
                ],
                "properties": {
                    "email": {
                        "type": "string"
                    },
                    "password": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "AddFeedback": {
                "required": [
                    "comment"
                ],
                "properties": {
                    "comment": {
                        "type": "string"
                    },
                    "questionIndex": {
                        "type": "integer",
                        "default": null,
                        "nullable": true
                    },
                    "adjustedScore": {
                        "type": "integer",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateTrackerUserPayload": {
                "required": [
                    "username",
                    "displayName"
                ],
                "properties": {
                    "username": {
                        "type": "string",
                        "maxLength": 50,
                        "pattern": "[a-z0-9_-]+"
                    },
                    "displayName": {
                        "type": "string",
                        "maxLength": 100
                    },
                    "email": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "UpdateTrackerUserPayload": {
                "properties": {
                    "displayName": {
                        "type": "string",
                        "default": null,
                        "maxLength": 100,
                        "nullable": true
                    },
                    "email": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "AddCommentPayload": {
                "required": [
                    "content"
                ],
                "properties": {
                    "content": {
                        "type": "string",
                        "maxLength": 65535
                    },
                    "authorId": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "CreateTicketPayload": {
                "required": [
                    "title",
                    "type",
                    "app"
                ],
                "properties": {
                    "title": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "type": {
                        "type": "string",
                        "enum": [
                            "bug",
                            "feature",
                            "improvement"
                        ]
                    },
                    "app": {
                        "type": "string",
                        "enum": [
                            "huruf",
                            "admin",
                            "backend"
                        ]
                    },
                    "description": {
                        "type": "string",
                        "default": null,
                        "maxLength": 65535,
                        "nullable": true
                    },
                    "priority": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "critical"
                        ],
                        "nullable": true
                    },
                    "reporterId": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "LogTimePayload": {
                "required": [
                    "hours"
                ],
                "properties": {
                    "hours": {
                        "type": "number",
                        "format": "float",
                        "minimum": 0,
                        "exclusiveMinimum": true
                    }
                },
                "type": "object"
            },
            "UpdateTicketPayload": {
                "properties": {
                    "title": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "description": {
                        "type": "string",
                        "default": null,
                        "maxLength": 65535,
                        "nullable": true
                    },
                    "type": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "bug",
                            "feature",
                            "improvement"
                        ],
                        "nullable": true
                    },
                    "priority": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "critical"
                        ],
                        "nullable": true
                    },
                    "app": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "huruf",
                            "admin",
                            "backend"
                        ],
                        "nullable": true
                    },
                    "assigneeId": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "estimateHours": {
                        "type": "number",
                        "format": "float",
                        "default": null,
                        "minimum": 0,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "UpdateTicketStatusPayload": {
                "required": [
                    "status"
                ],
                "properties": {
                    "status": {
                        "type": "string",
                        "enum": [
                            "backlog",
                            "todo",
                            "in_progress",
                            "review",
                            "done"
                        ]
                    }
                },
                "type": "object"
            },
            "CreateWord": {
                "required": [
                    "slug",
                    "arabic",
                    "transliteration",
                    "meaningFr"
                ],
                "properties": {
                    "slug": {
                        "type": "string",
                        "maxLength": 60,
                        "pattern": "[a-z0-9-]+"
                    },
                    "arabic": {
                        "type": "string",
                        "maxLength": 50
                    },
                    "transliteration": {
                        "type": "string",
                        "maxLength": 60
                    },
                    "meaningFr": {
                        "type": "string",
                        "maxLength": 100
                    },
                    "meaningEn": {
                        "type": "string",
                        "default": null,
                        "maxLength": 100,
                        "nullable": true
                    },
                    "category": {
                        "type": "string",
                        "default": "animals"
                    },
                    "difficulty": {
                        "type": "integer",
                        "default": 1,
                        "maximum": 3,
                        "minimum": 1
                    },
                    "imageUrl": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "audioUrl": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "letterSlugs": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "syllableKeys": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "digitSlug": {
                        "type": "string",
                        "default": null,
                        "maxLength": 20,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "UpdateWordPayload": {
                "properties": {
                    "arabic": {
                        "type": "string",
                        "default": null,
                        "maxLength": 50,
                        "nullable": true
                    },
                    "transliteration": {
                        "type": "string",
                        "default": null,
                        "maxLength": 60,
                        "nullable": true
                    },
                    "meaningFr": {
                        "type": "string",
                        "default": null,
                        "maxLength": 100,
                        "nullable": true
                    },
                    "meaningEn": {
                        "type": "string",
                        "default": null,
                        "maxLength": 100,
                        "nullable": true
                    },
                    "category": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "difficulty": {
                        "type": "integer",
                        "default": null,
                        "maximum": 3,
                        "minimum": 1,
                        "nullable": true
                    },
                    "imageUrl": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "audioUrl": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "letterSlugs": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "default": null,
                        "nullable": true
                    },
                    "syllableKeys": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "default": null,
                        "nullable": true
                    },
                    "digitSlug": {
                        "type": "string",
                        "default": null,
                        "maxLength": 20,
                        "nullable": true
                    }
                },
                "type": "object"
            }
        }
    },
    "tags": [
        {
            "name": "Alphabet - Letters",
            "description": "Lettres de l'alphabet arabe (28 lettres)"
        },
        {
            "name": "Alphabet - Vowels",
            "description": "Voyelles arabes - diacritiques (fatha, kasra, damma)"
        },
        {
            "name": "Audio - Stream",
            "description": "Streaming audio des lettres et syllabes"
        },
        {
            "name": "Audio - Voices",
            "description": "Voix disponibles pour la lecture audio"
        },
        {
            "name": "Audio - Voices (Admin)",
            "description": "Gestion des voix (CRUD admin)"
        },
        {
            "name": "Audio - Letters (Admin)",
            "description": "Upload et gestion des audios de lettres"
        },
        {
            "name": "Audio - Syllables (Admin)",
            "description": "Upload et gestion des audios de syllabes"
        },
        {
            "name": "Identity - Auth",
            "description": "Authentification et gestion des tokens JWT"
        },
        {
            "name": "Tracker - Tickets",
            "description": "Gestion des tickets du projet"
        },
        {
            "name": "Tracker - Comments",
            "description": "Commentaires sur les tickets"
        },
        {
            "name": "Tracker - Attachments",
            "description": "Fichiers joints aux tickets et commentaires"
        },
        {
            "name": "Tracker - Users",
            "description": "Utilisateurs du tracker"
        },
        {
            "name": "Tracker - API",
            "description": "Endpoints MCP pour l'int\u00e9gration IA"
        },
        {
            "name": "Alphabet - Letters (Admin)",
            "description": "Alphabet - Letters (Admin)"
        },
        {
            "name": "Alphabet - Syllables (Admin)",
            "description": "Alphabet - Syllables (Admin)"
        },
        {
            "name": "Alphabet - Syllables",
            "description": "Alphabet - Syllables"
        },
        {
            "name": "Alphabet - Vowels (Admin)",
            "description": "Alphabet - Vowels (Admin)"
        },
        {
            "name": "Admin - Users",
            "description": "Admin - Users"
        },
        {
            "name": "Numeral - Digits (Admin)",
            "description": "Numeral - Digits (Admin)"
        },
        {
            "name": "Numeral - Digits",
            "description": "Numeral - Digits"
        },
        {
            "name": "Admin - Tracker Users",
            "description": "Admin - Tracker Users"
        },
        {
            "name": "Mots (Admin)",
            "description": "Mots (Admin)"
        },
        {
            "name": "Mots",
            "description": "Mots"
        },
        {
            "name": "Student - Mots",
            "description": "Student - Mots"
        }
    ]
}