Files
RekomenciBackend/src/template_project/application/resume/interactors/get.py
T
ITQ e24a3882a6 aboba
Signed-off-by: ITQ <itq.dev@ya.ru>
2025-11-22 10:58:19 +03:00

93 lines
2.9 KiB
Python

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.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.entity import ResumeId
from template_project.application.resume.errors import ResumeDoesBelongUserError
@to_data_structure
class ResumePredictionResponse:
from_salary: Decimal
to_salary: Decimal
recommended_skills: list[str]
@to_data_structure
class _Response:
id: ResumeId
position: str
about_me: str
key_skills: list[str]
experience_type: ExperienceType
prediction: ResumePredictionResponse | None
@to_interactor
class GetResumeInteractor:
identity_provider: IdentityProvider
resume_data_gateway: ResumeDataGateway
resume_prediction_data_gateway: ResumePredictionDataGateway
async def execute(
self,
resume_id: ResumeId,
) -> _Response:
user = await self.identity_provider.get_current_user()
resume = await self.resume_data_gateway.load(resume_id)
if resume.user_id != user.id:
raise ResumeDoesBelongUserError
resume_prediction = await self.resume_prediction_data_gateway.load_by_resume_id(resume.id)
if resume_prediction is not None:
prediction = ResumePredictionResponse(
from_salary=resume_prediction.from_salary,
to_salary=resume_prediction.to_salary,
recommended_skills=resume_prediction.recommended_skills,
)
else:
prediction = None
return _Response(
id=resume.id,
position=resume.position,
about_me=resume.about_me,
key_skills=resume.key_skills,
experience_type=resume.experience_type,
prediction=prediction,
)
@to_data_structure
class ResumeListItemResponse:
position: str
about_me: str
key_skills: list[str]
experience_type: ExperienceType
@to_interactor
class GetResumeListInteractor:
identity_provider: IdentityProvider
resume_data_gateway: ResumeDataGateway
async def execute(self, limit: int, offset: int) -> list[ResumeListItemResponse]:
user = await self.identity_provider.get_current_user()
resumes = await self.resume_data_gateway.list_by_user_id(user.id, limit=limit, offset=offset)
return [
ResumeListItemResponse(
position=r.position,
about_me=r.about_me,
key_skills=r.key_skills,
experience_type=r.experience_type,
)
for r in resumes
]