feat(chat): 单向聊天可二次激活 单向聊天可二次激活,未删除方聊天消息保留,双向删除后记录清空

This commit is contained in:
xingc
2025-05-16 23:20:02 +08:00
parent 2bbb39529b
commit 72dec3b757
5 changed files with 117 additions and 47 deletions

View File

@@ -99,7 +99,7 @@ class User(BaseModel, DateModel):
)
chats: Mapped[List['Chat']] = relationship(secondary='system_chat_participant', back_populates='users')
messages: Mapped[List['Message']] = relationship(back_populates='user')
read_statuses: Mapped[List['ReadStatus']] = relationship(back_populates='user')
chat_participants: Mapped[List['ChatParticipant']] = relationship(back_populates='user')
def __str__(self):
return f'{self.user_id}'
@@ -264,7 +264,7 @@ class Chat(BaseModel, DateModel):
users: Mapped[List['User']] = relationship(secondary='system_chat_participant', back_populates='chats')
messages: Mapped[List['Message']] = relationship(back_populates='chat', cascade='all,delete')
is_deleted: Mapped[bool] = mapped_column(Boolean, default=False)
read_statuses: Mapped[List['ReadStatus']] = relationship(back_populates='chat', cascade='all,delete')
chat_participants: Mapped[List['ChatParticipant']] = relationship(back_populates='chat', cascade='all,delete')
class Message(BaseModel, DateModel):
@@ -292,25 +292,6 @@ class Message(BaseModel, DateModel):
return f'{self.content}'
class ReadStatus(BaseModel, DateModel):
__tablename__ = 'system_read_status'
__table_args__ = (
Index('idx_read_status_on_chat_id', 'chat_id'),
Index('idx_read_status_on_user_id', 'user_id'),
{'comment': '聊天消息读取状态表'}
)
last_read_message_id: Mapped[int] = mapped_column(nullable=True)
user_id: Mapped[int] = mapped_column(ForeignKey('system_users.user_id'))
chat_id: Mapped[int] = mapped_column(ForeignKey('system_chats.id'))
chat: Mapped['Chat'] = relationship(back_populates='read_statuses')
user: Mapped['User'] = relationship(back_populates='read_statuses')
def __str__(self):
return f'User: {self.user_id}, Message: {self.last_read_message_id}'
class PointsTransaction(BaseModel, DateModel):
__tablename__ = 'system_points_transaction'
__table_args__ = (
@@ -335,3 +316,8 @@ class ChatParticipant(BaseModel):
user_id: Mapped[int] = mapped_column(Integer, ForeignKey('system_users.user_id'), primary_key=True)
chat_id: Mapped[int] = mapped_column(Integer, ForeignKey('system_chats.id'), primary_key=True)
is_deleted: Mapped[bool] = mapped_column(Boolean, default=False)
last_read_message_id: Mapped[int] = mapped_column(default=0, nullable=True)
last_del_message_id: Mapped[int] = mapped_column(default=0, nullable=True)
chat: Mapped['Chat'] = relationship(back_populates='chat_participants')
user: Mapped['User'] = relationship(back_populates='chat_participants')