Spells Performances (#11104)

* spells: only select needed fields

* fix tests

* add comment
This commit is contained in:
Matteo Pagliazzi
2019-04-19 16:18:32 +02:00
committed by GitHub
parent 9f09a0396b
commit bd3de3c48c

View File

@@ -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;