Skip to content

Commit fad64b1

Browse files
refactor: error handling for email provider
Signed-off-by: pranalidhanavade <pranali.dhanavade@ayanworks.com>
1 parent 349a223 commit fad64b1

3 files changed

Lines changed: 32 additions & 11 deletions

File tree

apps/user/src/main.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
2+
3+
import { CommonConstants } from '@credebl/common/common.constant';
14
import { HttpExceptionFilter } from 'libs/http-exception.filter';
25
import { Logger } from '@nestjs/common';
36
import { NestFactory } from '@nestjs/core';
7+
import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter';
48
import { UserModule } from './user.module';
5-
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
69
import { getNatsOptions } from '@credebl/common/nats.config';
7-
import { CommonConstants } from '@credebl/common/common.constant';
8-
import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter';
910

1011
const logger = new Logger();
1112

@@ -19,5 +20,24 @@ async function bootstrap(): Promise<void> {
1920

2021
await app.listen();
2122
logger.log('User Microservice is listening to NATS ');
23+
const supportedProviders = ['sendgrid', 'resend', 'smtp'] as const;
24+
type EmailProvider = (typeof supportedProviders)[number];
25+
const provider = process.env.EMAIL_PROVIDER?.toLowerCase();
26+
27+
if (!provider) {
28+
Logger.warn(
29+
`Email service is disabled because EMAIL_PROVIDER is not set. ` +
30+
`Configure EMAIL_PROVIDER (sendgrid, resend, or smtp) to enable sending emails.`
31+
);
32+
} else if (!supportedProviders.includes(provider as EmailProvider)) {
33+
Logger.warn(
34+
`Unknown EMAIL_PROVIDER value "${process.env.EMAIL_PROVIDER}". ` +
35+
`Supported providers are: sendgrid, resend, smtp. ` +
36+
`Email service will be disabled.`
37+
);
38+
} else {
39+
const Emailprovider = provider as EmailProvider;
40+
logger.log(`Email provider configured: ${Emailprovider}`);
41+
}
2242
}
2343
bootstrap();

libs/common/src/common.constant.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,9 @@ export enum CommonConstants {
305305
PLATFORM_ADMIN_EMAIL = 'platform.admin@yopmail.com',
306306
PLATFORM_ADMIN_ORG = 'Platform-admin',
307307
PLATFORM_ADMIN_ORG_ROLE = 'platform_admin',
308-
DEFAULT_EMAIL_PROVIDER = 'sendgrid',
308+
SENDGRID_EMAIL_PROVIDER = 'sendgrid',
309+
RESEND_EMAIL_PROVIDER = 'resend',
310+
SMTP_EMAIL_PROVIDER = 'smtp',
309311
USER_HOLDER_ROLE = 'holder',
310312

311313
//onBoarding Type

libs/common/src/email.service.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,30 @@ export class EmailService {
1111
private readonly logger = new Logger(EmailService.name);
1212

1313
async sendEmail(emailDto: EmailDto): Promise<boolean> {
14-
const provider = process.env.EMAIL_PROVIDER?.toLowerCase() || CommonConstants.DEFAULT_EMAIL_PROVIDER;
14+
const provider = process.env.EMAIL_PROVIDER?.toLowerCase();
1515

1616
this.logger.debug(`Email Provider is: ${provider}`);
1717
let result: boolean;
1818

1919
try {
2020
switch (provider) {
21-
case 'sendgrid':
21+
case CommonConstants.RESEND_EMAIL_PROVIDER:
2222
result = await sendWithSendGrid(emailDto);
2323
break;
24-
case 'resend':
24+
case CommonConstants.RESEND_EMAIL_PROVIDER:
2525
result = await sendWithResend(emailDto);
2626
break;
27-
case 'smtp':
27+
case CommonConstants.SMTP_EMAIL_PROVIDER:
2828
result = await sendWithSMTP(emailDto);
2929
break;
3030
default:
31-
this.logger.warn(`Unknown email provider: ${provider}, defaulting to SendGrid.`);
32-
result = await sendWithSendGrid(emailDto);
31+
this.logger.warn(`Unknown email provider: ${provider}`);
32+
return false;
3333
}
3434
} catch (error) {
3535
this.logger.error(`Failed to send email using ${provider}: ${error.message}`);
3636
throw error;
3737
}
38-
3938
return result;
4039
}
4140
}

0 commit comments

Comments
 (0)