from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text from sqlalchemy.sql import func from app.core.database import Base class NotificationConfig(Base): """通知渠道配置(当前支持飞书机器人)。 使用单行记录(id=1)存储,便于 Web 界面读写和热更新。 """ __tablename__ = "notification_config" id = Column(Integer, primary_key=True) # 飞书 feishu_enabled = Column(Boolean, default=False) # 总开关 feishu_webhook_url = Column(String(500), default="") # 机器人 webhook 地址 feishu_secret = Column(String(255), default="") # 签名校验密钥(可选) feishu_min_severity = Column(String(20), default="warning") # 最低告警级别 feishu_alert_types = Column(Text, default="") # 逗号分隔的类型白名单,空=全部 updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) @classmethod def get_singleton(cls, db): """获取或创建单行配置""" row = db.query(cls).filter(cls.id == 1).first() if row is None: row = cls(id=1) db.add(row) db.commit() db.refresh(row) return row