from datetime import datetime, timezone from sqlalchemy import Integer, String, Boolean, DateTime, Text from sqlalchemy.orm import mapped_column, Mapped from app.database import Base class WebhookConfig(Base): __tablename__ = "webhook_configs" id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True) name: Mapped[str] = mapped_column(String(255), nullable=False) # generic | dingtalk type: Mapped[str] = mapped_column(String(32), default="generic") url: Mapped[str] = mapped_column(String(1024), nullable=False) secret: Mapped[str] = mapped_column(String(512), default="") enabled: Mapped[bool] = mapped_column(Boolean, default=True) # JSON array: ["upstream_rate_changed","website_rate_changed","upstream_unhealthy","upstream_recovered"] events_json: Mapped[str] = mapped_column(Text, default='["upstream_rate_changed"]') created_at: Mapped[datetime] = mapped_column(DateTime, default=lambda: datetime.now(timezone.utc)) updated_at: Mapped[datetime] = mapped_column( DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc) )