feat: Simple nodemailer integration

This commit is contained in:
SauravDhakal
2026-03-07 07:38:50 +05:45
parent 496d689ec1
commit 6fc494687a
12 changed files with 266 additions and 7 deletions

View File

@@ -14,6 +14,7 @@ import { OrganizationModule } from './organization/organization.module';
import { OrganizationMembershipModule } from './organization-membership/organization-membership.module';
import { AuthorizationModule } from './authorization/authorization.module';
import { CacheModule } from './cache/cache.module';
import { MailModule } from 'core/mail/mail.module';
@Module({
imports: [
@@ -28,6 +29,7 @@ import { CacheModule } from './cache/cache.module';
OrganizationMembershipModule,
AuthorizationModule,
CacheModule,
MailModule
],
controllers: [AppController],
providers: [

View File

@@ -6,6 +6,7 @@ import { AuthGuard } from './guards/auth.guard';
import { UserModule } from 'src/user/user.module';
import { JwtModule } from '@nestjs/jwt';
import { RequestContextModule } from 'core/als/request-context.module';
import { MailModule } from 'core/mail/mail.module';
@Global()
@Module({
@@ -17,6 +18,11 @@ import { RequestContextModule } from 'core/als/request-context.module';
},
],
controllers: [AuthController],
imports: [UserModule, JwtModule, RequestContextModule],
imports: [
UserModule,
JwtModule,
RequestContextModule,
MailModule
],
})
export class AuthModule {}
export class AuthModule { }

View File

@@ -5,6 +5,8 @@ import * as bcrypt from 'bcrypt';
import { UserService } from 'src/user/user.service';
import { TokenInputType } from './types';
import { JwtService } from '@nestjs/jwt';
import { MailService } from 'core/mail/mail.service';
import EmailTemplates from 'common/emails';
@Injectable()
@Public()
@@ -12,7 +14,8 @@ export class AuthService {
constructor(
private readonly userService: UserService,
private readonly jwtService: JwtService,
) {}
private readonly mailService: MailService,
) { }
async register(dto: RegisterUserRequestDTO) {
const hashedPassword = await bcrypt.hash(dto.password, 10);
@@ -21,6 +24,11 @@ export class AuthService {
password: hashedPassword,
});
this.mailService.sendMail({
to: dto.email,
subject: "Welcome onboard",
body: EmailTemplates.welcomeToApp
})
return true;
}
@@ -50,9 +58,9 @@ export class AuthService {
};
}
logout() {}
logout() { }
resetPassword() {}
resetPassword() { }
// TODO: Use nest jwt
private async genSignedTokens(token: TokenInputType) {

View File

@@ -2,7 +2,7 @@ import { Body, Controller, Delete, Get, Param, ParseEnumPipe, ParseUUIDPipe, Pat
import { OrganizationMembershipService } from './organization-membership.service';
import { RequestContextService } from 'core/als/request-context.service';
import { ApiBearerAuth, ApiOperation, ApiParam, ApiQuery } from '@nestjs/swagger';
import { InviteUserToOrganizationRequestDTO, JoinRequestToOrganizationRequestDTO, UserOrganizationInvitationActionRequestDTO } from './dto';
import { JoinRequestToOrganizationRequestDTO, UserOrganizationInvitationActionRequestDTO } from './dto';
import { ORGANIZATION_JOIN_REQUEST_TYPE } from 'prisma/generated/prisma/enums';
/* NOTE: Regarding endpoint path naming

View File

@@ -152,7 +152,7 @@ export class OrganizationMembershipService {
})
}
catch (err) {
throw new NotFoundException("Join request")
throw new NotFoundException("Request")
}
}