models.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # backend/app/models.py
  2. from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime, ForeignKey
  3. from sqlalchemy.orm import relationship
  4. from sqlalchemy.sql import func
  5. from .database import Base
  6. class Category(Base):
  7. __tablename__ = "categories"
  8. id = Column(Integer, primary_key=True, index=True)
  9. name = Column(String(100), unique=True, nullable=False, index=True)
  10. description = Column(Text, nullable=True)
  11. color = Column(String(20), nullable=True, default="#3498DB")
  12. icon = Column(String(50), nullable=True, default="el-icon-DataBoard")
  13. created_at = Column(DateTime, default=func.now())
  14. spiders = relationship("Spider", back_populates="category", cascade="all, delete-orphan")
  15. class Spider(Base):
  16. __tablename__ = "spiders"
  17. id = Column(Integer, primary_key=True, index=True)
  18. name = Column(String(100), nullable=False, index=True)
  19. description = Column(Text, nullable=True)
  20. filename = Column(String(255), nullable=False)
  21. file_path = Column(String(500), nullable=False)
  22. code_content = Column(Text, nullable=True)
  23. cron_expression = Column(String(50), nullable=False, default="0 0 * * *")
  24. enabled = Column(Boolean, default=True)
  25. timeout = Column(Integer, default=300)
  26. created_at = Column(DateTime, default=func.now())
  27. category_id = Column(Integer, ForeignKey("categories.id"), nullable=False)
  28. category = relationship("Category", back_populates="spiders")
  29. executions = relationship("TaskExecutionLog", back_populates="spider")
  30. class TaskExecutionLog(Base):
  31. __tablename__ = "task_execution_logs"
  32. id = Column(Integer, primary_key=True, index=True)
  33. spider_id = Column(Integer, ForeignKey("spiders.id"), nullable=False)
  34. status = Column(String(20), nullable=False)
  35. started_at = Column(DateTime, default=func.now())
  36. finished_at = Column(DateTime, nullable=True)
  37. log_content = Column(Text, nullable=True)
  38. trigger_method = Column(String(20), nullable=False)
  39. spider = relationship("Spider", back_populates="executions")