54 lines
1.9 KiB
Python
Raw Normal View History

2025-12-10 12:02:17 +08:00
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]