Browse Source

feat: Add model event listeners

Owen Diffey 1 year ago
parent
commit
86146e85c8
1 changed files with 24 additions and 0 deletions
  1. 24 0
      backend/src/modules/DataModule.ts

+ 24 - 0
backend/src/modules/DataModule.ts

@@ -135,6 +135,28 @@ export class DataModule extends BaseModule {
 			});
 	}
 
+	/**
+	 * registerEvents - Register events for schema with event module
+	 */
+	private async _registerEventListeners<
+		ModelName extends keyof Models,
+		SchemaType extends Schemas[keyof ModelName]
+	>(schema: SchemaType) {
+		const eventListeners = schema.get("eventListeners");
+
+		if (
+			typeof eventListeners !== "object" ||
+			Object.keys(eventListeners).length === 0
+		)
+			return;
+
+		await Promise.all(
+			Object.entries(eventListeners).map(async ([event, callback]) =>
+				EventsModule.subscribe("event", event, callback)
+			)
+		);
+	}
+
 	/**
 	 * loadModel - Import and load model schema
 	 *
@@ -174,6 +196,8 @@ export class DataModule extends BaseModule {
 
 		await this._registerEvents(modelName, schema);
 
+		await this._registerEventListeners(schema);
+
 		schema.set("toObject", { getters: true, virtuals: true });
 		schema.set("toJSON", { getters: true, virtuals: true });