feat: Implement API endpoints for jobs

This commit is contained in:
2026-06-29 15:12:30 +05:30
parent fa48a39277
commit 0b20fd3263
6 changed files with 79 additions and 17 deletions

View File

@@ -6,3 +6,63 @@ from app.schemas.job import JobResponse, JobStatusResponse, JobResultResponse
from app.services.job_service import JobService
router = APIRouter(prefix="/jobs", tags=["jobs"])
@router.post("/upload", response_model=JobResponse, status_code=status.HTTP_201_CREATED)
async def upload_csv(
file: UploadFile = File(...),
service: JobService = Depends(get_job_service),
):
if not file.filename.endswith(".csv"):
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Only CSV files are supported.",
)
content = await file.read()
try:
job = await service.upload_csv(filename=file.filename, content=content)
return job
except InvalidCSVException as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=str(e),
)
@router.get("/{job_id}/status", response_model=JobStatusResponse)
async def get_job_status(
job_id: str,
service: JobService = Depends(get_job_service),
):
try:
job = await service.get_job_status(job_id)
return job
except JobNotFoundException as e:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=str(e),
)
@router.get("/{job_id}/results", response_model=JobResultResponse)
async def get_job_result(
job_id: str,
service: JobService = Depends(get_job_service),
):
try:
job = await service.get_job_results(job_id)
return job
except JobNotFoundException as e:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=str(e),
)
@router.get("", response_model=List[JobResponse])
async def get_all_jobs(
status: Optional[str] = Query(None, description="Filter jobs by status"),
service: JobService = Depends(get_job_service),
):
return await service.list_jobs(status=status)

View File

@@ -1,4 +1,3 @@
from typing import Any
from pydantic import Field, computed_field
from pydantic_settings import BaseSettings, SettingsConfigDict

View File

@@ -1,4 +1,4 @@
from typing import List, Optional, Any, Dict
from typing import List, Optional
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.db.models.job import Job

View File

@@ -1,5 +1,5 @@
from datetime import datetime
from typing import Any, Dict, List, Optional
from typing import Any, Dict, Optional
from pydantic import BaseModel, ConfigDict