54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import uuid
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from cpv3.modules.jobs.models import Job, JobEvent
|
|
from cpv3.modules.jobs.repository import JobEventRepository, JobRepository
|
|
from cpv3.modules.jobs.schemas import (
|
|
JobCreate,
|
|
JobEventCreate,
|
|
JobEventUpdate,
|
|
JobUpdate,
|
|
)
|
|
from cpv3.modules.users.models import User
|
|
|
|
|
|
class JobService:
|
|
"""Service for job business logic and orchestration."""
|
|
|
|
def __init__(self, session: AsyncSession) -> None:
|
|
self._job_repo = JobRepository(session)
|
|
self._event_repo = JobEventRepository(session)
|
|
|
|
async def list_jobs(self, *, requester: User) -> list[Job]:
|
|
return await self._job_repo.list_all(requester=requester)
|
|
|
|
async def get_job(self, job_id: uuid.UUID) -> Job | None:
|
|
return await self._job_repo.get_by_id(job_id)
|
|
|
|
async def create_job(self, *, requester: User, data: JobCreate) -> Job:
|
|
return await self._job_repo.create(requester=requester, data=data)
|
|
|
|
async def update_job(self, job: Job, data: JobUpdate) -> Job:
|
|
return await self._job_repo.update(job, data)
|
|
|
|
async def deactivate_job(self, job: Job) -> None:
|
|
await self._job_repo.deactivate(job)
|
|
|
|
async def list_job_events(self) -> list[JobEvent]:
|
|
return await self._event_repo.list_all()
|
|
|
|
async def get_job_event(self, event_id: uuid.UUID) -> JobEvent | None:
|
|
return await self._event_repo.get_by_id(event_id)
|
|
|
|
async def create_job_event(self, data: JobEventCreate) -> JobEvent:
|
|
return await self._event_repo.create(data)
|
|
|
|
async def update_job_event(self, event: JobEvent, data: JobEventUpdate) -> JobEvent:
|
|
return await self._event_repo.update(event, data)
|
|
|
|
async def deactivate_job_event(self, event: JobEvent) -> None:
|
|
await self._event_repo.deactivate(event)
|