You've already forked RekomenciBackend
157 lines
3.9 KiB
Python
157 lines
3.9 KiB
Python
from datetime import UTC, datetime
|
|
from decimal import Decimal
|
|
from typing import NewType, Self
|
|
from uuid import UUID
|
|
|
|
from uuid_utils.compat import uuid7
|
|
|
|
from template_project.application.common.entity import Entity, to_entity
|
|
from template_project.application.common.enums import EducationGrade, ExperienceType
|
|
from template_project.application.user.entity import UserId
|
|
|
|
ResumeId = NewType("ResumeId", UUID)
|
|
ResumeEmbeddingId = NewType("ResumeEmbeddingId", UUID)
|
|
ResumePredictionId = NewType("ResumePredictionId", UUID)
|
|
ResumeExperienceId = NewType("ResumeExperienceId", UUID)
|
|
ResumeEducationId = NewType("ResumeEducationId", UUID)
|
|
ResumeProjectId = NewType("ResumeProjectId", UUID)
|
|
|
|
|
|
@to_entity
|
|
class Resume(Entity[ResumeId]):
|
|
user_id: UserId
|
|
position: str
|
|
location: str
|
|
about_me: str
|
|
key_skills: list[str]
|
|
experience_type: ExperienceType
|
|
down_resume_id: ResumeId | None = None
|
|
up_resume_id: ResumeId | None = None
|
|
|
|
@classmethod
|
|
def factory(
|
|
cls,
|
|
user_id: UserId,
|
|
position: str,
|
|
location: str,
|
|
about_me: str,
|
|
key_skills: list[str],
|
|
experience_type: ExperienceType,
|
|
down_resume_id: ResumeId | None = None,
|
|
up_resume_id: ResumeId | None = None,
|
|
) -> Self:
|
|
return cls(
|
|
id=ResumeId(uuid7()),
|
|
created_at=datetime.now(tz=UTC),
|
|
user_id=user_id,
|
|
position=position,
|
|
location=location,
|
|
about_me=about_me,
|
|
key_skills=key_skills,
|
|
experience_type=experience_type,
|
|
down_resume_id=down_resume_id,
|
|
up_resume_id=up_resume_id,
|
|
)
|
|
|
|
|
|
@to_entity
|
|
class ResumeEmbedding(Entity[ResumeEmbeddingId]):
|
|
resume_id: ResumeId
|
|
vector: list[float]
|
|
|
|
@classmethod
|
|
def factory(
|
|
cls,
|
|
resume_id: ResumeId,
|
|
vector: list[float],
|
|
) -> Self:
|
|
return cls(
|
|
id=ResumeEmbeddingId(uuid7()),
|
|
created_at=datetime.now(tz=UTC),
|
|
resume_id=resume_id,
|
|
vector=vector,
|
|
)
|
|
|
|
|
|
@to_entity
|
|
class ResumePrediction(Entity[ResumePredictionId]):
|
|
resume_id: ResumeId
|
|
from_salary: Decimal
|
|
to_salary: Decimal
|
|
recommended_skills: list[str]
|
|
|
|
|
|
@to_entity
|
|
class ResumeExperience(Entity[ResumeExperienceId]):
|
|
resume_id: ResumeId
|
|
place: str
|
|
description: str
|
|
months_duration: int
|
|
|
|
@classmethod
|
|
def factory(
|
|
cls,
|
|
resume_id: ResumeId,
|
|
place: str,
|
|
description: str,
|
|
months_duration: int,
|
|
) -> Self:
|
|
return cls(
|
|
id=ResumeExperienceId(uuid7()),
|
|
created_at=datetime.now(tz=UTC),
|
|
resume_id=resume_id,
|
|
place=place,
|
|
description=description,
|
|
months_duration=months_duration,
|
|
)
|
|
|
|
|
|
@to_entity
|
|
class ResumeEducation(Entity[ResumeEducationId]):
|
|
resume_id: ResumeId
|
|
place: str
|
|
grade: EducationGrade
|
|
specialization: str
|
|
description: str | None = None
|
|
|
|
@classmethod
|
|
def factory(
|
|
cls,
|
|
resume_id: ResumeId,
|
|
place: str,
|
|
grade: EducationGrade,
|
|
specialization: str,
|
|
description: str | None = None,
|
|
) -> Self:
|
|
return cls(
|
|
id=ResumeEducationId(uuid7()),
|
|
created_at=datetime.now(tz=UTC),
|
|
resume_id=resume_id,
|
|
place=place,
|
|
grade=grade,
|
|
specialization=specialization,
|
|
description=description,
|
|
)
|
|
|
|
|
|
@to_entity
|
|
class ResumeProject(Entity[ResumeProjectId]):
|
|
resume_id: ResumeId
|
|
name: str
|
|
description: str
|
|
|
|
@classmethod
|
|
def factory(
|
|
cls,
|
|
resume_id: ResumeId,
|
|
name: str,
|
|
description: str,
|
|
) -> Self:
|
|
return cls(
|
|
id=ResumeProjectId(uuid7()),
|
|
created_at=datetime.now(tz=UTC),
|
|
resume_id=resume_id,
|
|
name=name,
|
|
description=description,
|
|
)
|