在 AWS AppSync 和 Amplify 中对群聊实施“阅读回执”的最佳做法是什么?

问题描述

我正在使用 AppSync 作为后端构建一个 Angular 11 网络应用。

我已经提到了群聊,但基本上我的应用中有一个功能我有一个公告功能,其中有人向特定受众(可以是个人成员或成员组)以及每当接收用户创建公告打开公告,它必须在用户界面中将该公告标记为该用户已读,并让发件人知道该公告已被该特定成员打开。

我有一个实现这个的想法:-

  1. 每个公告都需要有一个“seenBy”,用于聚合打开它的用户用户 ID。
  2. 每个成员在他们的用户对象中还有一个名为“announcementsRead”的属性,这是他们打开的公告的 ID 数组。
  3. 用户界面中,当我为用户收集公告列表时,ID 不属于成员自己的 noticesRead 数组的那些将被标记为未读。
  4. 当他们点击它并打开它时,我进行了 2 次更新 - a) 对于公告对象,我只需将成员的用户 ID 推送到“seenBy”属性并推送到 db。 b) 对于成员的用户对象,我将公告的 id 添加到“announcementRead”属性并将其推送到数据库

这只是我想出来的。

如果这种方法有任何缺陷,请告诉我。或者是否有更简单的方法来实现此功能

我也有一些顾虑:-

  1. 假设两个用户同时打开一个公告,并且客户端尝试使用包含用户 ID 的更新后的 seenBy 来更新公告,当来自两个不同客户端的两个请求同时发生时会发生什么?有可能第一个用户获取对象,然后第二个用户立即获取它,当第二个用户更新属性并将其发送回数据库时,第一个用户已经写入了他们更新的数据。在这种情况下,第二个用户数据库的写入将覆盖第一个用户的更改。我不确定放大数据存储的内部机制,但我可以想象这会发生。这可能吗?如果是这样,我们如何确保防止这种情况发生?
  2. 我真的有必要在用户中维护“announcementsRead”属性吗?我的意思是,我可以想象每次获取公告列表时,通过检查当前用户的 ID 是否存在于公告的“seenBy”中并在 UI 中维护该列表,在 UI 中生成该列表,这样我们就可以消除信息的冗余数据库,并且不累积可能已被删除的非常旧的公告 ID 也是有意义的。但我想知道将这个戴在会员身上是否真的以一种不可或缺的方式有所帮助。

希望我的问题很清楚。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)