54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
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]
|