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

competitions → storefront

Зачем нужно

Competitions предоставляет storefront публичные проекции олимпиад: события, сезоны, туры, площадки, опубликованные результаты и наградные документы. Storefront отображает эти данные после publication и не становится владельцем олимпиадного lifecycle.

Стороны

  • источник истины: competitions;
  • потребитель: storefront;
  • вид интеграции: event-driven read-model + online read fallback.

Сущности и события

Сущность/СобытиеНазначениеКто владеет
competition_event, competition_season, competition_tourпубличное описание олимпиадыcompetitions
competition_venueпубличная площадка очного тураcompetitions
competition_publicationgate публичной видимостиcompetitions
competition_training_publicationопубликованный архив, разбор или тренажёр с public-safe ссылкойcompetitions/LMS ref
competition_result, competition_award_documentопубликованные результаты и документыcompetitions
storefront_page, storefront_catalog_itemвитринные read-model projections с source ref на competitionsstorefront

События

messageTypeКогда
competitions.season.publishedсезон стал публичным
competitions.venue.publishedплощадка разрешена к публичному показу
competitions.training_publication.publishedопубликован архивный тренажёр, разбор или подготовительный блок
competitions.result.publishedопубликован результат
competitions.award.issuedвыдан документ, доступный публично по правилам privacy
competitions.publication.revokedпубличная проекция должна быть скрыта или инвалидирована

Online read API

GET /api/v2/competitions/events
GET /api/v2/competitions/events/{slug}
GET /api/v2/competitions/seasons/{seasonId}/venues
GET /api/v2/competitions/seasons/{seasonId}/venues/map
GET /api/v2/competitions/seasons/{seasonId}/public-results
GET /api/v2/competitions/seasons/{seasonId}/training-links
GET /api/v2/competitions/documents/verify/{code}

Storefront использует API как fallback для SSR/cache rebuild. Admin actions остаются в competitions.

Правила publication

  • storefront показывает только records со статусом published или public_visible = true;
  • draft/review/scheduled/hidden/private records не попадают в public read-model;
  • результаты публикуются только после competition_publication;
  • персональные данные несовершеннолетних скрываются или агрегируются по privacy policy;
  • venue address/detail может быть публичным только после явного venue publication;
  • storefront получает только public-safe поля площадки: адрес/координаты после публикации, public comment, правила входа, документы, сопровождающих, facility rules и availability;
  • private contacts, technical_capabilities, printing/scanning internals and admin_internal_comment не попадают в storefront;
  • архив, тренажёры и разборы показываются только при published training/publication state; CTA тренажёра ведёт в LMS/training контур;
  • competition_group, Learning Workspace groups и списки «мои ученики» не передаются в storefront.

Поведение storefront

  1. По событиям обновляет storefront_page/storefront_catalog_item projections.
  2. SSR/cache инвалидируется по publication/revocation events.
  3. В карточках и лендингах хранится source ref: domain=competitions, type, id, publicationVersion.
  4. Storefront не принимает регистрации и не меняет результат; CTA ведёт в competitions или CRM flow.

Идемпотентность

  • publication events идемпотентны по competition_publication_id + version;
  • result projections — по competition_result_id + publicationVersion;
  • venue projections — по competition_venue_id + publicationVersion.

Ошибки

СценарийПоведение
событие пришло до publication statestorefront игнорирует и ждёт published snapshot
result revokedprojection скрывается, cache инвалидируется
payload содержит raw answer/submissionсобытие отклоняется, DLQ + security alert
venue payload содержит private technical/admin fieldsсобытие отклоняется, projection не обновляется
competitions API недоступенstorefront отдаёт последний published cache с source timestamp

Scopes

ScopeДля чего
service:competitions.seasons.readчитать published season/tour projections
service:competitions.results.readчитать published result snapshots

Retention

  • storefront projection хранится до revocation/archive source record;
  • events — 90 дней;
  • audit publication/revocation — по retention competitions.

Связанные ADR

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