sql_models.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, ForeignKey, JSON, BigInteger
  2. from sqlalchemy.orm import relationship
  3. from datetime import datetime
  4. from backend.app.core.database import Base
  5. class User(Base):
  6. __tablename__ = "users"
  7. id = Column(Integer, primary_key=True, index=True)
  8. username = Column(String(50), unique=True, index=True, default="admin")
  9. hashed_password = Column(String(255))
  10. is_active = Column(Boolean, default=True)
  11. is_superuser = Column(Boolean, default=False)
  12. class Camera(Base):
  13. __tablename__ = "cameras"
  14. id = Column(Integer, primary_key=True, index=True)
  15. name = Column(String(100))
  16. stream_url = Column(String(500))
  17. status = Column(Integer, default=0) # 0: offline, 1: online
  18. created_at = Column(DateTime, default=datetime.utcnow)
  19. class ModelConfig(Base):
  20. __tablename__ = "model_configs"
  21. id = Column(Integer, primary_key=True, index=True)
  22. name = Column(String(50))
  23. base_url = Column(String(255))
  24. api_key = Column(String(255))
  25. model_name = Column(String(100))
  26. class Task(Base):
  27. __tablename__ = "tasks"
  28. id = Column(Integer, primary_key=True, index=True)
  29. name = Column(String(100))
  30. model_config_id = Column(Integer, ForeignKey("model_configs.id"))
  31. camera_ids = Column(JSON) # [1, 5, 12]
  32. rules = Column(JSON) # List of {name, prompt}
  33. cron_expression = Column(String(50))
  34. is_running = Column(Boolean, default=False)
  35. model_config = relationship("ModelConfig")
  36. class TaskLog(Base):
  37. __tablename__ = "task_logs"
  38. id = Column(BigInteger, primary_key=True, index=True)
  39. task_id = Column(Integer, ForeignKey("tasks.id"))
  40. camera_id = Column(Integer, ForeignKey("cameras.id"))
  41. check_time = Column(DateTime, default=datetime.utcnow)
  42. snapshot_path = Column(String(255))
  43. # New fields
  44. alarm_name = Column(String(100))
  45. alarm_content = Column(Text)
  46. area = Column(String(100))
  47. is_alarm = Column(Boolean, default=False)
  48. task = relationship("Task")
  49. camera = relationship("Camera")
  50. class DutyReport(Base):
  51. __tablename__ = "duty_reports"
  52. id = Column(Integer, primary_key=True, index=True)
  53. reporter_name = Column(String(100))
  54. start_time = Column(DateTime)
  55. end_time = Column(DateTime)
  56. status = Column(String(20), default="pending") # pending, completed, failed
  57. file_path = Column(String(255), nullable=True)
  58. created_at = Column(DateTime, default=datetime.utcnow)