@@ -2,49 +2,56 @@ import { Processor, WorkerHost } from "@nestjs/bullmq";
22import { AuthService } from "./auth.service" ;
33import { Job } from "bullmq" ;
44import {
5- QUEUE_EMAIL ,
6- QueueEmailJobData ,
7- QueueEmailJobPayloads ,
5+ EMAIL_QUEUE ,
6+ EmailQueueJobData ,
7+ EmailQueueJobPayloads ,
88} from "./auth.queue" ;
99
10- @Processor ( QUEUE_EMAIL . name )
10+ type QueueEmailJobType = EmailQueueJobData [ "type" ] ;
11+ type QueueEmailJob < T extends QueueEmailJobType = QueueEmailJobType > = Job <
12+ Extract < EmailQueueJobData , { type : T } > ,
13+ unknown ,
14+ string
15+ > ;
16+
17+ @Processor ( EMAIL_QUEUE . name )
1118export class AuthEmailConsumer extends WorkerHost {
1219 constructor ( private readonly authService : AuthService ) {
1320 super ( ) ;
1421 }
1522
16- async process (
17- job : Job < QueueEmailJobData , unknown , string > ,
18- ) : Promise < unknown > {
19- switch ( job . name ) {
20- case QUEUE_EMAIL . actions . SEND_WELCOME_EMAIL :
21- return this . sendWelcomeEmail (
22- job as Job < QueueEmailJobPayloads [ "SEND_WELCOME_EMAIL" ] > ,
23- ) ;
24- case QUEUE_EMAIL . actions . SEND_RESET_PASSWORD_EMAIL :
25- return this . sendResetPasswordEmail (
26- job as Job < QueueEmailJobPayloads [ "SEND_RESET_PASSWORD_EMAIL" ] > ,
27- ) ;
28- default :
29- throw new Error ( `Unknown job name: ${ job . name } ` ) ;
23+ async process ( job : QueueEmailJob ) : Promise < unknown > {
24+ if ( this . isJobOfType ( job , EMAIL_QUEUE . actions . SEND_WELCOME_EMAIL ) ) {
25+ return this . sendWelcomeEmail ( job . data ) ;
26+ }
27+
28+ if ( this . isJobOfType ( job , EMAIL_QUEUE . actions . SEND_RESET_PASSWORD_EMAIL ) ) {
29+ return this . sendResetPasswordEmail ( job . data ) ;
3030 }
31+
32+ throw new Error ( `Unknown job name: ${ job . name } ` ) ;
3133 }
3234
3335 async sendResetPasswordEmail (
34- job : Job < QueueEmailJobPayloads [ "SEND_RESET_PASSWORD_EMAIL" ] > ,
36+ payload : EmailQueueJobPayloads [ "SEND_RESET_PASSWORD_EMAIL" ] ,
3537 ) {
36- const { url, name, email } = job . data ;
38+ const { url, name, email } = payload ;
3739 return this . authService . sendResetPassordEmail ( email , { url, name } ) ;
3840 }
3941
40- async sendWelcomeEmail (
41- job : Job < QueueEmailJobPayloads [ "SEND_WELCOME_EMAIL" ] > ,
42- ) {
43- const { url, name, email } = job . data ;
42+ async sendWelcomeEmail ( payload : EmailQueueJobPayloads [ "SEND_WELCOME_EMAIL" ] ) {
43+ const { url, name, email } = payload ;
4444 return this . authService . sendWelcomeVerifyEmail ( email , {
4545 url,
4646 name,
4747 email,
4848 } ) ;
4949 }
50+
51+ private isJobOfType < T extends QueueEmailJobType > (
52+ job : QueueEmailJob ,
53+ type : T ,
54+ ) : job is QueueEmailJob < T > {
55+ return job . data . type === type ;
56+ }
5057}
0 commit comments