mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +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');
|
user.markModified('preferences.webhooks');
|
||||||
|
|
||||||
return refPush(wh, {
|
if (req.v2 === true) {
|
||||||
url: req.body.url,
|
return user.preferences.webhooks;
|
||||||
enabled: req.body.enabled,
|
} else {
|
||||||
});
|
return refPush(wh, {
|
||||||
|
url: req.body.url,
|
||||||
|
enabled: req.body.enabled,
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import autoAllocate from '../fns/autoAllocate';
|
import autoAllocate from '../fns/autoAllocate';
|
||||||
|
|
||||||
module.exports = function allocateNow (user) {
|
module.exports = function allocateNow (user, req = {}) {
|
||||||
_.times(user.stats.points, () => autoAllocate(user));
|
_.times(user.stats.points, () => autoAllocate(user));
|
||||||
user.stats.points = 0;
|
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;
|
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--;
|
user.purchased.plan.consecutive.trinkets--;
|
||||||
|
|
||||||
return {
|
|
||||||
data: pickDeep(user, splitWhitespace('items purchased.plan.consecutive')),
|
if (req.v2 === true) {
|
||||||
message: i18n.t('hourglassPurchaseSet', req.language),
|
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 {
|
if (req.v2 === true) {
|
||||||
data: user.items.quests,
|
return user.items.quests;
|
||||||
message: i18n.t('messageBought', {
|
} else {
|
||||||
itemText: item.text(req.language),
|
return {
|
||||||
}, req.language),
|
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]++;
|
user.items.special[key]++;
|
||||||
|
|
||||||
return {
|
if (req.v2 === true) {
|
||||||
data: _.pick(user, splitWhitespace('items stats')),
|
return _.pick(user, splitWhitespace('items stats'));
|
||||||
message: i18n.t('messageBought', {
|
} else {
|
||||||
itemText: item.text(req.language),
|
return {
|
||||||
}, req.language),
|
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;
|
user.flags.classSelected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
if (req.v2 === true) {
|
||||||
data: _.pick(user, splitWhitespace('stats flags items preferences')),
|
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) {
|
module.exports = function deleteWebhook (user, req) {
|
||||||
delete user.preferences.webhooks[_.get(req, 'params.id')];
|
delete user.preferences.webhooks[_.get(req, 'params.id')];
|
||||||
user.markModified('preferences.webhooks');
|
user.markModified('preferences.webhooks');
|
||||||
|
|
||||||
|
return user.preferences.webhooks;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import splitWhitespace from '../libs/splitWhitespace';
|
|||||||
import { capByLevel } from '../statHelpers';
|
import { capByLevel } from '../statHelpers';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
module.exports = function disableClasses (user) {
|
module.exports = function disableClasses (user, req = {}) {
|
||||||
user.stats.class = 'warrior';
|
user.stats.class = 'warrior';
|
||||||
user.flags.classSelected = true;
|
user.flags.classSelected = true;
|
||||||
user.preferences.disableClasses = true;
|
user.preferences.disableClasses = true;
|
||||||
@@ -10,7 +10,11 @@ module.exports = function disableClasses (user) {
|
|||||||
user.stats.str = capByLevel(user.stats.lvl);
|
user.stats.str = capByLevel(user.stats.lvl);
|
||||||
user.stats.points = 0;
|
user.stats.points = 0;
|
||||||
|
|
||||||
return {
|
if (req.v2 === true) {
|
||||||
data: _.pick(user, splitWhitespace('stats flags preferences')),
|
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;
|
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]--;
|
user.items.food[food.key]--;
|
||||||
|
|
||||||
return {
|
if (req.v2 === true) {
|
||||||
data: userPets[pet],
|
return {
|
||||||
message,
|
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.eggs[egg]--;
|
||||||
user.items.hatchingPotions[hatchingPotion]--;
|
user.items.hatchingPotions[hatchingPotion]--;
|
||||||
|
|
||||||
return {
|
if (req.v2 === true) {
|
||||||
message: i18n.t('messageHatched', req.language),
|
return user.items;
|
||||||
data: 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),
|
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;
|
user._tmp.drop = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
if (req.v2 === true) {
|
||||||
message: i18n.t('mysteryItemOpened', req.language),
|
return user.items.gear.owned;
|
||||||
data: 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}),
|
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.items.special[`${cardType}Received`].shift();
|
||||||
user.flags.cardReceived = false;
|
user.flags.cardReceived = false;
|
||||||
|
|
||||||
return {
|
if (req.v2 === true) {
|
||||||
message: i18n.t('readCard', {cardType}, req.language),
|
return _.pick(user, splitWhitespace('items.special flags.cardReceived'));
|
||||||
data: _.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'),
|
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'),
|
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'),
|
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'),
|
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'),
|
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,
|
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}),
|
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;
|
user.preferences.sleep = !user.preferences.sleep;
|
||||||
return {
|
|
||||||
preferences: {
|
if (req.v2 === true) {
|
||||||
sleep: user.preferences.sleep,
|
return {};
|
||||||
},
|
} else {
|
||||||
};
|
return {
|
||||||
|
preferences: {
|
||||||
|
sleep: user.preferences.sleep,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -81,5 +81,9 @@ module.exports = function unlock (user, req = {}, analytics) {
|
|||||||
message: i18n.t('unlocked'),
|
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].url = req.body.url;
|
||||||
user.preferences.webhooks[req.params.id].enabled = req.body.enabled;
|
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', () => {
|
it('succeeds', () => {
|
||||||
user.preferences.webhooks = { 'some-id': {} };
|
user.preferences.webhooks = { 'some-id': {}, 'another-id': {} };
|
||||||
deleteWebhook(user, req);
|
let res = deleteWebhook(user, req);
|
||||||
expect(user.preferences.webhooks).to.eql({});
|
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 logging = require('./../../libs/api-v2/logging');
|
||||||
var acceptablePUTPaths;
|
var acceptablePUTPaths;
|
||||||
let restrictedPUTSubPaths;
|
let restrictedPUTSubPaths;
|
||||||
|
import v3UserController from '../api-v3/user';
|
||||||
|
|
||||||
let i18n = shared.i18n;
|
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
|
* 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){
|
_.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) {
|
api[k] = function(req, res, next) {
|
||||||
var opResponse;
|
var opResponse;
|
||||||
try {
|
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);
|
opResponse = shared.ops[k](res.locals.user, req, analytics);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err.code) return next(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"}
|
// If we want to send something other than 500, pass err as {code: 200, message: "Not enough GP"}
|
||||||
res.locals.user.save(function(err){
|
res.locals.user.save(function(err){
|
||||||
if (err) return next(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