message.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime, ForeignKey, Enum
  2. from sqlalchemy.sql import func
  3. from sqlalchemy.orm import relationship
  4. import enum
  5. from app.core.database import Base
  6. class MessageType(str, enum.Enum):
  7. MESSAGE = "MESSAGE"
  8. NOTIFICATION = "NOTIFICATION"
  9. class ContentType(str, enum.Enum):
  10. TEXT = "TEXT"
  11. IMAGE = "IMAGE"
  12. VIDEO = "VIDEO"
  13. FILE = "FILE"
  14. class Message(Base):
  15. __tablename__ = "messages"
  16. id = Column(Integer, primary_key=True, index=True)
  17. sender_id = Column(Integer, ForeignKey("users.id"), nullable=True)
  18. receiver_id = Column(Integer, ForeignKey("users.id"), nullable=False, index=True)
  19. app_id = Column(Integer, ForeignKey("applications.id"), nullable=True)
  20. type = Column(Enum(MessageType), default=MessageType.MESSAGE, nullable=False)
  21. content_type = Column(Enum(ContentType), default=ContentType.TEXT, nullable=False)
  22. title = Column(String(255), nullable=False)
  23. content = Column(Text, nullable=False)
  24. action_url = Column(String(1000), nullable=True)
  25. action_text = Column(String(50), nullable=True)
  26. is_read = Column(Boolean, default=False, nullable=False)
  27. created_at = Column(DateTime(timezone=True), server_default=func.now())
  28. read_at = Column(DateTime(timezone=True), nullable=True)
  29. sender = relationship("User", foreign_keys=[sender_id], backref="sent_messages")
  30. receiver = relationship("User", foreign_keys=[receiver_id], backref="received_messages")
  31. app = relationship("Application", foreign_keys=[app_id])