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

Data model

The ORM is in backend/app/models. Identifiers of user entities are UUIDs. Admin tables are described in docs/ADMIN.md and live in app/admin/models.py: analytics snapshots, task meta, the audit log, parameters, dictionaries, employer cases, the ban list, company verification.

Accounts

Entity Why it exists
User Email, password hash, role candidate / employer / admin
EmailVerificationCode The email confirmation code
RefreshToken Session renewal

There is no 2FA table in the models.

People and companies

Entity Why it exists
CandidateProfile Resume, contacts, feed preferences, search status
CandidateCategory A category per specialization, cooldown, attempt history next to the test
Company The employer profile
FspAchievement, FspSportTitle Results and titles from the registry

Grades in code (Grade): intern, junior, middle, senior, lead. The eleven sub-levels with «−» and «+» are not in the enum.

Matching and conversation

Entity Why it exists
Vacancy A vacancy, including the salary band
Invitation An invitation. Statuses: sent, viewed, accepted, declined. «Отозвано» and «Истекло» are not in the enum
VacancyReaction, CandidateReaction Like and skip for swipes
Conversation, Message, MessageAttachment Chat and files
Meeting A meeting. Statuses: pending, confirmed, and the neighbours in MeetingStatus

Assessment

Entity Why it exists
AssessmentTask A quiz, code, or open answer. The owner is the platform or a company
AssessmentTest A template: a sample or a fixed list
AssessmentAttempt, AssessmentAnswer, AssessmentTaskTime The attempt, answers, and time
TestAssignment A take-home a company sent to a candidate

Attempt statuses include interview and grading. Separate proctoring tables (screen recording, face flags) were not found in the models.

A need as its own entity, shortlist versions, and a one-off offer were not found in the models. Matching in the code hangs off vacancies, reactions, and profile strength.