eletrotupi / tcc/ api/src/lib/queue/processors/mail.tse733ebff3c2657c7f9c381347d45c2e015958b5a
1.4 KB | 58 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
import { logger } from "@app/lib/logger";
10

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

17
export async function mailProcessor(
18
  job: Job<MailJobData["data"]>,
19
): Promise<void> {
20
  // job.name is the discriminant
21
  switch (job.name as MailJobName) {
22
    case MailJobName.WelcomeEmail: {
23
      const data = job.data as WelcomeEmailPayload;
24
      logger.info({ userId: data.userId }, "[mail] dispatching welcome email");
25

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

28
      break;
29
    }
30

31
    case MailJobName.ActivateAccountEmail: {
32
      const data = job.data as ActivateAccountEmailPayload;
33
      logger.info(
34
        { userId: data.userId },
35
        "[mail] dispatching activation email",
36
      );
37

38
      await sendActivateAccountEmail(Number(data.userId), data.code);
39

40
      break;
41
    }
42

43
    case MailJobName.PasswordReset: {
44
      const data = job.data as PasswordResetPayload;
45
      logger.info(
46
        { userId: data.userId },
47
        "[mail] dispatching password reset email",
48
      );
49

50
      await sendResetPasswordEmail(data.userId, data.token);
51

52
      break;
53
    }
54

55
    default:
56
      throw new Error(`Unknown mail job: ${job.name}`);
57
  }
58
}