From dc7b20d50b478e9102d8146f7b7ed6a59b1610c6 Mon Sep 17 00:00:00 2001 From: Naz Date: Tue, 29 Aug 2023 14:43:32 +0800 Subject: [PATCH] Extracted domain event interceptor to separate init closes https://github.com/TryGhost/Arch/issues/13 - Model to Domain event interceptor is a class that does not strictly belong to Collections. It's supposed to be used in any new code that depends on legacy bookshelf model events. Extracted it's initialization to it's own service for clarity and visibility. --- ghost/core/core/boot.js | 2 ++ ghost/core/core/server/services/collections/service.js | 1 - .../index.js} | 10 +++++++++- 3 files changed, 11 insertions(+), 2 deletions(-) rename ghost/core/core/server/services/{collections/intercept-events.js => model-to-domain-event-interceptor/index.js} (77%) diff --git a/ghost/core/core/boot.js b/ghost/core/core/boot.js index 6ab851dd8f..21a27e93ca 100644 --- a/ghost/core/core/boot.js +++ b/ghost/core/core/boot.js @@ -326,6 +326,7 @@ async function initServices({config}) { const slackNotifications = require('./server/services/slack-notifications'); const mediaInliner = require('./server/services/media-inliner'); const collections = require('./server/services/collections'); + const modelToDomainEventInterceptor = require('./server/services/model-to-domain-event-interceptor'); const mailEvents = require('./server/services/mail-events'); const donationService = require('./server/services/donations'); @@ -365,6 +366,7 @@ async function initServices({config}) { emailSuppressionList.init(), slackNotifications.init(), collections.init(), + modelToDomainEventInterceptor.init(), mediaInliner.init(), mailEvents.init(), donationService.init() diff --git a/ghost/core/core/server/services/collections/service.js b/ghost/core/core/server/services/collections/service.js index 32d7ed6c7c..db50168f3a 100644 --- a/ghost/core/core/server/services/collections/service.js +++ b/ghost/core/core/server/services/collections/service.js @@ -36,7 +36,6 @@ class CollectionsServiceWrapper { } inited = true; this.api.subscribeToEvents(); - require('./intercept-events')(); } } diff --git a/ghost/core/core/server/services/collections/intercept-events.js b/ghost/core/core/server/services/model-to-domain-event-interceptor/index.js similarity index 77% rename from ghost/core/core/server/services/collections/intercept-events.js rename to ghost/core/core/server/services/model-to-domain-event-interceptor/index.js index 4020d9abb8..e40077eced 100644 --- a/ghost/core/core/server/services/collections/intercept-events.js +++ b/ghost/core/core/server/services/model-to-domain-event-interceptor/index.js @@ -1,4 +1,11 @@ -module.exports = () => { +let inited = false; + +module.exports.init = async () => { + if (inited) { + return; + } + inited = true; + const DomainEvents = require('@tryghost/domain-events/lib/DomainEvents'); const {ModelToDomainEventInterceptor} = require('@tryghost/model-to-domain-event-interceptor'); const events = require('../../lib/common/events'); @@ -6,5 +13,6 @@ module.exports = () => { ModelEvents: events, DomainEvents: DomainEvents }); + eventInterceptor.init(); };