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)