# services/alert_processor/app/models/alerts.py """ Alert models for the alert processor service """ from sqlalchemy import Column, String, Text, DateTime, JSON, Enum from sqlalchemy.dialects.postgresql import UUID from datetime import datetime import uuid import enum from shared.database.base import Base class AlertStatus(enum.Enum): """Alert status values""" ACTIVE = "active" RESOLVED = "resolved" ACKNOWLEDGED = "acknowledged" IGNORED = "ignored" class AlertSeverity(enum.Enum): """Alert severity levels""" LOW = "low" MEDIUM = "medium" HIGH = "high" URGENT = "urgent" class Alert(Base): """Alert records for the alert processor service""" __tablename__ = "alerts" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) tenant_id = Column(UUID(as_uuid=True), nullable=False, index=True) # Alert classification item_type = Column(String(50), nullable=False) # 'alert' or 'recommendation' alert_type = Column(String(100), nullable=False) # e.g., 'overstock_warning' severity = Column(Enum(AlertSeverity), nullable=False, index=True) status = Column(Enum(AlertStatus), default=AlertStatus.ACTIVE, index=True) # Source and content service = Column(String(100), nullable=False) # originating service title = Column(String(255), nullable=False) message = Column(Text, nullable=False) # Actions and metadata actions = Column(JSON, nullable=True) # List of available actions alert_metadata = Column(JSON, nullable=True) # Additional alert-specific data # Timestamps created_at = Column(DateTime, default=datetime.utcnow, index=True) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) resolved_at = Column(DateTime, nullable=True)