feat: добавлен P2P чат между пользователями
- Новая модель P2PMessage для хранения личных сообщений - Миграция 008_add_p2p_messages.py - Сервис P2PMessageService для работы с P2P сообщениями - Команда /chat с меню чата - Выбор пользователя из списка - Отправка текста, фото, видео, документов - История последних диалогов - Счетчик непрочитанных сообщений - FSM состояния для управления диалогами
This commit is contained in:
@@ -215,4 +215,30 @@ class ChatMessage(Base):
|
||||
moderator = relationship("User", foreign_keys=[deleted_by])
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ChatMessage(id={self.id}, user_id={self.user_id}, type={self.message_type})>"
|
||||
return f"<ChatMessage(id={self.id}, user_id={self.user_id}, type={self.message_type})>"
|
||||
|
||||
|
||||
class P2PMessage(Base):
|
||||
"""P2P сообщения между пользователями"""
|
||||
__tablename__ = "p2p_messages"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
sender_id = Column(Integer, ForeignKey("users.id"), nullable=False, index=True)
|
||||
recipient_id = Column(Integer, ForeignKey("users.id"), nullable=False, index=True)
|
||||
message_type = Column(String(20), nullable=False) # text, photo, video, etc.
|
||||
text = Column(Text, nullable=True)
|
||||
file_id = Column(String(255), nullable=True)
|
||||
sender_message_id = Column(Integer, nullable=False) # ID сообщения у отправителя
|
||||
recipient_message_id = Column(Integer, nullable=True) # ID сообщения у получателя
|
||||
is_read = Column(Boolean, default=False, index=True)
|
||||
read_at = Column(DateTime(timezone=True), nullable=True)
|
||||
reply_to_id = Column(Integer, ForeignKey("p2p_messages.id"), nullable=True) # Ответ на сообщение
|
||||
created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), index=True)
|
||||
|
||||
# Связи
|
||||
sender = relationship("User", foreign_keys=[sender_id], backref="sent_p2p_messages")
|
||||
recipient = relationship("User", foreign_keys=[recipient_id], backref="received_p2p_messages")
|
||||
reply_to = relationship("P2PMessage", remote_side=[id], backref="replies")
|
||||
|
||||
def __repr__(self):
|
||||
return f"<P2PMessage(id={self.id}, from={self.sender_id}, to={self.recipient_id})>"
|
||||
Reference in New Issue
Block a user