from datetime import datetime from typing import TYPE_CHECKING from core_domain import ScheduledJobContract, ScheduledJobStatus, ScheduledJobType from core_shared import JSONValue from pydantic import BaseModel, Field if TYPE_CHECKING: from app.db.models import ScheduledJob class ScheduledJobCreateRequest(BaseModel): job_type: ScheduledJobType name: str description: str | None = None target_service: str | None = None target_url: str | None = None method: str | None = None payload_json: dict[str, JSONValue] = Field(default_factory=dict) schedule_time: datetime max_attempts: int = Field(default=3, ge=1, le=20) metadata_json: dict[str, JSONValue] = Field(default_factory=dict) class ScheduledJobResponse(ScheduledJobContract): @classmethod def from_entity(cls, entity: "ScheduledJob") -> "ScheduledJobResponse": return cls.model_validate(entity, from_attributes=True) class ScheduledJobStatusUpdateRequest(BaseModel): status: ScheduledJobStatus last_error_message: str | None = None class DueJobClaimRequest(BaseModel): worker_key: str lease_seconds: int = Field(default=300, ge=1, le=86400) limit: int = Field(default=50, ge=1, le=500) now_time: datetime | None = None