feat(db): миграции групп, курсов, статусов и профиля

This commit is contained in:
2026-10-26 15:47:11 +03:00
parent cde04487e8
commit de9535d35c
14 changed files with 460 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
# Preflight перед миграциями групп и курсов
**Перед любыми миграциями обязателен backup:** `./deploy/backup.sh backup`
(см. [`../BACKUP.md`](../BACKUP.md)). Preflight не заменяет backup.
Два скрипта только читают данные:
- `groups-courses.sql` — до миграций: проблемы, которые могут помешать;
- `groups-courses-post.sql` — после миграций и bootstrap курса C: проверка результата.
## До миграций
```bash
psql -h localhost -U lms -d lms -f deploy/preflight/groups-courses.sql
```
Проверяет:
- группы, имя которых не разбирается шаблоном;
- одинаковые кортежи `(stream, degree, number, course, enrollment_year)`;
- группы без полного набора полей;
- одинаковые имена групп;
- студентов без текущей группы;
- дубли номеров лабораторных при переносе в один курс;
- дубли slug глав;
- объём материалов и активов.
## После миграций и bootstrap
```bash
psql -h localhost -U lms -d lms -f deploy/preflight/groups-courses-post.sql
```
Проверяет:
- лабы без курса (должно быть `0` перед `SET NOT NULL`);
- главы без курса (должно быть `0`, если все текущие материалы курсовые);
- наличие ровно одного курса C;
- комментарии без автора;
- статусы аккаунтов;
- группы без полного разбора.
## Что делать с результатами
1. Группы с нестандартными именами — разобрать вручную и заполнить поля до
перехода на `NOT NULL`.
2. Одинаковые кортежи — исправить номер или год набора.
3. Дубли номеров лаб — перенумеровать или разнести по разным курсам до
включения `UNIQUE (number, course_id)` / `NOT NULL`.
4. Дубли slug — переименовать главы до частичных индексов.
5. После bootstrap курса C проверить, что `labs_without_course = 0` и
`chapters_without_course = 0`.