找到在 firebase 和 flutter 中实现 'like' 逻辑的最佳方法

Find the best way to implement a 'like' logic in firebase and flutter

我有一个问题。 我开发了一个允许用户点赞任务的功能。

例如:

用户可以点击心形图标。 如果他点击图标,颜色会改变,下面的数字会增加 (1 => 2)。

现在我想在 firebase 中构建我的数据库结构,但我不确定什么是最好的方法(为了性能...)。

我的想法:

我想创建一个 task_id,我可以在其中添加标题、描述、查看者总数等... 在 task_id 中,我还放了一个 user_id 来检查用户之前是否对任务进行了投票。 要检查用户是否包含在我想要使用 collectionGroup 的任务中。

我是 firebase 的新手,我不知道性能受到了多大的影响。

也许有人会找到其他或更好的方法来检查用户是否已对任务投票。

非常感谢 (:

我对您的任务文档模型的建议是使用 Firebase documentation:

建议的子集合
{
    "taskId1": {
        "description": "Lorem ipsum dolor",
        "title": "Task 1",
        "totalLikes": 2,
        "likes": {
            "userId1": {
                "liked": 1,
                "datetime": "2021-08-04T13:33:03.969Z"
            },
            "userId2": {
                "liked": -1,
                "datetime": "2021-08-09T21:47:03.857Z"
            }
        }
    }
}

要获得点赞总数变量,您可以在用户点赞时更新计数器,编写适当的安全规则以确保点赞计数匹配。

{
    "rules": {
        "likes": {
            "$thing": {
                "$userId": {
                    ".write": "auth.uid === $uid",
                    ".validate": "data.isNumber() && data.val() >= -1 && data.val() <= 1"
                }
            }
        }
    }
}