Перейти к содержанию

Пользователи

Описание сущностей для работы с сотрудниками системы и пользователями платформы.


StaffUser (Сотрудник системы)

Учётная запись сотрудника системы администрирования (CMS). Используется для управления доступом к функционалу платформы.

Атрибуты

Поле Тип Описание
id UUID Уникальный идентификатор сотрудника
first_name string Имя
last_name string Фамилия
email string Email для входа и уведомлений
password_hash string Хеш пароля
role enum Роль: admin, operator, analyst, content_editor
status enum Статус: active, blocked
last_login_at timestamp, nullable Дата последнего входа
created_at timestamp Дата создания учётной записи
updated_at timestamp Дата последнего обновления

Роли

Роль Код Права
Администратор admin Полный доступ ко всем разделам, управление сотрудниками
Оператор operator Управление сценариями на планшете LED
Аналитик analyst Просмотр аналитики и отчётов
Контент-редактор content_editor Управление контентом в CMS (справочники, вопросы, шаблоны, аватары, видеосценарии)

Связи

  • StaffUser — независимая сущность, не связана с данными пользователей платформы

Где используется

  • CMS — управление учётными записями сотрудников, назначение ролей
  • Авторизация — вход в CMS по email и паролю

User (Пользователь платформы)

Единая учётная запись пользователя платформы. Создаётся при первом взаимодействии (сканирование QR-кода) и может быть гостевой или авторизованной в зависимости от наличия OAuth-данных.

Атрибуты

Поле Тип Описание
id UUID Уникальный идентификатор пользователя
guest_id string, nullable Уникальный идентификатор гостя (генерируется при первом QR, если пользователь не авторизован)
guest_expires_at timestamp, nullable Срок действия гостевого режима (24 часа от создания). Если null — пользователь авторизован
oauth_provider enum, nullable Провайдер авторизации: yandex, vk. Null для гостя
oauth_provider_id string, nullable ID пользователя у провайдера. Null для гостя
email string, nullable Email из OAuth-провайдера
name string, nullable Имя из OAuth-провайдера
avatar_url string, nullable URL аватара из OAuth-провайдера
gender enum, nullable Пол: male, female, unknown
birth_date date, nullable Дата рождения из OAuth-провайдера
status enum Статус: guest, active, deactivated
created_at timestamp Дата создания учётной записи
updated_at timestamp Дата последнего обновления

Статусы пользователя

Статус Описание
guest Гостевой режим: есть guest_id, нет OAuth-данных. 24 часа на авторизацию
active Авторизован через OAuth: заполнены OAuth-поля, полный доступ к профилю
anonymized Гость не авторизовался за 24 часа: гостевая сессия разорвана, данные обезличены, аналитика сохранена
deactivated Деактивирован администратором: данные сохранены, вход невозможен

Переходы между статусами

flowchart TD
    Start["QR-код"] --> Guest["GUEST\n(guest_id, 24ч)"]
    Guest -->|"OAuth в течение 24ч"| Active["ACTIVE\n(OAuth-поля заполнены)"]
    Guest -->|"24 часа без авторизации"| Anonymized["ANONYMIZED\n(гостевая сессия разорвана)"]
    Active -->|"Действие администратора"| Deactivated["DEACTIVATED"]

Логика гостевого режима

  • При первом сканировании QR-кода создаётся User со status = guest, генерируется guest_id и guest_expires_at (текущее время + 24 часа)
  • Все результаты (аналитика, анкеты, тесты) привязываются к id пользователя
  • Если в течение 24 часов пользователь авторизуется через OAuth — guest_id сохраняется, заполняются OAuth-поля, status меняется на active, guest_expires_at обнуляется
  • Если 24 часа прошли без авторизации — guest_expires_at истекает, пользователь остаётся в статусе guest, но не может связать данные с будущим OAuth. Данные остаются в системе (аналитика не удаляется)

Связи

  • User → AnalyticsEvent: один пользователь может иметь множество событий аналитики (user_id)
  • User → SurveyResponse: один пользователь может иметь множество ответов на анкеты (user_id)
  • User → ConsentAcceptance: один пользователь может иметь несколько записей о принятии согласий (разные версии)
  • User → TestSession: один пользователь может иметь множество сессий тестирования (user_id)
  • User → GameSession: один пользователь может участвовать в игровых сессиях (user_id)

Где используется

  • Идентификация и регистрация — единая сущность для гостевого и авторизованного режимов
  • Цифровой профиль — агрегация данных пользователя
  • LED-медиаплатформа — привязка результатов сессий к пользователю
  • ПрофСтарт — привязка результатов теста к пользователю
  • Обратная связь — привязка ответов на анкеты к пользователю
  • Аналитика — привязка событий к пользователю, управление учётной записью (деактивация)

Примечания

  • Единая сущность для гостя и авторизованного пользователя упрощает модель: не нужно переносить данные при привязке
  • Результаты всегда привязаны к id пользователя, независимо от статуса
  • OAuth-данные заполняются при авторизации, guest_id может сохраниться для истории
  • Удаление аккаунта не поддерживается — только деактивация