Перейти к основному содержимому

Reference-данные

Зачем нужно

Документ описывает общеплатформенные справочники: subject, level, format, grade_range. Они используются всеми 7 доменами и не принадлежат ни одному из них.

Сущности

subject

Каноническая образовательная область платформы.

ПолеТипОписание
keystringстабильный ключ, snake_case (mathematics, informatics, programming)
titlei18n objectотображаемое имя
descriptioni18n objectописание
parent_keystring?для иерархических направлений
display_orderintпорядок отображения
is_activeboolможно ли назначать новые сущности

level

Каноническая шкала сложности внутри направления.

ПолеТипОписание
keystringbeginner, basic, advanced, olympiad, pro
titlei18n objectимя
display_orderintпорядок
is_activebool

format

Способ доставки обучения.

ПолеТипОписание
keystringonline_course, intensive, mini_group, circle, individual, offline, competition
titlei18n object
descriptioni18n object
is_activebool

grade_range

Возрастной/школьный диапазон.

ПолеТипОписание
keystringg1-2, g3-4, g5-6, g7-8, g9-11, adult
min_gradeint?школьный класс от
max_gradeint?до
min_ageint?возраст от
max_ageint?до
titlei18n object
display_orderint
is_activebool

Владелец

Платформа. Runtime-хранение обслуживает identity-api как текущий platform host; ownership остаётся у platform-слоя, а не у identity-домена. Управление справочниками — административная функция, доступная по permission platform.reference-data.manage.

UI управления справочниками — в identity-admin-web (как наиболее платформенный фронтенд).

Хранение

Справочники хранятся:

  • источник истины: packages/reference-data (TypeScript) с migration в БД identity (или отдельный platform-сервис в будущем);
  • доменные сервисы кэшируют справочник локально и обновляются по событию platform.reference_data.changed.

Это сознательный компромисс: чтобы доменам не нужен был online-call за справочником при каждом запросе.

API

Чтение:

GET /api/v2/platform/reference/subjects
GET /api/v2/platform/reference/levels
GET /api/v2/platform/reference/formats
GET /api/v2/platform/reference/grade-ranges

Управление:

POST /api/v2/platform/reference/<entity>
PATCH /api/v2/platform/reference/<entity>/{key}
DELETE /api/v2/platform/reference/<entity>/{key}

Удаление допускается только для неиспользованных ключей; иначе — is_active = false.

События

Пока отдельного domains/platform/events.md нет, platform-owned события для ../integrations/platform--all.md фиксируются здесь.

  • platform.reference_data.changed — при создании/обновлении/деактивации.
    • data: { entity: 'subject'|'level'|'format'|'grade_range', key: string, action: 'created'|'updated'|'deactivated' }.
  • platform.feature_flag.changed — при создании/изменении/отключении platform-owned feature flag.
    • data: { flagKey: string, service?: string, action: 'created'|'updated'|'disabled', version: number }.
  • platform.i18n.changed — при публикации или отзыве пакета переводов.
    • data: { locale: string, namespace?: string, action: 'published'|'revoked', version: string }.

Подписаны: доменные сервисы, использующие соответствующий platform artifact.

Использование в доменах

Доменная сущность ссылается на ключ справочника, а не дублирует поля:

{
subjectKey: 'mathematics',
levelKey: 'advanced',
formatKey: 'mini_group',
gradeRangeKey: 'g5-6'
}

Денормализация имени для UI — на уровне backend (через локальный кеш) или frontend (через справочник в packages/reference-data).

Запрещено

  • Локально определять subject, level, format, grade_range внутри домена.
  • Хранить названия справочников в качестве источника связи (использовать key).
  • Удалять справочный ключ, на который есть ссылки.
  • Менять смысл существующего ключа (создавать новый ключ).

Связанные документы