Files
RekomenciBackend/src/template_project/application/resume/entity.py
T
2025-11-22 17:30:46 +03:00

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,
)