63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
from typing import Annotated
|
||
|
||
from fastapi import Depends
|
||
from sqlalchemy import select
|
||
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
||
from app.core.database import get_session
|
||
from app.models.resume import Resume, ResumeStatus
|
||
|
||
from .base_repository import BaseRepository
|
||
|
||
|
||
class ResumeRepository(BaseRepository[Resume]):
|
||
def __init__(self, session: Annotated[AsyncSession, Depends(get_session)]):
|
||
super().__init__(Resume, session)
|
||
|
||
async def get_by_vacancy_id(self, vacancy_id: int) -> list[Resume]:
|
||
statement = select(Resume).where(Resume.vacancy_id == vacancy_id)
|
||
result = await self._session.execute(statement)
|
||
return result.scalars().all()
|
||
|
||
async def get_by_status(self, status: ResumeStatus) -> list[Resume]:
|
||
statement = select(Resume).where(Resume.status == status)
|
||
result = await self._session.execute(statement)
|
||
return result.scalars().all()
|
||
|
||
async def get_by_id(self, resume_id: int) -> Resume | None:
|
||
"""Получить резюме по ID"""
|
||
return await self.get(resume_id)
|
||
|
||
async def create_with_session(self, resume_dict: dict, session_id: int) -> Resume:
|
||
"""Создать резюме с привязкой к сессии"""
|
||
resume_dict["session_id"] = session_id
|
||
return await self.create(resume_dict)
|
||
|
||
async def get_by_session_id(self, session_id: int) -> list[Resume]:
|
||
"""Получить резюме по session_id"""
|
||
statement = select(Resume).where(Resume.session_id == session_id)
|
||
result = await self._session.execute(statement)
|
||
return result.scalars().all()
|
||
|
||
async def get_by_vacancy_and_session(
|
||
self, vacancy_id: int, session_id: int
|
||
) -> list[Resume]:
|
||
"""Получить резюме по vacancy_id и session_id"""
|
||
statement = select(Resume).where(
|
||
Resume.vacancy_id == vacancy_id, Resume.session_id == session_id
|
||
)
|
||
result = await self._session.execute(statement)
|
||
return result.scalars().all()
|
||
|
||
async def update_status(
|
||
self, resume_id: int, status: ResumeStatus
|
||
) -> Resume | None:
|
||
"""Обновить статус резюме"""
|
||
return await self.update(resume_id, {"status": status})
|
||
|
||
async def add_interview_report(
|
||
self, resume_id: int, report_url: str
|
||
) -> Resume | None:
|
||
"""Добавить ссылку на отчет интервью"""
|
||
return await self.update(resume_id, {"interview_report_url": report_url})
|