From 17aef3741257780a199758ee01611276e1bb9020 Mon Sep 17 00:00:00 2001 From: Chris Steele Date: Mon, 17 Feb 2025 11:58:09 +0000 Subject: [PATCH 1/2] Allow prehook invocation to be optional --- lib/AbstractApiModule.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/AbstractApiModule.js b/lib/AbstractApiModule.js index 0934ce2..362d162 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,7 +535,7 @@ 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') @@ -578,7 +579,7 @@ 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 @@ -605,7 +606,7 @@ 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) return originalDoc From 6785272733624f57b3ce5f7de9df1eeed40f3af0 Mon Sep 17 00:00:00 2001 From: Chris Steele Date: Tue, 18 Feb 2025 13:44:09 +0000 Subject: [PATCH 2/2] Minor review amendments --- lib/AbstractApiModule.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/AbstractApiModule.js b/lib/AbstractApiModule.js index 362d162..47c3d88 100644 --- a/lib/AbstractApiModule.js +++ b/lib/AbstractApiModule.js @@ -541,7 +541,7 @@ class AbstractApiModule extends AbstractModule { 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 } @@ -586,7 +586,7 @@ class AbstractApiModule extends AbstractModule { }, 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 } @@ -608,7 +608,7 @@ class AbstractApiModule extends AbstractModule { } 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 } @@ -626,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 } }