From 021a53ef36c77613495711d219cfc99d755ffb04 Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Wed, 3 Apr 2019 16:50:12 +0200 Subject: [PATCH] Moved properties schema, added 'removeProperty' method --- .../api/creature/properties/Actions.js | 2 +- .../api/creature/properties/Attributes.js | 2 +- app/imports/api/creature/properties/Buffs.js | 2 +- .../api/creature/properties/ClassLevels.js | 2 +- .../api/creature/properties/Classes.js | 2 +- .../creature/properties/DamageMultipliers.js | 2 +- .../api/creature/properties/Effects.js | 2 +- .../api/creature/properties/Experiences.js | 2 +- .../api/creature/properties/Features.js | 2 +- .../api/creature/properties/Folders.js | 2 +- app/imports/api/creature/properties/Notes.js | 2 +- .../api/creature/properties/Proficiencies.js | 2 +- .../api/creature/properties/Properties.js | 64 +++++++++++++++++++ app/imports/api/creature/properties/Rolls.js | 2 +- app/imports/api/creature/properties/Skills.js | 2 +- .../api/creature/properties/SpellLists.js | 2 +- app/imports/api/creature/properties/Spells.js | 2 +- .../properties/propertyUpdateMethods.js | 35 ---------- .../api/creature/subSchemas/PropertySchema.js | 29 --------- app/imports/api/inventory/Containers.js | 2 +- app/imports/api/inventory/Items.js | 2 +- app/imports/api/parenting/softRemove.js | 18 +++--- 22 files changed, 91 insertions(+), 91 deletions(-) create mode 100644 app/imports/api/creature/properties/Properties.js delete mode 100644 app/imports/api/creature/properties/propertyUpdateMethods.js delete mode 100644 app/imports/api/creature/subSchemas/PropertySchema.js diff --git a/app/imports/api/creature/properties/Actions.js b/app/imports/api/creature/properties/Actions.js index 6df2c72a..409c9459 100644 --- a/app/imports/api/creature/properties/Actions.js +++ b/app/imports/api/creature/properties/Actions.js @@ -2,7 +2,7 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; import AdjustmentSchema from '/imports/api/creature/subSchemas/AdjustmentSchema.js'; import StoredBuffSchema from '/imports/api/creature/properties/Buffs.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import ColorSchema from '/imports/api/creature/subSchemas/ColorSchema.js'; // Mixins diff --git a/app/imports/api/creature/properties/Attributes.js b/app/imports/api/creature/properties/Attributes.js index 530b0ad5..75619fe4 100644 --- a/app/imports/api/creature/properties/Attributes.js +++ b/app/imports/api/creature/properties/Attributes.js @@ -1,4 +1,4 @@ -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import ColorSchema from '/imports/api/creature/subSchemas/ColorSchema.js'; import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; diff --git a/app/imports/api/creature/properties/Buffs.js b/app/imports/api/creature/properties/Buffs.js index bfdcdaea..29359715 100644 --- a/app/imports/api/creature/properties/Buffs.js +++ b/app/imports/api/creature/properties/Buffs.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import { EffectSchema } from '/imports/api/creature/properties/Effects.js'; // Mixins diff --git a/app/imports/api/creature/properties/ClassLevels.js b/app/imports/api/creature/properties/ClassLevels.js index 09cc2422..b9aa42d2 100644 --- a/app/imports/api/creature/properties/ClassLevels.js +++ b/app/imports/api/creature/properties/ClassLevels.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import VARIABLE_NAME_REGEX from '/imports/constants/VARIABLE_NAME_REGEX.js'; // Mixins diff --git a/app/imports/api/creature/properties/Classes.js b/app/imports/api/creature/properties/Classes.js index 60174f71..7f12f41a 100644 --- a/app/imports/api/creature/properties/Classes.js +++ b/app/imports/api/creature/properties/Classes.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import ColorSchema from "/imports/api/creature/subSchemas/ColorSchema.js"; import VARIABLE_NAME_REGEX from '/imports/constants/VARIABLE_NAME_REGEX.js'; diff --git a/app/imports/api/creature/properties/DamageMultipliers.js b/app/imports/api/creature/properties/DamageMultipliers.js index 9330d658..24badb1a 100644 --- a/app/imports/api/creature/properties/DamageMultipliers.js +++ b/app/imports/api/creature/properties/DamageMultipliers.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import DAMAGE_TYPES from '/imports/constants/DAMAGE_TYPES.js'; // Mixins diff --git a/app/imports/api/creature/properties/Effects.js b/app/imports/api/creature/properties/Effects.js index 7ebf1170..81118182 100644 --- a/app/imports/api/creature/properties/Effects.js +++ b/app/imports/api/creature/properties/Effects.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' // Mixins import recomputeCreatureMixin from '/imports/api/mixins/recomputeCreatureMixin.js'; diff --git a/app/imports/api/creature/properties/Experiences.js b/app/imports/api/creature/properties/Experiences.js index 27985fef..9c9937b5 100644 --- a/app/imports/api/creature/properties/Experiences.js +++ b/app/imports/api/creature/properties/Experiences.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import recomputeCreatureXP from '/imports/api/creature/creatureComputation.js'; // Mixins diff --git a/app/imports/api/creature/properties/Features.js b/app/imports/api/creature/properties/Features.js index a31b73fa..2c2ffa2e 100644 --- a/app/imports/api/creature/properties/Features.js +++ b/app/imports/api/creature/properties/Features.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import ColorSchema from '/imports/api/creature/subSchemas/ColorSchema.js'; // Mixins diff --git a/app/imports/api/creature/properties/Folders.js b/app/imports/api/creature/properties/Folders.js index 5538d1dd..3fb32e40 100644 --- a/app/imports/api/creature/properties/Folders.js +++ b/app/imports/api/creature/properties/Folders.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' // Mixins import creaturePermissionMixin from '/imports/api/mixins/creaturePermissionMixin.js'; diff --git a/app/imports/api/creature/properties/Notes.js b/app/imports/api/creature/properties/Notes.js index f98cfd22..f2070aa2 100644 --- a/app/imports/api/creature/properties/Notes.js +++ b/app/imports/api/creature/properties/Notes.js @@ -1,7 +1,7 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; import ColorSchema from "/imports/api/creature/subSchemas/ColorSchema.js"; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' // Mixins import creaturePermissionMixin from '/imports/api/mixins/creaturePermissionMixin.js'; diff --git a/app/imports/api/creature/properties/Proficiencies.js b/app/imports/api/creature/properties/Proficiencies.js index 615743a0..a50d3a42 100644 --- a/app/imports/api/creature/properties/Proficiencies.js +++ b/app/imports/api/creature/properties/Proficiencies.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' // Mixins import recomputeCreatureMixin from '/imports/api/mixins/recomputeCreatureMixin.js'; diff --git a/app/imports/api/creature/properties/Properties.js b/app/imports/api/creature/properties/Properties.js new file mode 100644 index 00000000..f10afc30 --- /dev/null +++ b/app/imports/api/creature/properties/Properties.js @@ -0,0 +1,64 @@ +import SimpleSchema from 'simpl-schema'; +import SoftRemovableSchema from '/imports/api/parenting/SoftRemovableSchema.js'; +import ChildSchema from '/imports/api/parenting/ChildSchema.js'; +import softRemove from '/imports/api/parenting/softRemove.js'; +import getCollectionByName from '/imports/api/parenting/getCollectionByName.js'; + +// Mixins +import recomputeCreatureMixin from '/imports/api/mixins/recomputeCreatureMixin.js'; +import creaturePermissionMixin from '/imports/api/mixins/creaturePermissionMixin.js'; +import simpleSchemaMixin from '/imports/api/mixins/simpleSchemaMixin.js'; + +const PropertySchema = new SimpleSchema({ + charId: { + type: String, + regEx: SimpleSchema.RegEx.Id, + index: 1, + optional: true, + }, + name: { + type: String, + optional: true, + }, + enabled: { + type: Boolean, + defaultValue: true, + }, + order: { + type: SimpleSchema.Integer, + index: true, + }, +}); + +PropertySchema.extend(SoftRemovableSchema); +PropertySchema.extend(ChildSchema); + +// Always recomputes the character, because we don't know the extent of the tree +// that was removed with this document +const softRemoveProperty = new ValidatedMethod({ + name: 'softRemoveProperty', + mixins: [ + simpleSchemaMixin, + recomputeCreatureMixin, + creaturePermissionMixin, + ], + getCharId({_id, collection}){ + let col = getCollectionByName(collection); + let doc = col.findOne(_id, {fields: {charId: 1}}); + if (!doc || !doc.charId){ + throw new Meteor.Error(`Could not find charId of ${_id} in ${collection}`); + } else { + return doc.charId; + } + }, + permission: 'edit', + schema: new SimpleSchema({ + _id: SimpleSchema.RegEx.Id, + collection: String, + }), + run({_id, collection}){ + softRemove({_id, collection}); + }, +}); + +export { PropertySchema, softRemoveProperty }; diff --git a/app/imports/api/creature/properties/Rolls.js b/app/imports/api/creature/properties/Rolls.js index 6a53a3f1..2d498300 100644 --- a/app/imports/api/creature/properties/Rolls.js +++ b/app/imports/api/creature/properties/Rolls.js @@ -1,5 +1,5 @@ import SimpleSchema from 'simpl-schema'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import AdjustmentSchema from '/imports/api/creature/subSchemas/AdjustmentSchema.js'; import StoredBuffSchema from '/imports/api/creature/properties/Buffs.js'; diff --git a/app/imports/api/creature/properties/Skills.js b/app/imports/api/creature/properties/Skills.js index 086e44f0..7a1404af 100644 --- a/app/imports/api/creature/properties/Skills.js +++ b/app/imports/api/creature/properties/Skills.js @@ -1,6 +1,6 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import ColorSchema from '/imports/api/creature/subSchemas/ColorSchema.js'; // Mixins diff --git a/app/imports/api/creature/properties/SpellLists.js b/app/imports/api/creature/properties/SpellLists.js index 20f58ad8..b5f8a5d9 100644 --- a/app/imports/api/creature/properties/SpellLists.js +++ b/app/imports/api/creature/properties/SpellLists.js @@ -1,7 +1,7 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; import ColorSchema from "/imports/api/creature/subSchemas/ColorSchema.js"; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' // Mixins import creaturePermissionMixin from '/imports/api/mixins/creaturePermissionMixin.js'; diff --git a/app/imports/api/creature/properties/Spells.js b/app/imports/api/creature/properties/Spells.js index be4f061e..8290fc0d 100644 --- a/app/imports/api/creature/properties/Spells.js +++ b/app/imports/api/creature/properties/Spells.js @@ -1,7 +1,7 @@ import ColorSchema from '/imports/api/creature/subSchemas/ColorSchema.js'; import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' // Mixins import creaturePermissionMixin from '/imports/api/mixins/creaturePermissionMixin.js'; diff --git a/app/imports/api/creature/properties/propertyUpdateMethods.js b/app/imports/api/creature/properties/propertyUpdateMethods.js deleted file mode 100644 index a8f353b0..00000000 --- a/app/imports/api/creature/properties/propertyUpdateMethods.js +++ /dev/null @@ -1,35 +0,0 @@ -import updateAction from '/imports/api/creature/properties/Actions.js'; -import updateAttribute from '/imports/api/creature/properties/Attributes.js'; -import updateBuff from '/imports/api/creature/properties/Buffs.js'; -import updateClass from '/imports/api/creature/properties/Classes.js'; -import updateClassLevel from '/imports/api/creature/properties/ClassLevels.js'; -import updateDamageMultiplier from '/imports/api/creature/properties/DamageMultipliers.js'; -import updateEffect from '/imports/api/creature/properties/Effects.js'; -import updateExperience from '/imports/api/creature/properties/Experiences.js'; -import updateFeature from '/imports/api/creature/properties/Features.js'; -import updateFolder from '/imports/api/creature/properties/Folders.js'; -import updateNote from '/imports/api/creature/properties/Notes.js'; -import updateProficiency from '/imports/api/creature/properties/Proficiencies.js'; -import updateRoll from '/imports/api/creature/properties/Rolls.js'; -import updateSkill from '/imports/api/creature/properties/Skills.js'; -import updateSpellList from '/imports/api/creature/properties/SpellLists.js'; -import updateSpell from '/imports/api/creature/properties/Spells.js'; - -export default Object.freeze({ - actions: updateAction, - attributes: updateAttribute, - buffs: updateBuff, - classs: updateClass, - classLevels: updateClassLevel, - damageMultipliers: updateDamageMultiplier, - effects: updateEffect, - experiences: updateExperience, - features: updateFeature, - folders: updateFolder, - notes: updateNote, - proficienciess: updateProficiency, - rolls: updateRoll, - skills: updateSkill, - spellLists: updateSpellList, - spells: updateSpell, -}); diff --git a/app/imports/api/creature/subSchemas/PropertySchema.js b/app/imports/api/creature/subSchemas/PropertySchema.js deleted file mode 100644 index 2adc7066..00000000 --- a/app/imports/api/creature/subSchemas/PropertySchema.js +++ /dev/null @@ -1,29 +0,0 @@ -import SimpleSchema from 'simpl-schema'; -import SoftRemovableSchema from '/imports/api/parenting/SoftRemovableSchema.js'; -import ChildSchema from '/imports/api/parenting/ChildSchema.js'; - -const PropertySchema = new SimpleSchema({ - charId: { - type: String, - regEx: SimpleSchema.RegEx.Id, - index: 1, - optional: true, - }, - name: { - type: String, - optional: true, - }, - enabled: { - type: Boolean, - defaultValue: true, - }, - order: { - type: SimpleSchema.Integer, - index: true, - }, -}); - -PropertySchema.extend(SoftRemovableSchema); -PropertySchema.extend(ChildSchema); - -export default PropertySchema; diff --git a/app/imports/api/inventory/Containers.js b/app/imports/api/inventory/Containers.js index 98ac4bf5..efd13b41 100644 --- a/app/imports/api/inventory/Containers.js +++ b/app/imports/api/inventory/Containers.js @@ -1,7 +1,7 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; import ColorSchema from "/imports/api/creature/subSchemas/ColorSchema.js"; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import ChildSchema from '/imports/api/parenting/ChildSchema.js'; //set up the collection for containers diff --git a/app/imports/api/inventory/Items.js b/app/imports/api/inventory/Items.js index c704b942..a87291f1 100644 --- a/app/imports/api/inventory/Items.js +++ b/app/imports/api/inventory/Items.js @@ -1,7 +1,7 @@ import SimpleSchema from 'simpl-schema'; import schema from '/imports/api/schema.js'; import ColorSchema from "/imports/api/creature/subSchemas/ColorSchema.js"; -import PropertySchema from '/imports/api/creature/subSchemas/PropertySchema.js'; +import { PropertySchema } from '/imports/api/creature/properties/Properties.js' import ChildSchema from '/imports/api/parenting/ChildSchema.js'; Items = new Mongo.Collection("items"); diff --git a/app/imports/api/parenting/softRemove.js b/app/imports/api/parenting/softRemove.js index a64053de..71eb3b18 100644 --- a/app/imports/api/parenting/softRemove.js +++ b/app/imports/api/parenting/softRemove.js @@ -2,11 +2,11 @@ import getCollectionByName from '/imports/api/parenting/getCollectionByName.js'; import updateDecendents from '/imports/api/parenting/parenting.js'; // 1 + n database hits -export function softRemove({id, collection}){ +export function softRemove({_id, collection}){ let removalDate = new Date(); // Remove this document collection = getCollectionByName(collection); - collection.update(id, {$set: { + collection.update(_id, {$set: { removed: true, removedAt: removalDate, }, $unset: { @@ -15,15 +15,15 @@ export function softRemove({id, collection}){ // Remove all the decendents that have not yet been removed, and set them to be // removed with this document updateDecendents({ - ancestorId: id, + ancestorId: _id, filter: {removed: {$ne: true}}, modifier: {$set: { removed: true, removedAt: removalDate, - removedWith: id, + removedWith: _id, }}, }); -}; +} const restoreError = function(){ throw new Meteor.Error('restore-failed', @@ -31,10 +31,10 @@ const restoreError = function(){ ); }; -export function restore({id, collection}){ +export function restore({_id, collection}){ collection = getCollectionByName(collection); let numUpdated = collection.update({ - _id: id, + _id, removedWith: {$exists: false} }, { $unset: { removed: 1, @@ -42,9 +42,9 @@ export function restore({id, collection}){ }}); if (numUpdated === 0) restoreError(); updateDecendents({ - ancestorId: id, + ancestorId: _id, filter: { - removedWith: id, + removedWith: _id, }, modifier: { $unset: { removed: 1,