# backend/app/schemas.py from pydantic import BaseModel from typing import Optional, List from datetime import datetime class CategoryBase(BaseModel): name: str description: Optional[str] = None color: Optional[str] = "#3498DB" icon: Optional[str] = "el-icon-DataBoard" class CategoryCreate(CategoryBase): pass class CategoryUpdate(CategoryBase): name: Optional[str] = None class Category(CategoryBase): id: int created_at: datetime spider_count: Optional[int] = 0 class Config: from_attributes = True class SpiderBase(BaseModel): name: str description: Optional[str] = None cron_expression: str = "0 0 * * *" enabled: bool = True timeout: int = 300 category_id: int class SpiderCreate(SpiderBase): code_content: Optional[str] = None class SpiderUpdate(BaseModel): name: Optional[str] = None description: Optional[str] = None cron_expression: Optional[str] = None enabled: Optional[bool] = None timeout: Optional[int] = None category_id: Optional[int] = None code_content: Optional[str] = None class Spider(SpiderBase): id: int filename: str file_path: str created_at: datetime category: Optional[Category] = None class Config: from_attributes = True class TaskExecutionLogBase(BaseModel): status: str trigger_method: str class TaskExecutionLogCreate(TaskExecutionLogBase): spider_id: int class TaskExecutionLog(TaskExecutionLogBase): id: int spider_id: int started_at: datetime finished_at: Optional[datetime] log_content: Optional[str] spider: Optional[Spider] = None class Config: from_attributes = True class ListResponse(BaseModel): total: int items: List class SuccessResponse(BaseModel): success: bool message: str