diff --git a/migrations/users/20181002_username_email.js b/migrations/archive/2018/20181002_username_email.js similarity index 100% rename from migrations/users/20181002_username_email.js rename to migrations/archive/2018/20181002_username_email.js diff --git a/migrations/users/20181019_veteran_pet_ladder.js b/migrations/users/20181019_veteran_pet_ladder.js new file mode 100644 index 0000000000..e8e9039570 --- /dev/null +++ b/migrations/users/20181019_veteran_pet_ladder.js @@ -0,0 +1,91 @@ +/* eslint-disable no-console */ +import { model as User } from '../website/server/models/user'; + +function processUsers (lastId) { + let query = { + 'flags.verifiedUsername': true, + }; + + let fields = { + 'items.pets': 1, + }; + + if (lastId) { + query._id = { + $gt: lastId, + }; + } + + return User.find(query) + .limit(250) + .sort({_id: 1}) + .select(fields) + .then(updateUsers) + .catch((err) => { + console.log(err); + return exiting(1, `ERROR! ${err}`); + }); +} + +let progressCount = 1000; +let count = 0; + +function updateUsers (users) { + if (!users || users.length === 0) { + console.warn('All appropriate users found and modified.'); + displayData(); + return; + } + + let userPromises = users.map(updateUser); + let lastUser = users[users.length - 1]; + + return Promise.all(userPromises) + .then(() => { + processUsers(lastUser._id); + }); +} + +function updateUser (user) { + count++; + + let set = {}; + + if (user.items.pets['Bear-Veteran']) { + set['items.pets.Fox-Veteran'] = 5; + } else if (user.items.pets['Lion-Veteran']) { + set['items.pets.Bear-Veteran'] = 5; + } else if (user.items.pets['Tiger-Veteran']) { + set['items.pets.Lion-Veteran'] = 5; + } else if (user.items.pets['Wolf-Veteran']) { + set['items.pets.Tiger-Veteran'] = 5; + } else { + set['items.pets.Wolf-Veteran'] = 5; + } + + if (count % progressCount === 0) console.warn(`${count} ${user._id}`); + + return User.update({_id: user._id}, {$set: set}).exec(); +} + +function displayData () { + console.warn(`\n${count} users processed\n`); + return exiting(0); +} + +function exiting (code, msg) { + code = code || 0; // 0 = success + if (code && !msg) { + msg = 'ERROR!'; + } + if (msg) { + if (code) { + console.error(msg); + } else { + console.log(msg); + } + } + process.exit(code); +} + +module.exports = processUsers; diff --git a/website/common/locales/en/pets.json b/website/common/locales/en/pets.json index 2298efc77f..15d21f403c 100644 --- a/website/common/locales/en/pets.json +++ b/website/common/locales/en/pets.json @@ -19,6 +19,7 @@ "veteranTiger": "Veteran Tiger", "veteranLion": "Veteran Lion", "veteranBear": "Veteran Bear", + "veteranFox": "Veteran Fox", "cerberusPup": "Cerberus Pup", "hydra": "Hydra", "mantisShrimp": "Mantis Shrimp", diff --git a/website/common/script/content/stable.js b/website/common/script/content/stable.js index 72507a0049..2b788813cf 100644 --- a/website/common/script/content/stable.js +++ b/website/common/script/content/stable.js @@ -71,6 +71,7 @@ let specialPets = { 'Orca-Base': 'orca', 'Bear-Veteran': 'veteranBear', 'Hippogriff-Hopeful': 'hopefulHippogriffPet', + 'Fox-Veteran': 'veteranFox', }; let specialMounts = { diff --git a/website/raw_sprites/spritesmith/stable/pets/Pet-Fox-Veteran.png b/website/raw_sprites/spritesmith/stable/pets/Pet-Fox-Veteran.png new file mode 100644 index 0000000000..0677ba3afb Binary files /dev/null and b/website/raw_sprites/spritesmith/stable/pets/Pet-Fox-Veteran.png differ diff --git a/website/raw_sprites/spritesmith_large/promo_veteran_pets.png b/website/raw_sprites/spritesmith_large/promo_veteran_pets.png new file mode 100644 index 0000000000..0f2db4bddf Binary files /dev/null and b/website/raw_sprites/spritesmith_large/promo_veteran_pets.png differ diff --git a/website/server/controllers/api-v4/auth.js b/website/server/controllers/api-v4/auth.js index fb1533a7c7..a4f6cfe202 100644 --- a/website/server/controllers/api-v4/auth.js +++ b/website/server/controllers/api-v4/auth.js @@ -62,7 +62,20 @@ api.updateUsername = { // save username user.auth.local.lowerCaseUsername = newUsername.toLowerCase(); user.auth.local.username = newUsername; - user.flags.verifiedUsername = true; + if (!user.flags.verifiedUsername) { + user.flags.verifiedUsername = true; + if (user.items.pets['Bear-Veteran']) { + user.items.pets['Fox-Veteran'] = 5; + } else if (user.items.pets['Lion-Veteran']) { + user.items.pets['Bear-Veteran'] = 5; + } else if (user.items.pets['Tiger-Veteran']) { + user.items.pets['Lion-Veteran'] = 5; + } else if (user.items.pets['Wolf-Veteran']) { + user.items.pets['Tiger-Veteran'] = 5; + } else { + user.items.pets['Wolf-Veteran'] = 5; + } + } await user.save(); res.respond(200, { username: req.body.username }); diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index 020dd59ebe..f85972d227 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -125,6 +125,7 @@ function _setUpNewUser (user) { let iterableFlags = user.flags.toObject(); user.items.quests.dustbunnies = 1; + user.items.pets['Wolf-Veteran'] = 5; // Thank-you for users joining during username upheaval user.purchased.background.violet = true; user.preferences.background = 'violet';