from typing import List, Optional from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from backend.api.deps import AuthUser, get_current_user from backend.db.session import get_session from backend.modules.jobs.schemas import JobItemOut, JobListResponse, JobOut from backend.modules.jobs.service import get_job_by_uuid, list_job_items, list_jobs from backend.modules.jobs.models import JobStatus, JobType router = APIRouter(prefix="/api/v1/jobs", tags=["jobs"]) @router.get("", response_model=JobListResponse) async def list_jobs_endpoint( status_filter: Optional[JobStatus] = None, job_type: Optional[JobType] = None, offset: int = 0, limit: int = 20, session: AsyncSession = Depends(get_session), auth_user: AuthUser = Depends(get_current_user), ) -> JobListResponse: jobs, total = await list_jobs( session, None if auth_user.role_name == "ADMIN" else auth_user.customer_id, offset, limit, status_filter=status_filter, job_type=job_type, ) return JobListResponse(items=[JobOut.model_validate(j) for j in jobs], total=total) @router.get("/{job_uuid}", response_model=JobOut) async def job_detail( job_uuid: str, session: AsyncSession = Depends(get_session), auth_user: AuthUser = Depends(get_current_user), ) -> JobOut: job = await get_job_by_uuid(session, job_uuid, None if auth_user.role_name == "ADMIN" else auth_user.customer_id) return JobOut.model_validate(job) @router.get("/{job_uuid}/items", response_model=List[JobItemOut]) async def job_items( job_uuid: str, session: AsyncSession = Depends(get_session), auth_user: AuthUser = Depends(get_current_user), ) -> List[JobItemOut]: job = await get_job_by_uuid(session, job_uuid, None if auth_user.role_name == "ADMIN" else auth_user.customer_id) items = await list_job_items(session, job.id) return [JobItemOut.model_validate(i) for i in items]