exports.up = function()

in migrations/20151015171458-merge-sites.js [5:54]


exports.up = function(db, callback) {
  Sails.lift({ hooks: {
    http: false,
    views: false,
    sockets: false,
    pubsub: false,
    grunt: false
  }}, function(err, sails) {

    // Add users with duplicate sites to lowest site
    Site.find({ sort: 'id asc' }).populate('users').exec(function(err, sites) {
      var groups = _(sites).map(function(site) {
            site.fullName = (site.owner + '/' + site.repository).toLowerCase();
            return site;
          }).groupBy(function(site) {
            return site.fullName;
          }).filter(function(group) {
            return group.length > 1;
          }).value();
      async.forEach(groups, function(group, done) {
        var primeSite = group[0],
            ids = _(primeSite.users).pluck('id').value();
        async.forEach(group, function(site, done) {
          if (!_.contains(ids, site.users[0].id)) {
            primeSite.users.add(site.users[0]);
            primeSite.save(done);
          } else {
            return done();
          }
        }, done);
      }, next);
    });

    // Delete all duplicate sites
    function next(err) {
      if (err) throw err;
      db.runSql('DELETE FROM site ' +
        'WHERE id IN (SELECT id ' +
          'FROM (SELECT id, ' +
            'ROW_NUMBER() OVER (partition BY owner, repository ' +
            'ORDER BY id) AS rnum ' +
            'FROM site) t ' +
          'WHERE t.rnum > 1);', function(err) {
        if (err) throw err;
        sails.lower(callback);
      });
    }

  });
};