| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- from datetime import datetime
- from typing import TYPE_CHECKING
- from pydantic import BaseModel, Field
- from core_domain import ScheduledJobContract, ScheduledJobStatus, ScheduledJobType
- from core_shared import JSONValue
- if TYPE_CHECKING:
- from app.db.models import ScheduledJob
- class ScheduledJobCreateRequest(BaseModel):
- tenant_id: str
- 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):
- tenant_id: str
- status: ScheduledJobStatus
- last_error_message: str | None = None
- class DueJobClaimRequest(BaseModel):
- tenant_id: str
- 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
|