diff --git a/lib/AbstractApiModule.js b/lib/AbstractApiModule.js index 0934ce2..47c3d88 100644 --- a/lib/AbstractApiModule.js +++ b/lib/AbstractApiModule.js @@ -130,6 +130,7 @@ class AbstractApiModule extends AbstractModule { schemaName: this.schemaName, collectionName: this.collectionName, validate: true, + invokePreHook: true, invokePostHook: true }) } @@ -534,13 +535,13 @@ class AbstractApiModule extends AbstractModule { async insert (data, options = {}, mongoOptions = {}) { options.schemaName = options.schemaName ?? await this.getSchemaName(data) this.setDefaultOptions(options) - await this.preInsertHook.invoke(data, options, mongoOptions) + if (options.invokePreHook !== false) await this.preInsertHook.invoke(data, options, mongoOptions) data = await this.validate(options.schemaName, data, options) const mongodb = await this.app.waitForModule('mongodb') const results = await mongodb.insert(options.collectionName, data, mongoOptions) - if (options.invokePostHook) await this.postInsertHook.invoke(results) + if (options.invokePostHook !== false) await this.postInsertHook.invoke(results) return results } @@ -578,14 +579,14 @@ class AbstractApiModule extends AbstractModule { } const formattedData = options.rawUpdate ? { $set: {}, ...data } : { $set: data } - await this.preUpdateHook.invoke(originalDoc, formattedData.$set, options, mongoOptions) + if (options.invokePreHook !== false) await this.preUpdateHook.invoke(originalDoc, formattedData.$set, options, mongoOptions) formattedData.$set = await this.validate(options.schemaName, { ...ApiUtils.stringifyValues(originalDoc), ...formattedData.$set }, options) const results = await mongodb.update(options.collectionName, query, formattedData, mongoOptions) - if (options.invokePostHook) await this.postUpdateHook.invoke(originalDoc, results) + if (options.invokePostHook !== false) await this.postUpdateHook.invoke(originalDoc, results) return results } @@ -605,9 +606,9 @@ class AbstractApiModule extends AbstractModule { if (!originalDoc) { throw this.app.errors.NOT_FOUND.setData({ id: query._id ?? query.toString(), type: options.schemaName }) } - await this.preDeleteHook.invoke(originalDoc, options, mongoOptions) + if (options.invokePreHook !== false) await this.preDeleteHook.invoke(originalDoc, options, mongoOptions) await mongodb.delete(options.collectionName, query, mongoOptions) - if (options.invokePostHook) await this.postDeleteHook.invoke(originalDoc) + if (options.invokePostHook !== false) await this.postDeleteHook.invoke(originalDoc) return originalDoc } @@ -625,7 +626,7 @@ class AbstractApiModule extends AbstractModule { const toDelete = await mongodb.find(options.collectionName, query) await mongodb.deleteMany(options.collectionName, query, mongoOptions) - if (options.invokePostHook) await Promise.all(toDelete.map(d => this.postDeleteHook.invoke(d))) + if (options.invokePostHook !== false) await Promise.all(toDelete.map(d => this.postDeleteHook.invoke(d))) return toDelete } }