docs: этап 2 — курсы, bootstrap и лабораторные
This commit is contained in:
@@ -272,10 +272,18 @@ CREATE UNIQUE INDEX chapters_slug_course_uidx ON chapters (course_id, slug) WHER
|
||||
Признак видимости актив наследует от статьи→раздела→главы (course/audience). Требуется проверка доступа в
|
||||
маршруте выдачи активов (см. §6). Отдельных колонок достаточно опционально; минимум — корректная авторизация.
|
||||
|
||||
**Post-bootstrap шаг academic (условный «V10», не файл `db/migration` и вне обычной цепочки Flyway) — курс C: завершение привязки лаб**
|
||||
**V10 — уникальное название курса (реальный файл `V10__course_title_unique.sql`)**
|
||||
```sql
|
||||
-- Выполняется после bootstrap-сервиса, когда все лабы получили course_id.
|
||||
-- Это отдельный шаг/миграция: обычный Flyway-старт применяет миграции раньше
|
||||
-- Защита от дублей курса при конкурентном bootstrap и повторном создании.
|
||||
CREATE UNIQUE INDEX courses_title_lower_uidx ON courses (lower(title));
|
||||
```
|
||||
Сервис дополнительно проверяет название без учёта регистра и возвращает `409`
|
||||
на дубликат; индекс закрывает гонку между проверкой и вставкой.
|
||||
|
||||
**Post-bootstrap шаг academic (вне Flyway) — курс C: завершение привязки лаб**
|
||||
```sql
|
||||
-- Выполняется сервисом CourseBootstrapService после переноса данных, когда все
|
||||
-- лабы получили course_id. Обычный Flyway-старт применяет миграции раньше
|
||||
-- бизнес-логики и не может дождаться создания курса и назначения владельца.
|
||||
ALTER TABLE labs ALTER COLUMN course_id SET NOT NULL;
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user