ai-hackaton-backend/app/models/vacancy.py

96 lines
2.8 KiB
Python

from datetime import datetime
from enum import Enum
from sqlmodel import Field, SQLModel
class EmploymentType(str, Enum):
FULL_TIME = "full"
PART_TIME = "part"
PROJECT = "project"
VOLUNTEER = "volunteer"
PROBATION = "probation"
class Experience(str, Enum):
NO_EXPERIENCE = "noExperience"
BETWEEN_1_AND_3 = "between1And3"
BETWEEN_3_AND_6 = "between3And6"
MORE_THAN_6 = "moreThan6"
class Schedule(str, Enum):
FULL_DAY = "fullDay"
SHIFT = "shift"
FLEXIBLE = "flexible"
REMOTE = "remote"
FLY_IN_FLY_OUT = "flyInFlyOut"
class VacancyBase(SQLModel):
title: str = Field(max_length=255)
description: str
key_skills: str | None = None
employment_type: EmploymentType
experience: Experience
schedule: Schedule
salary_from: int | None = None
salary_to: int | None = None
salary_currency: str | None = Field(default="RUR", max_length=3)
gross_salary: bool | None = False
company_name: str | None = Field(default=None, max_length=255)
company_description: str | None = None
area_name: str | None = Field(default=None, max_length=255)
metro_stations: str | None = None
address: str | None = None
professional_roles: str | None = None
contacts_name: str | None = Field(default=None, max_length=255)
contacts_email: str | None = Field(default=None, max_length=255)
contacts_phone: str | None = Field(default=None, max_length=50)
is_archived: bool = Field(default=False)
premium: bool = Field(default=False)
published_at: datetime | None = Field(default_factory=datetime.utcnow)
url: str | None = None
class Vacancy(VacancyBase, table=True):
id: int | None = Field(default=None, primary_key=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
class VacancyCreate(VacancyBase):
pass
class VacancyUpdate(SQLModel):
title: str | None = None
description: str | None = None
key_skills: str | None = None
employment_type: EmploymentType | None = None
experience: Experience | None = None
schedule: Schedule | None = None
salary_from: int | None = None
salary_to: int | None = None
salary_currency: str | None = None
gross_salary: bool | None = None
company_name: str | None = None
company_description: str | None = None
area_name: str | None = None
metro_stations: str | None = None
address: str | None = None
professional_roles: str | None = None
contacts_name: str | None = None
contacts_email: str | None = None
contacts_phone: str | None = None
is_archived: bool | None = None
premium: bool | None = None
published_at: datetime | None = None
url: str | None = None
class VacancyRead(VacancyBase):
id: int
created_at: datetime
updated_at: datetime