from pydantic import BaseModel from datetime import datetime from typing import Optional, List class JobCreate(BaseModel): name: str source: str species_ids: Optional[List[int]] = None # None means all species only_without_images: bool = False # If True, only scrape species with 0 images max_images: Optional[int] = None # If set, only scrape species with fewer than N images class JobResponse(BaseModel): id: int name: str source: str species_filter: Optional[str] = None status: str progress_current: int progress_total: int images_downloaded: int images_rejected: int started_at: Optional[datetime] = None completed_at: Optional[datetime] = None error_message: Optional[str] = None created_at: datetime class Config: from_attributes = True class JobListResponse(BaseModel): items: List[JobResponse] total: int