from pydantic import BaseModel class TaskCreateRequest(BaseModel): title: str category: str = "" sub_category: str = "" description: str = "" tags: str = "" mode: str = "grab" budget_min: int = 0 budget_max: int = 0 deadline: str = "" task_code: str = "" display_priority: int = 0 publisher_name: str = "" class TaskUpdateRequest(BaseModel): title: str | None = None category: str | None = None sub_category: str | None = None description: str | None = None tags: str | None = None mode: str | None = None budget_min: int | None = None budget_max: int | None = None deadline: str | None = None task_code: str | None = None display_priority: int | None = None publisher_name: str | None = None class TaskStatusRequest(BaseModel): status: str # review/published/completed/cancelled/claimed/doing class ProviderCreateRequest(BaseModel): name: str category: str = "" level: str = "certified" status: str = "pending" contact: str = "" class ProviderUpdateRequest(BaseModel): level: str | None = None status: str | None = None contact: str | None = None class ContentCreateRequest(BaseModel): type: str = "news" title: str summary: str = "" body: str = "" status: str = "draft" class ContentStatusRequest(BaseModel): status: str # published/offline/draft class ConfigUpdateRequest(BaseModel): value: str description: str = "" # ── 任务管理 ────────────────────────────────────────────────────────────── # ── 算力对接(compute-engine)───────────────────────────────────────────── # ── 培训业务四件套(课程 / 活动 / 报名 / 测评)→ 桥接 app.training ───────── class CourseCreateRequest(BaseModel): title: str category: str = "" level: str = "" subtitle: str = "" desc: str = "" price: float = 0 status: str = "draft" start_at: str = "" end_at: str = "" venue: str = "" quota: int = 0 image: str = "" host: str = "" class CourseStatusRequest(BaseModel): status: str # draft/published/ended/offline class ActivityCreateRequest(BaseModel): title: str type: str | None = None # free/salon mode: str | None = None # online/offline status: str | None = None # open/invite/pending/done/ended subtitle: str | None = None desc: str | None = None location: str | None = None host: str | None = None image: str | None = None link: str | None = None start_at: str | None = None duration_min: int | None = None capacity: int | None = None class ActivityStatusRequest(BaseModel): status: str # open/invite/pending/done/ended class BookingUpdateRequest(BaseModel): status: str | None = None audit_status: str | None = None note: str | None = None class TestCreateRequest(BaseModel): title: str category: str = "" pass_score: int = 0 question_count: int = 30 class TestStatusRequest(BaseModel): status: str # enabled/disabled class ComputePingResponse(BaseModel): ok: bool version: str | None = None detail: str | None = None class ComputeProvisionRequest(BaseModel): user_id: str class ComputeProvisionResponse(BaseModel): engine_user_id: str | None = None engine_username: str | None = None pat: str | None = None created: bool = False detail: str | None = None