# Preflight перед миграциями групп и курсов **Перед любыми миграциями обязателен backup:** `./deploy/backup.sh backup` (см. [`../BACKUP.md`](../BACKUP.md)). Preflight не заменяет backup. Скрипты только читают данные: - `groups-courses.sql` — до миграций: проблемы, которые могут помешать; - `groups-courses-post.sql` — после миграций и bootstrap курса C: проверка результата; - `progress-v10-v13.sql` — проверка истории Flyway и колонок/индекса при переходе старой feature-миграции V10 на V13. ## До миграций ```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; - комментарии без автора; - статусы аккаунтов; - группы без полного разбора. ## Переход V10 → V13 Нужен для любой БД, которая когда-либо применяла старую feature-миграцию `V10__profile_authors.sql`: dev/feature-БД и staging, ненадолго запускавший master-коммит `bfdae41` (out-of-order + V10). На production/master записи V10 нет — раздел можно пропустить. Порядок: 1. Backup: `./deploy/backup.sh backup`. 2. Проверить состояние: ```bash psql -h localhost -U lms -d lms -f deploy/preflight/progress-v10-v13.sql ``` Колонки должны быть `uuid`/nullable, индекс `lab_grades_lab_idx` — существовать и быть валидным; `columns_ok` и `index_ok` должны быть `true`. 3. Если V10 есть в истории с `success=true`, удалить только эту запись истории (`flyway repair` или точечный `DELETE` из примера в конце скрипта). При `success=false` сначала проверить откат объектов; V13 идемпотентна и создаст недостающее. 4. Deploy: обычный запуск применит V13. 5. Postflight: `psql -h localhost -U lms -d lms -f deploy/preflight/groups-courses-post.sql`. После V13 переход forward-only: откат на сборку без V13 не пройдёт валидацию Flyway. Не оставляйте `out-of-order` включённым. ## Что делать с результатами 1. Группы с нестандартными именами — разобрать вручную и заполнить поля до перехода на `NOT NULL`. 2. Одинаковые кортежи — исправить номер или год набора. 3. Дубли номеров лаб — перенумеровать или разнести по разным курсам до включения `UNIQUE (number, course_id)` / `NOT NULL`. 4. Дубли slug — переименовать главы до частичных индексов. 5. После bootstrap курса C проверить, что `labs_without_course = 0` и `chapters_without_course = 0`.