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
@@ -1,10 +1,16 @@
from decimal import Decimal
from template_project.application.common.data_structure import to_data_structure
from template_project.application.common.enums import ExperienceType
from template_project.application.common.enums import EducationGrade, ExperienceType
from template_project.application.common.identity_provider import IdentityProvider
from template_project.application.common.interactor import to_interactor
from template_project.application.resume.data_gateway import ResumeDataGateway, ResumePredictionDataGateway
from template_project.application.resume.data_gateway import (
ResumeDataGateway,
ResumeEducationDataGateway,
ResumeExperienceDataGateway,
ResumePredictionDataGateway,
ResumeProjectDataGateway,
)
from template_project.application.resume.entity import ResumeId
from template_project.application.resume.errors import ResumeDoesBelongUserError
@@ -17,12 +23,37 @@ class ResumePredictionResponse:
@to_data_structure
class _Response:
class ExperienceItemResponse:
place: str
description: str
months_duration: int
@to_data_structure
class EducationItemResponse:
place: str
grade: EducationGrade
specialization: str
description: str | None
@to_data_structure
class ProjectItemResponse:
name: str
description: str
@to_data_structure
class GetResumeResponse:
id: ResumeId
position: str
location: str
about_me: str
key_skills: list[str]
experience_type: ExperienceType
experience: list[ExperienceItemResponse]
education: list[EducationItemResponse]
projects: list[ProjectItemResponse]
prediction: ResumePredictionResponse | None
@@ -31,11 +62,14 @@ class GetResumeInteractor:
identity_provider: IdentityProvider
resume_data_gateway: ResumeDataGateway
resume_prediction_data_gateway: ResumePredictionDataGateway
resume_experience_data_gateway: ResumeExperienceDataGateway
resume_education_data_gateway: ResumeEducationDataGateway
resume_project_data_gateway: ResumeProjectDataGateway
async def execute(
self,
resume_id: ResumeId,
) -> _Response:
) -> GetResumeResponse:
user = await self.identity_provider.get_current_user()
resume = await self.resume_data_gateway.load(resume_id)
@@ -53,12 +87,41 @@ class GetResumeInteractor:
else:
prediction = None
return _Response(
experiences = await self.resume_experience_data_gateway.load_by_resume_id(resume.id)
educations = await self.resume_education_data_gateway.load_by_resume_id(resume.id)
projects = await self.resume_project_data_gateway.load_by_resume_id(resume.id)
return GetResumeResponse(
id=resume.id,
position=resume.position,
location=resume.location,
about_me=resume.about_me,
key_skills=resume.key_skills,
experience_type=resume.experience_type,
experience=[
ExperienceItemResponse(
place=exp.place,
description=exp.description,
months_duration=exp.months_duration,
)
for exp in experiences
],
education=[
EducationItemResponse(
place=edu.place,
grade=edu.grade,
specialization=edu.specialization,
description=edu.description,
)
for edu in educations
],
projects=[
ProjectItemResponse(
name=proj.name,
description=proj.description,
)
for proj in projects
],
prediction=prediction,
)
@@ -67,6 +130,7 @@ class GetResumeInteractor:
class ResumeListItemResponse:
id: ResumeId
position: str
location: str
about_me: str
key_skills: list[str]
experience_type: ExperienceType
@@ -86,6 +150,7 @@ class GetResumeListInteractor:
ResumeListItemResponse(
id=r.id,
position=r.position,
location=r.location,
about_me=r.about_me,
key_skills=r.key_skills,
experience_type=r.experience_type,
@@ -112,6 +177,7 @@ class GetResumeHistoryInteractor:
ResumeListItemResponse(
id=r.id,
position=r.position,
location=r.location,
about_me=r.about_me,
key_skills=r.key_skills,
experience_type=r.experience_type,