Пользователи
Описание сущностей для работы с сотрудниками системы и пользователями платформы.
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 может сохраниться для истории
- Удаление аккаунта не поддерживается — только деактивация