# Диаграммы состояний ## 1. Сессия защиты (`defense_sessions.status`) ```mermaid stateDiagram-v2 [*] --> waiting : преподаватель назначил задание waiting --> waiting : выдан/обновлён код waiting --> started : студент ввёл верный код started --> ready : студент завершил работу started --> ready : истекло время (syncTimeouts, readyReason=timeout) ready --> waiting : «доп. задание: начать заново» (reset) ready --> [*] : задание принято note right of waiting code = NULL — ждёт кода code != NULL — код выдан end note ``` ## 2. Публикация оценок (пара «студент + лабораторная») ```mermaid stateDiagram-v2 [*] --> hidden : оценка выставлена (lab_grades) hidden --> published : чекбокс публикации в ячейке студент×ЛР (grade_publication_students) published --> hidden : снять чекбокс hidden --> published : «опубликовать всем» (глаз в шапке ЛР) published --> hidden : «скрыть у всех» note right of hidden студент не видит ни балл, ни комментарии. Проверка доступа — по (student, lab): групповая публикация (легаси, grade_publications) открывает всем, иначе — по списку студентов. end note note right of published видно только выбранным студентам; подсказки комментариев показывают частоту и позволяют удалять шаблоны с частотой 0 end note ``` Кнопки: чекбокс в ячейке публикует/скрывает оценку конкретному студенту (AJAX, без перезагрузки, тост с «N из M»); «глаз» в шапке лабораторной — массово «всем/скрыть у всех» (частичное состояние — жёлтый со счётчиком). ## 3. Статус лабораторной (`labs.status`) ```mermaid stateDiagram-v2 [*] --> draft : импорт/создание draft --> published : публикация published --> draft : снятие с публикации note right of draft студентам не видна; доступна для настройки end note note right of published видна студентам: условие, вариант, сдача; оценки — только после публикации end note ``` ## 4. Публикация материалов (главы, разделы, статьи) ```mermaid stateDiagram-v2 state "опубликовано" as pub state "скрыто" as hid [*] --> pub : импорт/создание (published=true) pub --> hid : «Скрыть» (published=false) hid --> pub : «Опубликовать» note right of hid Не видно гостям и студентам: глава целиком скрывает разделы и статьи, раздел — свои статьи. Администратор видит их с бейджем «скрыто» и может открыть для предпросмотра. end note ``` ## 5. Жизненный цикл сдачи решения ```mermaid stateDiagram-v2 [*] --> notSubmitted : лабораторная выдана notSubmitted --> submitted : сдача (seq = 1, файлы на диске) submitted --> submitted : переотправка (seq + 1, хранится вся история) submitted --> closed : наступил дедлайн (deadlineAt) submitted --> closed : выдано индивидуальное задание на защиту closed --> [*] note right of closed Форма отправки скрыта, доступно только скачивание ранее отправленных решений end note note right of submitted Скачать можно любую попытку; преподаватель видит последнюю end note ``` ## 6. Вариант студента ```mermaid stateDiagram-v2 [*] --> none : студент в группе, ЛР опубликована none --> auto : распределение («Раздать») auto --> manual : «Закрепить» конкретный вариант auto --> auto : повторное распределение без force (не трогает занятые) manual --> manual : force не перезаписывает ручные закрепления auto --> none : force (сброс авто-назначений) note right of auto подбирается наименее занятый вариант своего уровня; пока есть невыданные — повторов нет end note ``` ## 7. Пароль студента ```mermaid stateDiagram-v2 [*] --> temporary : аккаунт создан / «Сбросить пароль» temporary --> own : смена на /change-password own --> temporary : «Сбросить пароль» администратором note right of temporary must_change_password = true, temp_password хранится; пока пароль не сменён, доступны только /change-password, /logout и статика end note note right of own must_change_password = false, temp_password = NULL end note ```