所以这就是绊倒我:
当用户赞成帖子时,他们会获得+2
业力。
当用户向帖子投票时,他们会获得+2
业力。
当用户取消/删除他们的投票时,他们会获得-2
业力。 (净0)
被低估的用户帖子会获得-2
业力。
投赞的用户帖子会获得+2
业力。
如果某人取消/删除了他们的投票,那么发布的用户会获得-2
(如果它是一个upvote)和+2
如果它是downvote ..(net 0)
我不知道这是否合理,但基本上我想奖励人们投票并惩罚人们创造不好的帖子..
这就是我所拥有的:
在我的数据库中,如果某个帖子获得了this.userVote
{$ 1}},则downvote为1
,并且他们的投票结果为-1
。
0
所以这可以按预期工作,如上所述。
问题是,我不确定如何设置业力以使其按预期工作。
我目前正在执行以下行来更新用户业力以及海报业力:
upvote() {
let vote = this.userVote == 1 ? 0 : 1;
this.database.list('/upvotes/'+this.postData.id).set(this.userData.uid, vote)
}
downvote() {
let vote = this.userVote == -1 ? 0 : -1;
this.database.list('/upvotes/'+this.postData.id).set(this.userData.uid, vote)
}
如何将变量this.database.database.ref('users/'+this.userData.uid).update({'karma': this.userKarma + karma}) //this.userKarma is the users karma
this.database.database.ref('users/'+this.postData.uid).update({'karma': this.postKarma + karma}) //this.postKarma is the karma of the user who created the post
设置为如上所述..
有什么建议吗?谢谢!
答案 0 :(得分:1)
您可以使用Firebase Transaction system。事务是原子(firebase中没有真正的原子性)更新数据的一种方式。
例如,将业力减少1
this.database.database.ref('users/'+this.userData.uid).child('karma')
.transaction(function(karma){
if (!karma)
return 0;
return karma - 1;
});
答案 1 :(得分:0)
我最终解决了这个问题:
getKarmaDelta(prevVote, vote) {
if((prevVote !== 1 && prevVote !== -1) && (vote === 1 || vote === -1)) {
this.updateUserKarma(2)
} else if (vote === 0) {
this.updateUserKarma(-2)
}
if(vote === -1 || (vote === 0 && prevVote === 1)) {
this.updatePosterKarma(-2)
} else if (vote === 1 || (vote === 0 && prevVote === -1)) {
this.updatePosterKarma(2)
}
}
希望这有助于其他人。