Denormalised slot fill total to database

This commit is contained in:
Stefan Zermatten
2020-11-05 13:35:55 +02:00
parent 3293dad671
commit 749799d869
4 changed files with 34 additions and 8 deletions

View File

@@ -9,6 +9,7 @@ import writeAlteredProperties from '/imports/api/creature/computation/writeAlter
import writeCreatureVariables from '/imports/api/creature/computation/writeCreatureVariables.js';
import { recomputeDamageMultipliersById } from '/imports/api/creature/denormalise/recomputeDamageMultipliers.js';
import recomputeInactiveProperties from '/imports/api/creature/denormalise/recomputeInactiveProperties.js';
import recomputeSlotFullness from '/imports/api/creature/denormalise/recomputeSlotFullness.js';
import Creatures from '/imports/api/creature/Creatures.js';
export const recomputeCreature = new ValidatedMethod({
@@ -117,5 +118,6 @@ export function recomputeCreatureByDoc(creature){
writeAlteredProperties(computationMemo);
writeCreatureVariables(computationMemo, creatureId);
recomputeDamageMultipliersById(creatureId);
recomputeSlotFullness(creatureId);
return computationMemo;
}

View File

@@ -0,0 +1,28 @@
import CreatureProperties from '/imports/api/creature/CreatureProperties.js';
// n + 1 database queries + n potential updates for n slots. Could be sped up.
export default function recomputeSlotFullness(ancestorId){
CreatureProperties.find({
'ancestors.id': ancestorId,
type: 'propertySlot',
}).forEach(slot => {
let children = CreatureProperties.find({
'parent.id': slot._id,
removed: {$ne: true},
}).fetch();
let totalFilled = 0;
children.forEach(child => {
if (child.type === 'slotFiller'){
totalFilled += child.slotQuantityFilled;
} else {
totalFilled++;
}
});
if (slot.totalFilled !== totalFilled){
CreatureProperties.update(slot._id, {
$set: {totalFilled},
}, {
selector: {type: 'propertySlot'}
});
}
});
}

View File

@@ -50,6 +50,10 @@ const ComputedOnlySlotSchema = new SimpleSchema({
'slotConditionErrors.$':{
type: ErrorSchema,
},
totalFilled: {
type: SimpleSchema.Integer,
defaultValue: 0,
}
});
const ComputedSlotSchema = new SimpleSchema()

View File

@@ -135,14 +135,6 @@ export default {
'parent.id': slot._id,
removed: {$ne: true},
}).fetch();
slot.totalFilled = 0;
slot.children.forEach(child => {
if (child.type === 'slotFiller'){
slot.totalFilled += child.slotQuantityFilled;
} else {
slot.totalFilled++;
}
});
return slot;
});
},