from __future__ import annotations import uuid from datetime import datetime from sqlalchemy import Boolean, DateTime, ForeignKey, UniqueConstraint, text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, TimestampMixin class UserNotification(TimestampMixin, Base): __tablename__ = "user_notifications" __table_args__ = ( UniqueConstraint( "user_id", "notification_id", name="uq_user_notifications_user_notification", ), ) id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4 ) user_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("auth.users.id", ondelete="CASCADE"), nullable=False, ) notification_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("notifications.id", ondelete="CASCADE"), nullable=False, ) is_read: Mapped[bool] = mapped_column( Boolean, nullable=False, server_default=text("false") ) read_at: Mapped[datetime | None] = mapped_column( DateTime(timezone=True), nullable=True )