from datetime import datetime from typing import Literal from pydantic import AliasChoices, BaseModel, ConfigDict, Field class CreateTaskRequest(BaseModel): platform: Literal["xiaohongshu", "douyin"] hotspot_limit: int = Field(default=5, ge=1, le=10) item_limit_per_hotspot: int = Field( default=5, ge=1, le=10, validation_alias=AliasChoices("item_limit_per_hotspot", "item_limit"), ) comment_limit_per_item: int = Field(default=50, ge=10, le=100) class TaskResponse(BaseModel): model_config = ConfigDict(from_attributes=True) task_id: str = Field(validation_alias="id", serialization_alias="task_id") platform: str status: str analysis_status: str analysis_success_rate: float hotspot_limit: int item_limit_per_hotspot: int comment_limit_per_item: int total_items_count: int processed_items_count: int successful_items_count: int failed_items_count: int current_stage: str | None = None current_stage_label: str | None = None last_progress_at: datetime | None = None comments_count: int = 0 reports_count: int = 0 is_demo: bool = False error_message: str | None created_at: datetime class CreateTaskResponse(BaseModel): task_id: str status: str