5.9 KiB
5.9 KiB
Диаграммы состояний
1. Сессия защиты (defense_sessions.status)
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. Публикация оценок (пара «студент + лабораторная»)
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)
stateDiagram-v2
[*] --> draft : импорт/создание
draft --> published : публикация
published --> draft : снятие с публикации
note right of draft
студентам не видна;
доступна для настройки
end note
note right of published
видна студентам: условие, вариант,
сдача; оценки — только после публикации
end note
4. Публикация материалов (главы, разделы, статьи)
stateDiagram-v2
state "опубликовано" as pub
state "скрыто" as hid
[*] --> pub : импорт/создание (published=true)
pub --> hid : «Скрыть» (published=false)
hid --> pub : «Опубликовать»
note right of hid
Не видно гостям и студентам:
глава целиком скрывает разделы и статьи,
раздел — свои статьи.
Администратор видит их с бейджем «скрыто»
и может открыть для предпросмотра.
end note
5. Жизненный цикл сдачи решения
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. Вариант студента
stateDiagram-v2
[*] --> none : студент в группе, ЛР опубликована
none --> auto : распределение («Раздать»)
auto --> manual : «Закрепить» конкретный вариант
auto --> auto : повторное распределение без force (не трогает занятые)
manual --> manual : force не перезаписывает ручные закрепления
auto --> none : force (сброс авто-назначений)
note right of auto
подбирается наименее занятый вариант
своего уровня; пока есть невыданные —
повторов нет
end note
7. Пароль студента
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