eletrotupi / tcc/ api/src/lib/queue/processors/mail.ts92fcd2f123abee1a1608f8f79f17fc9ca250e673
1.2 KB | 48 lines Raw
1
import { Job } from 'bullmq';
2
import {
3
  MailJobName, MailJobData,
4
  WelcomeEmailPayload,
5
  PasswordResetPayload,
6
  ActivateAccountEmailPayload
7
} from '@app/lib/queue/types';
8

9
import {
10
  sendWelcomeEmail,
11
  sendResetPasswordEmail,
12
  sendActivateAccountEmail
13
} from '@app/services/mail'
14

15
export async function mailProcessor(job: Job<MailJobData['data']>): Promise<void> {
16
  // job.name is the discriminant
17
  switch (job.name as MailJobName) {
18
    case MailJobName.WelcomeEmail: {
19
      const data = job.data as WelcomeEmailPayload;
20
      console.log("Dispatching an welcome email", data);
21

22
      sendWelcomeEmail(Number(data.userId), data.code);
23

24
      break;
25
    }
26

27
    case MailJobName.ActivateAccountEmail: {
28
      const data = job.data as ActivateAccountEmailPayload;
29
      console.log("Dispatching an activate account email", data);
30

31
      sendActivateAccountEmail(Number(data.userId), data.code);
32

33
      break;
34
    }
35

36
    case MailJobName.PasswordReset: {
37
      const data = job.data as PasswordResetPayload;
38
      console.log("Dispatching an welcome email", data);
39

40
      await sendResetPasswordEmail(data.userId, data.token);
41

42
      break;
43
    }
44

45
    default:
46
      throw new Error(`Unknown mail job: ${job.name}`);
47
  }
48
}