Ver código fonte

refactor(email-plugin) Remove worker from email-plugin

Fred Cox 5 anos atrás
pai
commit
510f824431

+ 0 - 29
packages/email-plugin/src/email-processor.controller.ts

@@ -1,29 +0,0 @@
-import { Controller, Inject, OnModuleInit } from '@nestjs/common';
-import { MessagePattern } from '@nestjs/microservices';
-import { asyncObservable } from '@vendure/core';
-import { Observable } from 'rxjs';
-
-import { EMAIL_PLUGIN_OPTIONS } from './constants';
-import { EmailProcessor } from './email-processor';
-import { EmailPluginOptions, EmailWorkerMessage } from './types';
-
-/**
- * Runs on the Worker process and does the actual work of generating and sending the emails.
- */
-@Controller()
-export class EmailProcessorController extends EmailProcessor implements OnModuleInit {
-    constructor(@Inject(EMAIL_PLUGIN_OPTIONS) protected options: EmailPluginOptions) {
-        super(options);
-    }
-
-    async onModuleInit() {
-        await super.init();
-    }
-
-    @MessagePattern(EmailWorkerMessage.pattern)
-    sendEmail(data: EmailWorkerMessage['data']): Observable<EmailWorkerMessage['response']> {
-        return asyncObservable(async () => {
-            return this.process(data);
-        });
-    }
-}

+ 4 - 2
packages/email-plugin/src/email-processor.ts

@@ -1,9 +1,10 @@
+import { Inject, Injectable } from '@nestjs/common';
 import { InternalServerError, Logger } from '@vendure/core';
 import fs from 'fs-extra';
 
 import { deserializeAttachments } from './attachment-utils';
 import { isDevModeOptions } from './common';
-import { loggerCtx } from './constants';
+import { EMAIL_PLUGIN_OPTIONS, loggerCtx } from './constants';
 import { HandlebarsMjmlGenerator } from './handlebars-mjml-generator';
 import { NodemailerEmailSender } from './nodemailer-email-sender';
 import { TemplateLoader } from './template-loader';
@@ -20,13 +21,14 @@ import {
  * the EmailPlugin. It is arranged this way primarily to accommodate easier testing, so that the
  * tests can be run without needing all the JobQueue stuff which would require a full e2e test.
  */
+@Injectable()
 export class EmailProcessor {
     protected templateLoader: TemplateLoader;
     protected emailSender: EmailSender;
     protected generator: EmailGenerator;
     protected transport: EmailTransportOptions;
 
-    constructor(protected options: EmailPluginOptions) {}
+    constructor(@Inject(EMAIL_PLUGIN_OPTIONS) protected options: EmailPluginOptions) {}
 
     async init() {
         this.templateLoader = new TemplateLoader(this.options.templatePath);

+ 3 - 11
packages/email-plugin/src/plugin.ts

@@ -13,14 +13,12 @@ import {
     RuntimeVendureConfig,
     Type,
     VendurePlugin,
-    WorkerService,
 } from '@vendure/core';
 
 import { isDevModeOptions } from './common';
 import { EMAIL_PLUGIN_OPTIONS } from './constants';
 import { DevMailbox } from './dev-mailbox';
 import { EmailProcessor } from './email-processor';
-import { EmailProcessorController } from './email-processor.controller';
 import { EmailEventHandler, EmailEventHandlerWithAsyncData } from './event-handler';
 import {
     EmailPluginDevModeOptions,
@@ -169,8 +167,7 @@ import {
  */
 @VendurePlugin({
     imports: [PluginCommonModule],
-    providers: [{ provide: EMAIL_PLUGIN_OPTIONS, useFactory: () => EmailPlugin.options }],
-    workers: [EmailProcessorController],
+    providers: [{ provide: EMAIL_PLUGIN_OPTIONS, useFactory: () => EmailPlugin.options }, EmailProcessor],
     configuration: config => EmailPlugin.configure(config),
 })
 export class EmailPlugin implements OnApplicationBootstrap, OnVendureBootstrap, OnVendureClose {
@@ -183,7 +180,7 @@ export class EmailPlugin implements OnApplicationBootstrap, OnVendureBootstrap,
     constructor(
         private eventBus: EventBus,
         private moduleRef: ModuleRef,
-        private workerService: WorkerService,
+        private emailProcessor: EmailProcessor,
         private jobQueueService: JobQueueService,
     ) {}
 
@@ -232,12 +229,7 @@ export class EmailPlugin implements OnApplicationBootstrap, OnVendureBootstrap,
             this.jobQueue = this.jobQueueService.createQueue({
                 name: 'send-email',
                 process: job => {
-                    return new Promise((resolve, reject) => {
-                        this.workerService.send(new EmailWorkerMessage(job.data)).subscribe({
-                            complete: () => resolve(),
-                            error: err => reject(err),
-                        });
-                    });
+                    return this.emailProcessor.process(job.data);
                 },
             });
         }