from datetime import datetime from sqlalchemy import Column, Integer, String, DateTime, Text, Enum as SQLEnum from app.core.enums import AlertSeverity, AlertStatus from app.core.time import to_iso8601_utc from app.db.session import Base class Alert(Base): __tablename__ = "alerts" id = Column(Integer, primary_key=True, index=True) severity = Column(SQLEnum(AlertSeverity), default=AlertSeverity.WARNING) status = Column(SQLEnum(AlertStatus), default=AlertStatus.ACTIVE) datasource_id = Column(Integer, nullable=True, index=True) datasource_name = Column(String(255), nullable=True) message = Column(Text) alert_metadata = Column(Text, nullable=True) acknowledged_by = Column(Integer, nullable=True) resolved_by = Column(Integer, nullable=True) resolution_notes = Column(Text, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) acknowledged_at = Column(DateTime, nullable=True) resolved_at = Column(DateTime, nullable=True) def to_dict(self): return { "id": self.id, "severity": self.severity.value if self.severity else None, "status": self.status.value if self.status else None, "datasource_id": self.datasource_id, "datasource_name": self.datasource_name, "message": self.message, "alert_metadata": self.alert_metadata, "acknowledged_by": self.acknowledged_by, "resolved_by": self.resolved_by, "resolution_notes": self.resolution_notes, "created_at": to_iso8601_utc(self.created_at), "updated_at": to_iso8601_utc(self.updated_at), "acknowledged_at": to_iso8601_utc(self.acknowledged_at), "resolved_at": to_iso8601_utc(self.resolved_at), }