mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
* upgrade gulp-babel * upgrade babel-eslint * upgrade eslint-friendly-formatter * start upgrading chai * start to upgrade eslint * restore skipped tests * start to upgrqde monk * fix linting and remove unused file * fix mocha notifications, and common tests * fix unit tests * start to fix initrgration tests * more integration tests fixes * upgrade monk to latest version * lint /scripts * migrations: start moving to /archive unused migrations and run eslint with --fix * lint migrations * fix more integration tests * fix test
94 lines
3.2 KiB
JavaScript
94 lines
3.2 KiB
JavaScript
/*
|
|
const migrationName = 'AchievementRestore';
|
|
const authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
|
|
const authorUuid = ''; // ... own data is done
|
|
*/
|
|
|
|
/*
|
|
* This migraition will copy user data from prod to test
|
|
*/
|
|
|
|
const monk = require('monk');
|
|
const connectionString = 'mongodb://localhost/new-habit';
|
|
const Users = monk(connectionString).get('users', { castIds: false });
|
|
|
|
const oldConnectionSting = 'mongodb://localhost/old-habit';
|
|
const UsersOld = monk(oldConnectionSting).get('users', { castIds: false });
|
|
|
|
function getAchievementUpdate (newUser, oldUser) {
|
|
const oldAchievements = oldUser.achievements;
|
|
const newAchievements = newUser.achievements;
|
|
|
|
let achievementsUpdate = Object.assign({}, newAchievements);
|
|
|
|
// ultimateGearSets
|
|
if (!achievementsUpdate.ultimateGearSets && oldAchievements.ultimateGearSets) {
|
|
achievementsUpdate.ultimateGearSets = oldAchievements.ultimateGearSets;
|
|
} else if (oldAchievements.ultimateGearSets) {
|
|
for (let index in oldAchievements.ultimateGearSets) {
|
|
if (oldAchievements.ultimateGearSets[index]) achievementsUpdate.ultimateGearSets[index] = true;
|
|
}
|
|
}
|
|
|
|
// challenges
|
|
if (!newAchievements.challenges) newAchievements.challenges = [];
|
|
if (!oldAchievements.challenges) oldAchievements.challenges = [];
|
|
achievementsUpdate.challenges = newAchievements.challenges.concat(oldAchievements.challenges);
|
|
|
|
// Quests
|
|
if (!achievementsUpdate.quests) achievementsUpdate.quests = {};
|
|
for (let index in oldAchievements.quests) {
|
|
if (!achievementsUpdate.quests[index]) {
|
|
achievementsUpdate.quests[index] = oldAchievements.quests[index];
|
|
} else {
|
|
achievementsUpdate.quests[index] += oldAchievements.quests[index];
|
|
}
|
|
}
|
|
|
|
// Rebirth level
|
|
if (achievementsUpdate.rebirthLevel) {
|
|
achievementsUpdate.rebirthLevel = Math.max(achievementsUpdate.rebirthLevel, oldAchievements.rebirthLevel);
|
|
} else if (oldAchievements.rebirthLevel) {
|
|
achievementsUpdate.rebirthLevel = oldAchievements.rebirthLevel;
|
|
}
|
|
|
|
// All others
|
|
const indexsToIgnore = ['ultimateGearSets', 'challenges', 'quests', 'rebirthLevel'];
|
|
for (let index in oldAchievements) {
|
|
if (indexsToIgnore.indexOf(index) !== -1) continue; // eslint-disable-line no-continue
|
|
|
|
if (!achievementsUpdate[index]) {
|
|
achievementsUpdate[index] = oldAchievements[index];
|
|
continue; // eslint-disable-line no-continue
|
|
}
|
|
|
|
if (Number.isInteger(oldAchievements[index])) {
|
|
achievementsUpdate[index] += oldAchievements[index];
|
|
} else if (oldAchievements[index] === true) achievementsUpdate[index] = true;
|
|
}
|
|
|
|
return achievementsUpdate;
|
|
}
|
|
|
|
module.exports = async function achievementRestore () {
|
|
const userIds = [
|
|
];
|
|
|
|
for (let index in userIds) {
|
|
/* eslint-disable no-await-in-loop */
|
|
const userId = userIds[index];
|
|
const oldUser = await UsersOld.findOne({_id: userId}, 'achievements');
|
|
const newUser = await Users.findOne({_id: userId}, 'achievements');
|
|
const achievementUpdate = getAchievementUpdate(newUser, oldUser);
|
|
await Users.update(
|
|
{_id: userId},
|
|
{
|
|
$set: {
|
|
achievements: achievementUpdate,
|
|
},
|
|
});
|
|
console.log(`Updated ${userId}`);
|
|
/* eslint-enable no-await-in-loop */
|
|
}
|
|
};
|