59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
from typing import Annotated
|
|
|
|
from fastapi import Depends
|
|
|
|
from app.models.vacancy import Vacancy, VacancyCreate, VacancyUpdate
|
|
from app.repositories.vacancy_repository import VacancyRepository
|
|
|
|
|
|
class VacancyService:
|
|
def __init__(
|
|
self, repository: Annotated[VacancyRepository, Depends(VacancyRepository)]
|
|
):
|
|
self.repository = repository
|
|
|
|
async def create_vacancy(self, vacancy_data: VacancyCreate) -> Vacancy:
|
|
vacancy = Vacancy.model_validate(vacancy_data)
|
|
return await self.repository.create(vacancy)
|
|
|
|
async def get_vacancy(self, vacancy_id: int) -> Vacancy | None:
|
|
return await self.repository.get(vacancy_id)
|
|
|
|
async def get_all_vacancies(self, skip: int = 0, limit: int = 100) -> list[Vacancy]:
|
|
return await self.repository.get_all(skip=skip, limit=limit)
|
|
|
|
async def get_active_vacancies(
|
|
self, skip: int = 0, limit: int = 100
|
|
) -> list[Vacancy]:
|
|
return await self.repository.get_active_vacancies(skip=skip, limit=limit)
|
|
|
|
async def update_vacancy(
|
|
self, vacancy_id: int, vacancy_data: VacancyUpdate
|
|
) -> Vacancy | None:
|
|
update_data = vacancy_data.model_dump(exclude_unset=True)
|
|
if not update_data:
|
|
return await self.repository.get(vacancy_id)
|
|
return await self.repository.update(vacancy_id, update_data)
|
|
|
|
async def delete_vacancy(self, vacancy_id: int) -> bool:
|
|
return await self.repository.delete(vacancy_id)
|
|
|
|
async def archive_vacancy(self, vacancy_id: int) -> Vacancy | None:
|
|
return await self.repository.update(vacancy_id, {"is_archived": True})
|
|
|
|
async def search_vacancies(
|
|
self,
|
|
title: str | None = None,
|
|
company_name: str | None = None,
|
|
area_name: str | None = None,
|
|
skip: int = 0,
|
|
limit: int = 100,
|
|
) -> list[Vacancy]:
|
|
return await self.repository.search_vacancies(
|
|
title=title,
|
|
company_name=company_name,
|
|
area_name=area_name,
|
|
skip=skip,
|
|
limit=limit,
|
|
)
|