from __future__ import annotations from datetime import datetime from typing import Optional from sqlalchemy import DateTime, ForeignKey, Integer, JSON, String, Text, Index from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql import func from .database import Base class Alert(Base): __tablename__ = "alerts" __table_args__ = ( Index("idx_alerts_created_at", "created_at"), Index("idx_alerts_user_id", "user_id"), Index("idx_alerts_category", "category"), Index("idx_alerts_read_at", "read_at"), ) id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) user_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("users.id", ondelete="SET NULL")) category: Mapped[str] = mapped_column(String(50), nullable=False) level: Mapped[Optional[str]] = mapped_column(String(20)) title: Mapped[Optional[str]] = mapped_column(String(255)) message: Mapped[str] = mapped_column(Text, nullable=False) source: Mapped[Optional[str]] = mapped_column(String(50)) details: Mapped[Optional[dict]] = mapped_column(JSON) read_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, server_default=func.now()) def __repr__(self) -> str: return f""