import uuid from datetime import datetime from sqlalchemy import DateTime, ForeignKey, String, Text from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Mapped, mapped_column, relationship from app.database import Base class Notification(Base): __tablename__ = "notifications" user_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True ) title: Mapped[str] = mapped_column(String(255), nullable=False) body: Mapped[str] = mapped_column(Text, nullable=False) type: Mapped[str] = mapped_column(String(30), nullable=False, default="info") channel: Mapped[str] = mapped_column(String(20), nullable=False, default="in_app") status: Mapped[str] = mapped_column(String(20), nullable=False, default="pending") scheduled_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) sent_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) read_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) metadata_: Mapped[dict | None] = mapped_column("metadata", JSONB, nullable=True) user: Mapped["User"] = relationship(back_populates="notifications") # noqa: F821