如何实现自动成就规则

时间:2015-04-21 21:16:45

标签: javascript node.js sails.js

我今天遇到了挑战。我想要做的是为我的网站自动成就系统。我想每天检查用户是否符合获得新成就的要求。这些要求不会存储在数据库中,为了添加新的成就,我希望能够只定义一个新的javascript对象/原型,这些就是这些。

我正在使用风帆,我不知道我的方法是否正确。我正在使用方法" checkForAchievements"我希望它检查所有用户,以及他们是否满足定义的每个成就的要求。如果他们这样做,我会在我的表user_achievement中添加一条记录。这是我到目前为止所尝试的:

exports.checkForAchievements = function(callback) {

  var AchievementsValidator = function(achievement, user) {
    this.achievement = achievement;
    this.user = user;
    this.validation = function() {
      return true;
    };
    this.giveAchievement = function() {
      UserAchievement.findOrCreate({ user: this.user, achievement: this.achievement}, { user:  this.user, achievement: this.achievement })
      .exec(function(err, userAchievment) {});
  }
  };

  //Example badge code, validation returns true if the user has at least 50 posts on the website
  var FiftyPosts = function() {
    this.validation = function() {
      Post.count({ user: this.user }).exec(function(err, count) {
        if (count >= 50) {
          return true;
        }
        else {
          return false;
        }
      })
    };
  };

  //Loop in users and execute this code for each 
  FiftyPosts.prototype = new AchievementsValidator(22, user); // 22 would be the achivement in database
  if (FiftyPosts.validation) {
    FiftyPosts.giveAchievement();
  }
  callback();

};

是否有可能使用此代码?我觉得它会很混乱,因为我需要在最后一个循环中写下每个成就。此外,上面的代码无法正常工作我无法在徽章上执行验证。

注意:性能不是问题,因为此代码不会经常运行。我只希望这是可扩展的,这样我就可以添加新的成就而不会有太多的麻烦。 谢谢。

编辑:似乎问题不够明确,所以你走了:

  1. 如何在上面的代码中使用正确的方法获取FiftyPosts.validation?它没有使用上述任何一项(AchievementsValidator,FiftyPosts)。

  2. 如果你知道sails.js,你能告诉我在服务中这样做是不是一个好主意?

0 个答案:

没有答案