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