sql_models.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. class Camera(Base):
  12. __tablename__ = "cameras"
  13. id = Column(Integer, primary_key=True, index=True)
  14. name = Column(String(100))
  15. stream_url = Column(String(500))
  16. status = Column(Integer, default=0) # 0: offline, 1: online
  17. created_at = Column(DateTime, default=datetime.utcnow)
  18. class ModelConfig(Base):
  19. __tablename__ = "model_configs"
  20. id = Column(Integer, primary_key=True, index=True)
  21. name = Column(String(50))
  22. base_url = Column(String(255))
  23. api_key = Column(String(255))
  24. model_name = Column(String(100))
  25. class Task(Base):
  26. __tablename__ = "tasks"
  27. id = Column(Integer, primary_key=True, index=True)
  28. name = Column(String(100))
  29. model_config_id = Column(Integer, ForeignKey("model_configs.id"))
  30. camera_ids = Column(JSON) # [1, 5, 12]
  31. rules = Column(JSON) # List of {name, prompt}
  32. cron_expression = Column(String(50))
  33. is_running = Column(Boolean, default=False)
  34. model_config = relationship("ModelConfig")
  35. class TaskLog(Base):
  36. __tablename__ = "task_logs"
  37. id = Column(BigInteger, primary_key=True, index=True)
  38. task_id = Column(Integer, ForeignKey("tasks.id"))
  39. camera_id = Column(Integer, ForeignKey("cameras.id"))
  40. check_time = Column(DateTime, default=datetime.utcnow)
  41. snapshot_path = Column(String(255))
  42. # New fields
  43. alarm_name = Column(String(100))
  44. alarm_content = Column(Text)
  45. area = Column(String(100))
  46. is_alarm = Column(Boolean, default=False)
  47. task = relationship("Task")
  48. camera = relationship("Camera")
  49. class DutyReport(Base):
  50. __tablename__ = "duty_reports"
  51. id = Column(Integer, primary_key=True, index=True)
  52. reporter_name = Column(String(100))
  53. start_time = Column(DateTime)
  54. end_time = Column(DateTime)
  55. status = Column(String(20), default="pending") # pending, completed, failed
  56. file_path = Column(String(255), nullable=True)
  57. created_at = Column(DateTime, default=datetime.utcnow)