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

10
import {
11
  sendWelcomeEmail,
12
  sendResetPasswordEmail,
13
  sendActivateAccountEmail,
14
} from "@app/services/mail";
15

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

25
      await sendWelcomeEmail(Number(data.userId), data.code);
26

27
      break;
28
    }
29

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

34
      await sendActivateAccountEmail(Number(data.userId), data.code);
35

36
      break;
37
    }
38

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

43
      await sendResetPasswordEmail(data.userId, data.token);
44

45
      break;
46
    }
47

48
    default:
49
      throw new Error(`Unknown mail job: ${job.name}`);
50
  }
51
}