from sqlalchemy import Column, Integer, String, DateTime, Boolean, Text, ForeignKey, Enum from sqlalchemy.orm import relationship from sqlalchemy.sql import func from enum import Enum as PyEnum from app.db.base import Base class NotificationType(PyEnum): MESSAGE = "message" MENTION = "mention" GROUP_INVITE = "group_invite" GROUP_JOIN = "group_join" GROUP_LEAVE = "group_leave" class Notification(Base): __tablename__ = "notifications" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=False) chat_id = Column(Integer, ForeignKey("chats.id"), nullable=True) message_id = Column(Integer, ForeignKey("messages.id"), nullable=True) notification_type = Column(Enum(NotificationType), nullable=False) title = Column(String, nullable=False) body = Column(Text, nullable=False) data = Column(Text, nullable=True) # JSON data for additional info is_read = Column(Boolean, default=False) is_sent = Column(Boolean, default=False) # Push notification sent created_at = Column(DateTime(timezone=True), server_default=func.now()) read_at = Column(DateTime(timezone=True), nullable=True) # Relationships user = relationship("User") chat = relationship("Chat") message = relationship("Message")