javascript - 用于聊天应用或私人的 Firebase 数据结构
问题描述
目前我正在开发一个需要添加聊天功能的网络应用程序。一个用户发布他的产品,另一个有兴趣的用户可以和卖家聊天,留下或了解更多关于产品的细节。
我卡在聊天植入上,找不到适合需要的数据结构。我的需要是;假设约翰是卖家并发布他的手机进行销售。查尔斯对约翰的电话很感兴趣,他想知道更多的细节,所以开始和约翰聊天。他们在聊天之前并不认识对方,不像 WhatsApp。用户在发送消息之前认识另一个用户的位置。约翰本可以发布这么多产品,查尔斯可能会对他的不同产品感兴趣,因为每个产品都会创建一个新的对话(聊天)。
我想要这样,如果 john 删除一条消息,那么应该从他的聊天中删除,而不是从 Charles 中删除。
聊天是私人的或一对一的。
到目前为止,我已经完成了这个数据结构。不知道是不是最好的办法?请建议我
chats
sender_ID _ Reciever_id
product_id
message:''
Timestamp:''
SenderName:''
解决方案
当用户发布产品(潜在卖家)时,您需要将他们的用户 ID 与该产品相关联。基于此,感兴趣的用户(潜在买家)可以建立联系。
鉴于您的其他要求,我会嵌套聊天:
chats: {
uid1_uid2_productid: {
pushid: { message: ..., timestamp: ..., sender: ... },
pushid: { message: ..., timestamp: ..., sender: ... }
}
}
然后将这些聊天与用户特定列表中的正确用户相关联:
user_chats: {
uid1: {
uid1_uid2_productid: true
},
uid2: {
uid1_uid2_productid: true
}
}
您也可以存储一个值(或更多属性)来代替true
您显示该特定用户的聊天列表。
如果您希望每个用户拥有一个完全独立的聊天/房间副本,您最简单的方法是复制房间。所以:
chats: {
uid1_uid2_productid: {
pushid: { message: ..., timestamp: ..., sender: ... },
pushid: { message: ..., timestamp: ..., sender: ... }
}
uid2_uid1_productid: {
pushid: { message: ..., timestamp: ..., sender: ... },
pushid: { message: ..., timestamp: ..., sender: ... }
}
}
接着:
user_chats: {
uid1: {
uid1_uid2_productid: true
},
uid2: {
uid2_uid1_productid: true
}
}