mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
v3 adapt v2: adapt common ops
This commit is contained in:
@@ -15,8 +15,12 @@ module.exports = function addWebhook (user, req = {}) {
|
||||
|
||||
user.markModified('preferences.webhooks');
|
||||
|
||||
return refPush(wh, {
|
||||
url: req.body.url,
|
||||
enabled: req.body.enabled,
|
||||
});
|
||||
if (req.v2 === true) {
|
||||
return user.preferences.webhooks;
|
||||
} else {
|
||||
return refPush(wh, {
|
||||
url: req.body.url,
|
||||
enabled: req.body.enabled,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
import _ from 'lodash';
|
||||
import autoAllocate from '../fns/autoAllocate';
|
||||
|
||||
module.exports = function allocateNow (user) {
|
||||
module.exports = function allocateNow (user, req = {}) {
|
||||
_.times(user.stats.points, () => autoAllocate(user));
|
||||
user.stats.points = 0;
|
||||
return {
|
||||
data: _.pick(user, 'stats'),
|
||||
};
|
||||
|
||||
if (req.v2 === true) {
|
||||
return _.pick(user, 'stats');
|
||||
} else {
|
||||
return {
|
||||
data: _.pick(user, 'stats'),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -134,5 +134,9 @@ module.exports = function buy (user, req = {}, analytics) {
|
||||
|
||||
if (armoireResp) res.armoire = armoireResp;
|
||||
|
||||
return res;
|
||||
if (req.v2 === true) {
|
||||
return res.data;
|
||||
} else {
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -43,8 +43,13 @@ module.exports = function buyMysterySet (user, req = {}, analytics) {
|
||||
|
||||
user.purchased.plan.consecutive.trinkets--;
|
||||
|
||||
return {
|
||||
data: pickDeep(user, splitWhitespace('items purchased.plan.consecutive')),
|
||||
message: i18n.t('hourglassPurchaseSet', req.language),
|
||||
};
|
||||
|
||||
if (req.v2 === true) {
|
||||
return pickDeep(user, splitWhitespace('items purchased.plan.consecutive'));
|
||||
} else {
|
||||
return {
|
||||
data: pickDeep(user, splitWhitespace('items purchased.plan.consecutive')),
|
||||
message: i18n.t('hourglassPurchaseSet', req.language),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -37,10 +37,14 @@ module.exports = function buyQuest (user, req = {}, analytics) {
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
data: user.items.quests,
|
||||
message: i18n.t('messageBought', {
|
||||
itemText: item.text(req.language),
|
||||
}, req.language),
|
||||
};
|
||||
if (req.v2 === true) {
|
||||
return user.items.quests;
|
||||
} else {
|
||||
return {
|
||||
data: user.items.quests,
|
||||
message: i18n.t('messageBought', {
|
||||
itemText: item.text(req.language),
|
||||
}, req.language),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -22,10 +22,14 @@ module.exports = function buySpecialSpell (user, req = {}) {
|
||||
|
||||
user.items.special[key]++;
|
||||
|
||||
return {
|
||||
data: _.pick(user, splitWhitespace('items stats')),
|
||||
message: i18n.t('messageBought', {
|
||||
itemText: item.text(req.language),
|
||||
}, req.language),
|
||||
};
|
||||
if (req.v2 === true) {
|
||||
return _.pick(user, splitWhitespace('items stats'));
|
||||
} else {
|
||||
return {
|
||||
data: _.pick(user, splitWhitespace('items stats')),
|
||||
message: i18n.t('messageBought', {
|
||||
itemText: item.text(req.language),
|
||||
}, req.language),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -65,7 +65,11 @@ module.exports = function changeClass (user, req = {}, analytics) {
|
||||
user.flags.classSelected = false;
|
||||
}
|
||||
|
||||
return {
|
||||
data: _.pick(user, splitWhitespace('stats flags items preferences')),
|
||||
};
|
||||
if (req.v2 === true) {
|
||||
return _.pick(user, splitWhitespace('stats flags items preferences'));
|
||||
} else {
|
||||
return {
|
||||
data: _.pick(user, splitWhitespace('stats flags items preferences')),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -3,4 +3,6 @@ import _ from 'lodash';
|
||||
module.exports = function deleteWebhook (user, req) {
|
||||
delete user.preferences.webhooks[_.get(req, 'params.id')];
|
||||
user.markModified('preferences.webhooks');
|
||||
|
||||
return user.preferences.webhooks;
|
||||
};
|
||||
|
||||
@@ -2,7 +2,7 @@ import splitWhitespace from '../libs/splitWhitespace';
|
||||
import { capByLevel } from '../statHelpers';
|
||||
import _ from 'lodash';
|
||||
|
||||
module.exports = function disableClasses (user) {
|
||||
module.exports = function disableClasses (user, req = {}) {
|
||||
user.stats.class = 'warrior';
|
||||
user.flags.classSelected = true;
|
||||
user.preferences.disableClasses = true;
|
||||
@@ -10,7 +10,11 @@ module.exports = function disableClasses (user) {
|
||||
user.stats.str = capByLevel(user.stats.lvl);
|
||||
user.stats.points = 0;
|
||||
|
||||
return {
|
||||
data: _.pick(user, splitWhitespace('stats flags preferences')),
|
||||
};
|
||||
if (req.v2 === true) {
|
||||
return _.pick(user, splitWhitespace('stats flags preferences'));
|
||||
} else {
|
||||
return {
|
||||
data: _.pick(user, splitWhitespace('stats flags preferences')),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -62,5 +62,9 @@ module.exports = function equip (user, req = {}) {
|
||||
};
|
||||
if (message) res.message = message;
|
||||
|
||||
return res;
|
||||
if (req.v2 === true) {
|
||||
return user.items;
|
||||
} else {
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -89,8 +89,14 @@ module.exports = function feed (user, req = {}) {
|
||||
|
||||
user.items.food[food.key]--;
|
||||
|
||||
return {
|
||||
data: userPets[pet],
|
||||
message,
|
||||
};
|
||||
if (req.v2 === true) {
|
||||
return {
|
||||
value: userPets[pet],
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
data: userPets[pet],
|
||||
message,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -33,8 +33,12 @@ module.exports = function hatch (user, req = {}) {
|
||||
user.items.eggs[egg]--;
|
||||
user.items.hatchingPotions[hatchingPotion]--;
|
||||
|
||||
return {
|
||||
message: i18n.t('messageHatched', req.language),
|
||||
data: user.items,
|
||||
};
|
||||
if (req.v2 === true) {
|
||||
return user.items;
|
||||
} else {
|
||||
return {
|
||||
message: i18n.t('messageHatched', req.language),
|
||||
data: user.items,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -56,5 +56,9 @@ module.exports = function purchaseHourglass (user, req = {}, analytics) {
|
||||
message: i18n.t('hourglassPurchase', req.language),
|
||||
};
|
||||
|
||||
return res;
|
||||
if (req.v2 === true) {
|
||||
return res.data;
|
||||
} else {
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -33,8 +33,12 @@ module.exports = function openMysteryItem (user, req = {}, analytics) {
|
||||
user._tmp.drop = item;
|
||||
}
|
||||
|
||||
return {
|
||||
message: i18n.t('mysteryItemOpened', req.language),
|
||||
data: user.items.gear.owned,
|
||||
};
|
||||
if (req.v2 === true) {
|
||||
return user.items.gear.owned;
|
||||
} else {
|
||||
return {
|
||||
message: i18n.t('mysteryItemOpened', req.language),
|
||||
data: user.items.gear.owned,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -124,5 +124,9 @@ module.exports = function purchase (user, req = {}, analytics) {
|
||||
message: i18n.t('purchased', {type, key}),
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return response.data;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -21,8 +21,12 @@ module.exports = function readCard (user, req = {}) {
|
||||
user.items.special[`${cardType}Received`].shift();
|
||||
user.flags.cardReceived = false;
|
||||
|
||||
return {
|
||||
message: i18n.t('readCard', {cardType}, req.language),
|
||||
data: _.pick(user, splitWhitespace('items.special flags.cardReceived')),
|
||||
};
|
||||
if (req.v2 === true) {
|
||||
return _.pick(user, splitWhitespace('items.special flags.cardReceived'));
|
||||
} else {
|
||||
return {
|
||||
message: i18n.t('readCard', {cardType}, req.language),
|
||||
data: _.pick(user, splitWhitespace('items.special flags.cardReceived')),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -103,5 +103,9 @@ module.exports = function rebirth (user, tasks = [], req = {}, analytics) {
|
||||
message: i18n.t('rebirthComplete'),
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return user;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -62,5 +62,9 @@ module.exports = function releaseBoth (user, req = {}, analytics) {
|
||||
message: i18n.t('mountsAndPetsReleased'),
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return user;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -39,5 +39,9 @@ module.exports = function releaseMounts (user, req = {}, analytics) {
|
||||
message: i18n.t('mountsReleased'),
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return user;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -37,5 +37,9 @@ module.exports = function releasePets (user, req = {}, analytics) {
|
||||
message: i18n.t('petsReleased'),
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return user;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -32,5 +32,9 @@ module.exports = function reroll (user, tasks = [], req = {}, analytics) {
|
||||
message: i18n.t('rerollComplete'),
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return user;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -102,5 +102,9 @@ module.exports = function revive (user, req = {}, analytics) {
|
||||
message,
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return user;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -38,5 +38,9 @@ module.exports = function sell (user, req = {}) {
|
||||
message: i18n.t('sold', {type, key}),
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return response.data;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
module.exports = function sleep (user) {
|
||||
module.exports = function sleep (user, req = {}) {
|
||||
user.preferences.sleep = !user.preferences.sleep;
|
||||
return {
|
||||
preferences: {
|
||||
sleep: user.preferences.sleep,
|
||||
},
|
||||
};
|
||||
|
||||
if (req.v2 === true) {
|
||||
return {};
|
||||
} else {
|
||||
return {
|
||||
preferences: {
|
||||
sleep: user.preferences.sleep,
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -81,5 +81,9 @@ module.exports = function unlock (user, req = {}, analytics) {
|
||||
message: i18n.t('unlocked'),
|
||||
};
|
||||
|
||||
return response;
|
||||
if (req.v2 === true) {
|
||||
return response.data;
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -12,5 +12,9 @@ module.exports = function updateWebhook (user, req) {
|
||||
user.preferences.webhooks[req.params.id].url = req.body.url;
|
||||
user.preferences.webhooks[req.params.id].enabled = req.body.enabled;
|
||||
|
||||
return user.preferences.webhooks[req.params.id];
|
||||
if (req.v2 === true) {
|
||||
return user.preferences.webhooks;
|
||||
} else {
|
||||
return user.preferences.webhooks[req.params.id];
|
||||
}
|
||||
};
|
||||
|
||||
@@ -13,8 +13,9 @@ describe('shared.ops.deleteWebhook', () => {
|
||||
});
|
||||
|
||||
it('succeeds', () => {
|
||||
user.preferences.webhooks = { 'some-id': {} };
|
||||
deleteWebhook(user, req);
|
||||
expect(user.preferences.webhooks).to.eql({});
|
||||
user.preferences.webhooks = { 'some-id': {}, 'another-id': {} };
|
||||
let res = deleteWebhook(user, req);
|
||||
expect(user.preferences.webhooks).to.eql({'another-id': {}});
|
||||
expect(res).to.equal(user.preferences.webhooks);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -24,6 +24,7 @@ var moment = require('moment');
|
||||
var logging = require('./../../libs/api-v2/logging');
|
||||
var acceptablePUTPaths;
|
||||
let restrictedPUTSubPaths;
|
||||
import v3UserController from '../api-v3/user';
|
||||
|
||||
let i18n = shared.i18n;
|
||||
|
||||
@@ -865,10 +866,24 @@ api.addTask = function(req, res, next) {
|
||||
* All other user.ops which can easily be mapped to common/script/index.js, not requiring custom API-wrapping
|
||||
*/
|
||||
_.each(shared.ops, function(op,k){
|
||||
if (!api[k]) {
|
||||
if (['rebirth', 'reroll', 'reset'].indexOf(k) !== -1) { // proxy ops that change tasks directly to v3
|
||||
if (k === 'rebirth') k = 'userRebirth'; // the name is different in v3
|
||||
if (k === 'reroll') k = 'userReroll';
|
||||
// if (k === 'reset') k = 'resetUser';
|
||||
|
||||
api[k] = async function (req, res, next) {
|
||||
try {
|
||||
req.v2 = true;
|
||||
await v3UserController[k](req, res, next);
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
}
|
||||
} else if (!api[k]) {
|
||||
api[k] = function(req, res, next) {
|
||||
var opResponse;
|
||||
try {
|
||||
req.v2 = true; // Used to indicate to the shared code that the old response data should be returned
|
||||
opResponse = shared.ops[k](res.locals.user, req, analytics);
|
||||
} catch (err) {
|
||||
if (!err.code) return next(err);
|
||||
@@ -878,8 +893,15 @@ _.each(shared.ops, function(op,k){
|
||||
// If we want to send something other than 500, pass err as {code: 200, message: "Not enough GP"}
|
||||
res.locals.user.save(function(err){
|
||||
if (err) return next(err);
|
||||
res.status(200).json(response);
|
||||
})
|
||||
if (response === user) { // add tasks
|
||||
user.getTransformedData(function (err, transformedUser) {
|
||||
if (err) return next(err);
|
||||
res.status(200).json(transformedUser);
|
||||
});
|
||||
} else {
|
||||
res.status(200).json(response);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user