Files
LMS/docs/05-states.md

137 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Диаграммы состояний
## 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
```