mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
Spells Performances (#11104)
* spells: only select needed fields * fix tests * add comment
This commit is contained in:
@@ -11,7 +11,9 @@ import {
|
|||||||
} from '../models/group';
|
} from '../models/group';
|
||||||
import apiError from '../libs/apiError';
|
import apiError from '../libs/apiError';
|
||||||
|
|
||||||
const partyMembersFields = 'profile.name stats achievements items.special';
|
const partyMembersFields = 'profile.name stats achievements items.special notifications flags';
|
||||||
|
// Excluding notifications and flags from the list of public fields to return.
|
||||||
|
const partyMembersPublicFields = 'profile.name stats achievements items.special';
|
||||||
|
|
||||||
// @TODO: After refactoring individual spells, move quantity to the calculations
|
// @TODO: After refactoring individual spells, move quantity to the calculations
|
||||||
|
|
||||||
@@ -78,8 +80,7 @@ async function castPartySpell (req, party, partyMembers, user, spell, quantity =
|
|||||||
'party._id': party._id,
|
'party._id': party._id,
|
||||||
_id: { $ne: user._id }, // add separately
|
_id: { $ne: user._id }, // add separately
|
||||||
})
|
})
|
||||||
// .select(partyMembersFields) Selecting the entire user because otherwise when saving it'll save
|
.select(partyMembersFields)
|
||||||
// default values for non-selected fields and pre('save') will mess up thinking some values are missing
|
|
||||||
.exec();
|
.exec();
|
||||||
|
|
||||||
partyMembers.unshift(user);
|
partyMembers.unshift(user);
|
||||||
@@ -101,8 +102,7 @@ async function castUserSpell (res, req, party, partyMembers, targetId, user, spe
|
|||||||
if (!party) throw new NotFound(res.t('partyNotFound'));
|
if (!party) throw new NotFound(res.t('partyNotFound'));
|
||||||
partyMembers = await User
|
partyMembers = await User
|
||||||
.findOne({_id: targetId, 'party._id': party._id})
|
.findOne({_id: targetId, 'party._id': party._id})
|
||||||
// .select(partyMembersFields) Selecting the entire user because otherwise when saving it'll save
|
.select(partyMembersFields)
|
||||||
// default values for non-selected fields and pre('save') will mess up thinking some values are missing
|
|
||||||
.exec();
|
.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,9 +183,9 @@ async function castSpell (req, res, {isV3 = false}) {
|
|||||||
let partyMembersRes = Array.isArray(partyMembers) ? partyMembers : [partyMembers];
|
let partyMembersRes = Array.isArray(partyMembers) ? partyMembers : [partyMembers];
|
||||||
|
|
||||||
// Only return some fields.
|
// Only return some fields.
|
||||||
// See comment above on why we can't just select the necessary fields when querying
|
// We can't just return the selected fields because they're private
|
||||||
partyMembersRes = partyMembersRes.map(partyMember => {
|
partyMembersRes = partyMembersRes.map(partyMember => {
|
||||||
return common.pickDeep(partyMember.toJSON(), common.$w(partyMembersFields));
|
return common.pickDeep(partyMember.toJSON(), common.$w(partyMembersPublicFields));
|
||||||
});
|
});
|
||||||
|
|
||||||
let userToJson = user;
|
let userToJson = user;
|
||||||
|
|||||||
Reference in New Issue
Block a user