feat(): update resume contracts

This commit is contained in:
gitgernit
2025-11-22 17:30:46 +03:00
parent 995141a200
commit 2963460b1c
16 changed files with 847 additions and 64 deletions
@@ -6,19 +6,22 @@ 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 ExperienceType
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
location: str
about_me: str
key_skills: list[str]
experience_type: ExperienceType
@@ -30,6 +33,7 @@ class Resume(Entity[ResumeId]):
cls,
user_id: UserId,
position: str,
location: str,
about_me: str,
key_skills: list[str],
experience_type: ExperienceType,
@@ -41,6 +45,7 @@ class Resume(Entity[ResumeId]):
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,
@@ -74,4 +79,78 @@ class ResumePrediction(Entity[ResumePredictionId]):
from_salary: Decimal
to_salary: Decimal
recommended_skills: list[str]
# common_recommended: str # TODO
@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,
)