from __future__ import annotations import uuid from datetime import datetime from sqlalchemy import DateTime, Enum, ForeignKey, Integer, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.db.base import Base, TimestampMixin, UUIDPrimaryKeyMixin from app.models.enums import NotificationDeliveryStatus class NotificationDelivery(Base, UUIDPrimaryKeyMixin, TimestampMixin): __tablename__ = "notification_deliveries" alert_id: Mapped[uuid.UUID] = mapped_column( ForeignKey("alerts.id", ondelete="CASCADE"), index=True ) destination_id: Mapped[uuid.UUID] = mapped_column( ForeignKey("notification_destinations.id", ondelete="CASCADE"), index=True ) provider: Mapped[str] = mapped_column(String(50)) status: Mapped[NotificationDeliveryStatus] = mapped_column( Enum(NotificationDeliveryStatus, native_enum=False, length=20), default=NotificationDeliveryStatus.PENDING, ) attempt_count: Mapped[int] = mapped_column(Integer, default=0) last_attempt: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) external_message_id: Mapped[str | None] = mapped_column(String(255), nullable=True) error_message: Mapped[str | None] = mapped_column(Text, nullable=True)