用于删除消息的聊天模式设计

Chat schema Design for deleting messages

我正在为约会应用程序制作聊天服务,我需要为其设计架构。我的堆栈是平均的。使用 socket.js 进行实时通信。我必须像 whatsapp 一样设计我的聊天应用程序。就像我需要 whatsapp 临时(一侧删除)和永久删除(两侧删除,然后它也会从内存中删除)。问题是我应该如何实现这个?

因为我的应用程序始终是一对一的聊天。我在想使用键“操作”作为删除功能,默认为空。

如果一个用户(假设 user1)从其一侧删除一条消息,那么我会将其标记为“DELETED/user1”。然后在获取消息时。我不会将此消息发送给该用户。 如果该消息也被其他用户删除或像 uuser1 的 whatsapp 一样被删除为“DELETE FOR ALL”,那么我将把字段标记为“DELETED/ALL”。

我的另一个想法是维护 2 个真相来源。 比如为每个用户维护两条相同对话的记录。

如果用户 1 删除,那么它将从用户 1 的对话中删除消息。

如果用户2删除,那么它会从用户2的对话中删除消息。

如果用户 1 删除为“DELETE FOR ALL”,那么它将从两个对话中删除消息。 这种方法的问题是,将来我必须执行两次操作,比如喜欢味精、编辑味精等

你对这个问题有什么建议?

提前致谢!

由于您的聊天是1 on 1而不是群聊,因此建议在这种情况下使用多字段

如果用户 1 是 from 并且他删除了消息,则数据会像

fromDelete: true
toDelete: false

如果用户 2 是 to 并且他删除了消息,则数据会像

fromDelete: false
toDelete: true

如果用户 1 是 to 并且他删除了 所有 条消息,数据将是

fromDelete: true
toDelete: true

这样,您可以更轻松地修改查询数据。

以后如果要加edit或者like

也可以用这个方法