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

Модель данных

ORM в backend/app/models. Идентификаторы пользовательских сущностей — UUID. Админские таблицы описаны в docs/ADMIN.md и живут в app/admin/models.py: снимки аналитики, мета заданий, журнал, параметры, справочники, дела работодателей, банлист, верификация компании.

Учётные записи

Сущность Зачем
User Почта, хэш пароля, роль candidate / employer / admin
EmailVerificationCode Код подтверждения почты
RefreshToken Продление сессии

Отдельной таблицы 2FA в моделях нет.

Люди и компании

Сущность Зачем
CandidateProfile Резюме, контакты, предпочтения ленты, статус поиска
CandidateCategory Категория по специализации, пауза, история попыток рядом с тестом
Company Профиль работодателя
FspAchievement, FspSportTitle Результаты и звания из реестра

Грейды в коде (Grade): intern, junior, middle, senior, lead. Одиннадцати подуровней с «−» и «+» в перечислении нет.

Подбор и общение

Сущность Зачем
Vacancy Вакансия, в том числе вилка
Invitation Приглашение. Статусы: sent, viewed, accepted, declined. «Отозвано» и «Истекло» в перечислении нет
VacancyReaction, CandidateReaction Лайк и пропуск для свайпов
Conversation, Message, MessageAttachment Чат и файлы
Meeting Встреча. Статусы: pending, confirmed и соседние из MeetingStatus

Тестирование

Сущность Зачем
AssessmentTask Вопрос, код или открытый ответ. Владелец — платформа или компания
AssessmentTest Шаблон: выборка или фиксированный список
AssessmentAttempt, AssessmentAnswer, AssessmentTaskTime Попытка, ответы, время
TestAssignment Тестовое, которое компания отправила кандидату

Статусы попытки включают interview и grading. Отдельных таблиц прокторинга (запись экрана, флаги лиц) в моделях не найдено.

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