schemas.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # backend/app/schemas.py
  2. from pydantic import BaseModel
  3. from typing import Optional, List
  4. from datetime import datetime
  5. class CategoryBase(BaseModel):
  6. name: str
  7. description: Optional[str] = None
  8. color: Optional[str] = "#3498DB"
  9. icon: Optional[str] = "el-icon-DataBoard"
  10. class CategoryCreate(CategoryBase):
  11. pass
  12. class CategoryUpdate(CategoryBase):
  13. name: Optional[str] = None
  14. class Category(CategoryBase):
  15. id: int
  16. created_at: datetime
  17. spider_count: Optional[int] = 0
  18. class Config:
  19. from_attributes = True
  20. class SpiderBase(BaseModel):
  21. name: str
  22. description: Optional[str] = None
  23. cron_expression: str = "0 0 * * *"
  24. enabled: bool = True
  25. timeout: int = 300
  26. category_id: int
  27. class SpiderCreate(SpiderBase):
  28. code_content: Optional[str] = None
  29. class SpiderUpdate(BaseModel):
  30. name: Optional[str] = None
  31. description: Optional[str] = None
  32. cron_expression: Optional[str] = None
  33. enabled: Optional[bool] = None
  34. timeout: Optional[int] = None
  35. category_id: Optional[int] = None
  36. code_content: Optional[str] = None
  37. class Spider(SpiderBase):
  38. id: int
  39. filename: str
  40. file_path: str
  41. created_at: datetime
  42. category: Optional[Category] = None
  43. class Config:
  44. from_attributes = True
  45. class TaskExecutionLogBase(BaseModel):
  46. status: str
  47. trigger_method: str
  48. class TaskExecutionLogCreate(TaskExecutionLogBase):
  49. spider_id: int
  50. class TaskExecutionLog(TaskExecutionLogBase):
  51. id: int
  52. spider_id: int
  53. started_at: datetime
  54. finished_at: Optional[datetime]
  55. log_content: Optional[str]
  56. spider: Optional[Spider] = None
  57. class Config:
  58. from_attributes = True
  59. class ListResponse(BaseModel):
  60. total: int
  61. items: List
  62. class SuccessResponse(BaseModel):
  63. success: bool
  64. message: str