From 08120aa2cd3e1961f25eb86f52508c42f7c545ae Mon Sep 17 00:00:00 2001 From: aniebietafia Date: Wed, 29 Jan 2025 14:35:27 +0100 Subject: [PATCH] fix: ejs fix to correctly copy ejs templates into dist folder. --- brints-estate-api/package.json | 3 +- brints-estate-api/src/app.module.ts | 6 ++-- brints-estate-api/src/auth/auth.module.ts | 18 +++++----- .../auth/providers/create-user.provider.ts | 4 +-- .../email}/aws-service/aws-ses.module.ts | 0 .../aws-service/providers/aws-ses.provider.ts | 0 .../aws-service/providers/aws-ses.service.ts | 0 .../send-verification-token-email.provider.ts | 0 .../mailgun-service/mailgun-service.module.ts | 7 +++- .../providers/mailgun.service.ts | 0 .../providers/send-otp.provider.ts | 0 .../send-password-changed-email.provider.ts | 0 .../send-password-reset-token.provider.ts | 0 ...nd-reset-password-confirmation.provider.ts | 0 .../send-verification-token-email.provider.ts | 0 .../providers/send-welcome-email.provider.ts | 0 .../templates/email-verification-token.ejs | 0 .../email}/mailgun-service/templates/otp.ejs | 0 .../templates/password-changed.ejs | 0 .../templates/password-reset-confirmation.ejs | 0 .../templates/reset-password.ejs | 0 .../templates/welcome-email.ejs | 0 .../sms}/providers/aws-sms.provider.ts | 0 .../sms}/providers/aws-sms.service.ts | 0 .../sms}/sms-service.module.ts | 0 .../src/users/dto/reset-password.dto.ts | 12 +++++-- .../src/users/dto/verify-email.dto.ts | 12 +++++-- .../src/users/dto/verify-phone-number.dto.ts | 23 ++++++++++-- .../change-password.provider.spec.ts | 2 +- .../providers/change-password.provider.ts | 2 +- .../providers/delete-user-profile.provider.ts | 35 +++++++++++++++++++ .../forgot-password.provider.spec.ts | 2 +- .../providers/forgot-password.provider.ts | 2 +- ...te-new-email-verification.provider.spec.ts | 2 +- ...enerate-new-email-verification.provider.ts | 2 +- .../providers/resend-otp.provider.spec.ts | 2 +- .../users/providers/resend-otp.provider.ts | 2 +- .../providers/reset-password.provider.ts | 2 +- .../users/providers/update-user.provider.ts | 2 +- .../src/users/providers/users.service.spec.ts | 2 ++ .../src/users/providers/users.service.ts | 10 ++++++ .../providers/verify-email.provider.spec.ts | 2 +- .../users/providers/verify-email.provider.ts | 2 +- .../providers/verify-phone-number.provider.ts | 14 ++++++-- .../src/users/users.controller.ts | 30 +++++++++++++++- brints-estate-api/src/users/users.module.ts | 20 ++++++----- brints-estate-api/src/utils/userHelper.lib.ts | 1 - brints-estate-api/tsconfig.build.json | 3 +- 48 files changed, 173 insertions(+), 51 deletions(-) rename brints-estate-api/src/{services/email-service => messaging/email}/aws-service/aws-ses.module.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/aws-service/providers/aws-ses.provider.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/aws-service/providers/aws-ses.service.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/aws-service/providers/send-verification-token-email.provider.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/mailgun-service.module.ts (87%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/providers/mailgun.service.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/providers/send-otp.provider.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/providers/send-password-changed-email.provider.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/providers/send-password-reset-token.provider.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/providers/send-reset-password-confirmation.provider.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/providers/send-verification-token-email.provider.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/providers/send-welcome-email.provider.ts (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/templates/email-verification-token.ejs (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/templates/otp.ejs (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/templates/password-changed.ejs (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/templates/password-reset-confirmation.ejs (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/templates/reset-password.ejs (100%) rename brints-estate-api/src/{services/email-service => messaging/email}/mailgun-service/templates/welcome-email.ejs (100%) rename brints-estate-api/src/{services/sms-service => messaging/sms}/providers/aws-sms.provider.ts (100%) rename brints-estate-api/src/{services/sms-service => messaging/sms}/providers/aws-sms.service.ts (100%) rename brints-estate-api/src/{services/sms-service => messaging/sms}/sms-service.module.ts (100%) create mode 100644 brints-estate-api/src/users/providers/delete-user-profile.provider.ts diff --git a/brints-estate-api/package.json b/brints-estate-api/package.json index 0dfcc00..435d291 100644 --- a/brints-estate-api/package.json +++ b/brints-estate-api/package.json @@ -6,8 +6,7 @@ "private": true, "license": "MIT", "scripts": { - "build": "nest build", - "postbuild": "mkdir -p dist/src/services/email-service/mailgun-service && cp -R src/services/email-service/mailgun-service/templates dist/src/services/email-service/mailgun-service/", + "build": "nest build && cp -R src/messaging/email/mailgun-service/templates dist/src/messaging/email/mailgun-service/templates", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "NODE_ENV=production nest start", "start:dev": "NODE_ENV=development nest start --watch", diff --git a/brints-estate-api/src/app.module.ts b/brints-estate-api/src/app.module.ts index 4226933..054ad90 100644 --- a/brints-estate-api/src/app.module.ts +++ b/brints-estate-api/src/app.module.ts @@ -13,9 +13,9 @@ import { AuthenticationGuard } from './auth/guards/authentication/authentication import { DataResponseInterceptor } from './common/interceptors/data-response/data-response.interceptor'; import { UploadsModule } from './uploads/uploads.module'; import { LoginAttemptsModule } from './login-attempts/login-attempts.module'; -import { MailgunServiceModule } from './services/email-service/mailgun-service/mailgun-service.module'; -import { SmsServiceModule } from './services/sms-service/sms-service.module'; -import { AwsSeSModule } from './services/email-service/aws-service/aws-ses.module'; +import { MailgunServiceModule } from './messaging/email/mailgun-service/mailgun-service.module'; +import { SmsServiceModule } from './messaging/sms/sms-service.module'; +import { AwsSeSModule } from './messaging/email/aws-service/aws-ses.module'; @Module({ imports: [ diff --git a/brints-estate-api/src/auth/auth.module.ts b/brints-estate-api/src/auth/auth.module.ts index 2a4c4cd..70b8577 100644 --- a/brints-estate-api/src/auth/auth.module.ts +++ b/brints-estate-api/src/auth/auth.module.ts @@ -19,15 +19,15 @@ import { AppConfigService } from '../config/config.service'; import { UploadToAwsProvider } from '../uploads/providers/upload-to-aws.provider'; import { LoginAttemptsProvider } from '../login-attempts/providers/login-attempts.provider'; import { TimeHelper } from 'src/utils/time-helper.lib'; -import { AwsSmsProvider } from 'src/services/sms-service/providers/aws-sms.provider'; -import { AwsSmsService } from 'src/services/sms-service/providers/aws-sms.service'; -import { MailgunService } from 'src/services/email-service/mailgun-service/providers/mailgun.service'; -import { SendWelcomeEmailProvider } from 'src/services/email-service/mailgun-service/providers/send-welcome-email.provider'; -import { SendVerificationTokenEmailProvider } from 'src/services/email-service/mailgun-service/providers/send-verification-token-email.provider'; -import { SendOtpProvider } from 'src/services/email-service/mailgun-service/providers/send-otp.provider'; -import { SendPasswordResetTokenProvider } from 'src/services/email-service/mailgun-service/providers/send-password-reset-token.provider'; -import { SendResetPasswordConfirmationProvider } from 'src/services/email-service/mailgun-service/providers/send-reset-password-confirmation.provider'; -import { SendPasswordChangedEmailProvider } from 'src/services/email-service/mailgun-service/providers/send-password-changed-email.provider'; +import { AwsSmsProvider } from 'src/messaging/sms/providers/aws-sms.provider'; +import { AwsSmsService } from 'src/messaging/sms/providers/aws-sms.service'; +import { MailgunService } from 'src/messaging/email/mailgun-service/providers/mailgun.service'; +import { SendWelcomeEmailProvider } from 'src/messaging/email/mailgun-service/providers/send-welcome-email.provider'; +import { SendVerificationTokenEmailProvider } from 'src/messaging/email/mailgun-service/providers/send-verification-token-email.provider'; +import { SendOtpProvider } from 'src/messaging/email/mailgun-service/providers/send-otp.provider'; +import { SendPasswordResetTokenProvider } from 'src/messaging/email/mailgun-service/providers/send-password-reset-token.provider'; +import { SendResetPasswordConfirmationProvider } from 'src/messaging/email/mailgun-service/providers/send-reset-password-confirmation.provider'; +import { SendPasswordChangedEmailProvider } from 'src/messaging/email/mailgun-service/providers/send-password-changed-email.provider'; import { GoogleAuthenticationController } from './socials/google-authentication.controller'; import { GoogleAuthenticationService } from './socials/providers/google-authentication.service'; diff --git a/brints-estate-api/src/auth/providers/create-user.provider.ts b/brints-estate-api/src/auth/providers/create-user.provider.ts index aa20c42..dea67b4 100644 --- a/brints-estate-api/src/auth/providers/create-user.provider.ts +++ b/brints-estate-api/src/auth/providers/create-user.provider.ts @@ -16,9 +16,9 @@ import { UploadToAwsProvider } from '../../uploads/providers/upload-to-aws.provi import { AppConfigService } from '../../config/config.service'; import { CreateLoginAttemptDto } from '../../login-attempts/dto/create-login-attempt.dto'; import { LoginAttempts } from '../../login-attempts/entities/login-attempt.entity'; -import { MailgunService } from '../../services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from '../../messaging/email/mailgun-service/providers/mailgun.service'; import { TimeHelper } from 'src/utils/time-helper.lib'; -import { AwsSmsService } from 'src/services/sms-service/providers/aws-sms.service'; +import { AwsSmsService } from 'src/messaging/sms/providers/aws-sms.service'; @Injectable() export class CreateUserProvider { diff --git a/brints-estate-api/src/services/email-service/aws-service/aws-ses.module.ts b/brints-estate-api/src/messaging/email/aws-service/aws-ses.module.ts similarity index 100% rename from brints-estate-api/src/services/email-service/aws-service/aws-ses.module.ts rename to brints-estate-api/src/messaging/email/aws-service/aws-ses.module.ts diff --git a/brints-estate-api/src/services/email-service/aws-service/providers/aws-ses.provider.ts b/brints-estate-api/src/messaging/email/aws-service/providers/aws-ses.provider.ts similarity index 100% rename from brints-estate-api/src/services/email-service/aws-service/providers/aws-ses.provider.ts rename to brints-estate-api/src/messaging/email/aws-service/providers/aws-ses.provider.ts diff --git a/brints-estate-api/src/services/email-service/aws-service/providers/aws-ses.service.ts b/brints-estate-api/src/messaging/email/aws-service/providers/aws-ses.service.ts similarity index 100% rename from brints-estate-api/src/services/email-service/aws-service/providers/aws-ses.service.ts rename to brints-estate-api/src/messaging/email/aws-service/providers/aws-ses.service.ts diff --git a/brints-estate-api/src/services/email-service/aws-service/providers/send-verification-token-email.provider.ts b/brints-estate-api/src/messaging/email/aws-service/providers/send-verification-token-email.provider.ts similarity index 100% rename from brints-estate-api/src/services/email-service/aws-service/providers/send-verification-token-email.provider.ts rename to brints-estate-api/src/messaging/email/aws-service/providers/send-verification-token-email.provider.ts diff --git a/brints-estate-api/src/services/email-service/mailgun-service/mailgun-service.module.ts b/brints-estate-api/src/messaging/email/mailgun-service/mailgun-service.module.ts similarity index 87% rename from brints-estate-api/src/services/email-service/mailgun-service/mailgun-service.module.ts rename to brints-estate-api/src/messaging/email/mailgun-service/mailgun-service.module.ts index b3ec375..1531347 100644 --- a/brints-estate-api/src/services/email-service/mailgun-service/mailgun-service.module.ts +++ b/brints-estate-api/src/messaging/email/mailgun-service/mailgun-service.module.ts @@ -13,6 +13,11 @@ import { SendPasswordResetTokenProvider } from './providers/send-password-reset- import { SendResetPasswordConfirmationProvider } from './providers/send-reset-password-confirmation.provider'; import { SendPasswordChangedEmailProvider } from './providers/send-password-changed-email.provider'; +// const templateDir = +// process.env.NODE_ENV === 'production' +// ? join(__dirname, '/../../../messaging/email/mailgun-service/templates') +// : join(__dirname, '/messaging/email/mailgun-service/templates'); + @Global() @Module({ imports: [ @@ -32,7 +37,7 @@ import { SendPasswordChangedEmailProvider } from './providers/send-password-chan from: `Brints Group `, }, template: { - dir: join(__dirname, 'templates'), + dir: join(__dirname, '/messaging/email/mailgun-service/templates'), adapter: new EjsAdapter({ inlineCssEnabled: true, }), diff --git a/brints-estate-api/src/services/email-service/mailgun-service/providers/mailgun.service.ts b/brints-estate-api/src/messaging/email/mailgun-service/providers/mailgun.service.ts similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/providers/mailgun.service.ts rename to brints-estate-api/src/messaging/email/mailgun-service/providers/mailgun.service.ts diff --git a/brints-estate-api/src/services/email-service/mailgun-service/providers/send-otp.provider.ts b/brints-estate-api/src/messaging/email/mailgun-service/providers/send-otp.provider.ts similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/providers/send-otp.provider.ts rename to brints-estate-api/src/messaging/email/mailgun-service/providers/send-otp.provider.ts diff --git a/brints-estate-api/src/services/email-service/mailgun-service/providers/send-password-changed-email.provider.ts b/brints-estate-api/src/messaging/email/mailgun-service/providers/send-password-changed-email.provider.ts similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/providers/send-password-changed-email.provider.ts rename to brints-estate-api/src/messaging/email/mailgun-service/providers/send-password-changed-email.provider.ts diff --git a/brints-estate-api/src/services/email-service/mailgun-service/providers/send-password-reset-token.provider.ts b/brints-estate-api/src/messaging/email/mailgun-service/providers/send-password-reset-token.provider.ts similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/providers/send-password-reset-token.provider.ts rename to brints-estate-api/src/messaging/email/mailgun-service/providers/send-password-reset-token.provider.ts diff --git a/brints-estate-api/src/services/email-service/mailgun-service/providers/send-reset-password-confirmation.provider.ts b/brints-estate-api/src/messaging/email/mailgun-service/providers/send-reset-password-confirmation.provider.ts similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/providers/send-reset-password-confirmation.provider.ts rename to brints-estate-api/src/messaging/email/mailgun-service/providers/send-reset-password-confirmation.provider.ts diff --git a/brints-estate-api/src/services/email-service/mailgun-service/providers/send-verification-token-email.provider.ts b/brints-estate-api/src/messaging/email/mailgun-service/providers/send-verification-token-email.provider.ts similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/providers/send-verification-token-email.provider.ts rename to brints-estate-api/src/messaging/email/mailgun-service/providers/send-verification-token-email.provider.ts diff --git a/brints-estate-api/src/services/email-service/mailgun-service/providers/send-welcome-email.provider.ts b/brints-estate-api/src/messaging/email/mailgun-service/providers/send-welcome-email.provider.ts similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/providers/send-welcome-email.provider.ts rename to brints-estate-api/src/messaging/email/mailgun-service/providers/send-welcome-email.provider.ts diff --git a/brints-estate-api/src/services/email-service/mailgun-service/templates/email-verification-token.ejs b/brints-estate-api/src/messaging/email/mailgun-service/templates/email-verification-token.ejs similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/templates/email-verification-token.ejs rename to brints-estate-api/src/messaging/email/mailgun-service/templates/email-verification-token.ejs diff --git a/brints-estate-api/src/services/email-service/mailgun-service/templates/otp.ejs b/brints-estate-api/src/messaging/email/mailgun-service/templates/otp.ejs similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/templates/otp.ejs rename to brints-estate-api/src/messaging/email/mailgun-service/templates/otp.ejs diff --git a/brints-estate-api/src/services/email-service/mailgun-service/templates/password-changed.ejs b/brints-estate-api/src/messaging/email/mailgun-service/templates/password-changed.ejs similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/templates/password-changed.ejs rename to brints-estate-api/src/messaging/email/mailgun-service/templates/password-changed.ejs diff --git a/brints-estate-api/src/services/email-service/mailgun-service/templates/password-reset-confirmation.ejs b/brints-estate-api/src/messaging/email/mailgun-service/templates/password-reset-confirmation.ejs similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/templates/password-reset-confirmation.ejs rename to brints-estate-api/src/messaging/email/mailgun-service/templates/password-reset-confirmation.ejs diff --git a/brints-estate-api/src/services/email-service/mailgun-service/templates/reset-password.ejs b/brints-estate-api/src/messaging/email/mailgun-service/templates/reset-password.ejs similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/templates/reset-password.ejs rename to brints-estate-api/src/messaging/email/mailgun-service/templates/reset-password.ejs diff --git a/brints-estate-api/src/services/email-service/mailgun-service/templates/welcome-email.ejs b/brints-estate-api/src/messaging/email/mailgun-service/templates/welcome-email.ejs similarity index 100% rename from brints-estate-api/src/services/email-service/mailgun-service/templates/welcome-email.ejs rename to brints-estate-api/src/messaging/email/mailgun-service/templates/welcome-email.ejs diff --git a/brints-estate-api/src/services/sms-service/providers/aws-sms.provider.ts b/brints-estate-api/src/messaging/sms/providers/aws-sms.provider.ts similarity index 100% rename from brints-estate-api/src/services/sms-service/providers/aws-sms.provider.ts rename to brints-estate-api/src/messaging/sms/providers/aws-sms.provider.ts diff --git a/brints-estate-api/src/services/sms-service/providers/aws-sms.service.ts b/brints-estate-api/src/messaging/sms/providers/aws-sms.service.ts similarity index 100% rename from brints-estate-api/src/services/sms-service/providers/aws-sms.service.ts rename to brints-estate-api/src/messaging/sms/providers/aws-sms.service.ts diff --git a/brints-estate-api/src/services/sms-service/sms-service.module.ts b/brints-estate-api/src/messaging/sms/sms-service.module.ts similarity index 100% rename from brints-estate-api/src/services/sms-service/sms-service.module.ts rename to brints-estate-api/src/messaging/sms/sms-service.module.ts diff --git a/brints-estate-api/src/users/dto/reset-password.dto.ts b/brints-estate-api/src/users/dto/reset-password.dto.ts index 45f77f8..c2a3728 100644 --- a/brints-estate-api/src/users/dto/reset-password.dto.ts +++ b/brints-estate-api/src/users/dto/reset-password.dto.ts @@ -2,12 +2,20 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsNotEmpty, IsString } from 'class-validator'; export class ResetPasswordDto { - @ApiProperty() + @ApiProperty({ + example: 'Test123$', + type: String, + required: true, + }) @IsNotEmpty() @IsString() new_password: string; - @ApiProperty() + @ApiProperty({ + example: 'Test123$', + type: String, + required: true, + }) @IsNotEmpty() @IsString() confirm_password: string; diff --git a/brints-estate-api/src/users/dto/verify-email.dto.ts b/brints-estate-api/src/users/dto/verify-email.dto.ts index 13a00a9..d7c592b 100644 --- a/brints-estate-api/src/users/dto/verify-email.dto.ts +++ b/brints-estate-api/src/users/dto/verify-email.dto.ts @@ -2,12 +2,20 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsEmail, IsNotEmpty, IsString } from 'class-validator'; export class VerifyEmailDto { - @ApiProperty() + @ApiProperty({ + example: 'gsteu266dinjd8h4gd6784nuuv', + type: String, + required: true, + }) @IsNotEmpty() @IsString() email_verification_token: string; - @ApiProperty() + @ApiProperty({ + example: 'example@test.com', + type: String, + required: true, + }) @IsNotEmpty() @IsEmail() email: string; diff --git a/brints-estate-api/src/users/dto/verify-phone-number.dto.ts b/brints-estate-api/src/users/dto/verify-phone-number.dto.ts index c505ecc..21b8c5d 100644 --- a/brints-estate-api/src/users/dto/verify-phone-number.dto.ts +++ b/brints-estate-api/src/users/dto/verify-phone-number.dto.ts @@ -2,13 +2,30 @@ import { ApiProperty } from '@nestjs/swagger'; import { IsNotEmpty, IsString } from 'class-validator'; export class VerifyPhoneNumberDto { - @ApiProperty() + @ApiProperty({ + example: '234', + type: String, + required: true, + }) @IsNotEmpty() @IsString() - otp: string; + country_code: string; - @ApiProperty() + @ApiProperty({ + example: '08021234567', + type: String, + required: true, + }) @IsNotEmpty() @IsString() phone_number: string; + + @ApiProperty({ + example: '123456', + type: String, + required: true, + }) + @IsNotEmpty() + @IsString() + otp: string; } diff --git a/brints-estate-api/src/users/providers/change-password.provider.spec.ts b/brints-estate-api/src/users/providers/change-password.provider.spec.ts index 3026014..0276da1 100644 --- a/brints-estate-api/src/users/providers/change-password.provider.spec.ts +++ b/brints-estate-api/src/users/providers/change-password.provider.spec.ts @@ -9,7 +9,7 @@ import { ChangePasswordDto } from '../dto/change-password.dto'; import { CustomException } from 'src/exceptions/custom.exception'; import { HttpStatus } from '@nestjs/common'; import { UserRole } from 'src/enums/user-role.enum'; -import { MailgunService } from 'src/services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from 'src/messaging/email/mailgun-service/providers/mailgun.service'; describe('ChangePasswordProvider', () => { let provider: ChangePasswordProvider; diff --git a/brints-estate-api/src/users/providers/change-password.provider.ts b/brints-estate-api/src/users/providers/change-password.provider.ts index 3780378..86751d8 100644 --- a/brints-estate-api/src/users/providers/change-password.provider.ts +++ b/brints-estate-api/src/users/providers/change-password.provider.ts @@ -7,7 +7,7 @@ import { HashingProvider } from '../../auth/providers/hashing.provider'; import { ChangePasswordDto } from '../dto/change-password.dto'; import { IActiveUser } from '../../auth/interfaces/active-user.interface'; import { CustomException } from '../../exceptions/custom.exception'; -import { MailgunService } from 'src/services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from 'src/messaging/email/mailgun-service/providers/mailgun.service'; @Injectable() export class ChangePasswordProvider { diff --git a/brints-estate-api/src/users/providers/delete-user-profile.provider.ts b/brints-estate-api/src/users/providers/delete-user-profile.provider.ts new file mode 100644 index 0000000..cf64745 --- /dev/null +++ b/brints-estate-api/src/users/providers/delete-user-profile.provider.ts @@ -0,0 +1,35 @@ +import { HttpStatus, Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { User } from '../entities/user.entity'; +import { Repository } from 'typeorm'; +import { IActiveUser } from 'src/auth/interfaces/active-user.interface'; +import { CustomException } from 'src/exceptions/custom.exception'; +import { UserRole } from 'src/enums/user-role.enum'; + +@Injectable() +export class DeleteUserProfileProvider { + constructor( + @InjectRepository(User) + private readonly userRepository: Repository, + ) {} + + public async deleteUser( + activeUser: IActiveUser, + userId: string, + ): Promise { + const user = await this.userRepository.findOne({ where: { id: userId } }); + + if (!user) + throw new CustomException(HttpStatus.NOT_FOUND, 'User does not exist.'); + + if (activeUser.role !== UserRole.SUPER_ADMIN || userId !== activeUser.sub) + throw new CustomException( + HttpStatus.FORBIDDEN, + 'You do not have the authority to delete this account.', + ); + + await this.userRepository.delete({ id: userId }); + + return null; + } +} diff --git a/brints-estate-api/src/users/providers/forgot-password.provider.spec.ts b/brints-estate-api/src/users/providers/forgot-password.provider.spec.ts index 28739b8..fcf282c 100644 --- a/brints-estate-api/src/users/providers/forgot-password.provider.spec.ts +++ b/brints-estate-api/src/users/providers/forgot-password.provider.spec.ts @@ -7,7 +7,7 @@ import { UserAuth } from '../entities/userAuth.entity'; import { ForgotPasswordDto } from '../dto/forgot-password.dto'; import { CustomException } from '../../exceptions/custom.exception'; import { HttpStatus } from '@nestjs/common'; -import { MailgunService } from '../../services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from '../../messaging/email/mailgun-service/providers/mailgun.service'; import { GenerateTokenHelper } from '../../utils/generate-token.lib'; import { TimeHelper } from '../../utils/time-helper.lib'; diff --git a/brints-estate-api/src/users/providers/forgot-password.provider.ts b/brints-estate-api/src/users/providers/forgot-password.provider.ts index 0aeda4e..fbb3985 100644 --- a/brints-estate-api/src/users/providers/forgot-password.provider.ts +++ b/brints-estate-api/src/users/providers/forgot-password.provider.ts @@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from '../entities/user.entity'; -import { MailgunService } from '../../services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from '../../messaging/email/mailgun-service/providers/mailgun.service'; import { UserAuth } from '../entities/userAuth.entity'; import { ForgotPasswordDto } from '../dto/forgot-password.dto'; import { CustomException } from '../../exceptions/custom.exception'; diff --git a/brints-estate-api/src/users/providers/generate-new-email-verification.provider.spec.ts b/brints-estate-api/src/users/providers/generate-new-email-verification.provider.spec.ts index 92f6c3c..3827fa5 100644 --- a/brints-estate-api/src/users/providers/generate-new-email-verification.provider.spec.ts +++ b/brints-estate-api/src/users/providers/generate-new-email-verification.provider.spec.ts @@ -3,7 +3,7 @@ import { DataSource, Repository } from 'typeorm'; import { GenerateNewEmailVerificationProvider } from './generate-new-email-verification.provider'; import { User } from '../entities/user.entity'; import { UserAuth } from '../entities/userAuth.entity'; -import { MailgunService } from 'src/services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from 'src/messaging/email/mailgun-service/providers/mailgun.service'; import { GenerateTokenHelper } from 'src/utils/generate-token.lib'; import { getRepositoryToken } from '@nestjs/typeorm'; import { GenerateNewEmailTokenDto } from '../dto/new-email-token.dto'; diff --git a/brints-estate-api/src/users/providers/generate-new-email-verification.provider.ts b/brints-estate-api/src/users/providers/generate-new-email-verification.provider.ts index cc4b16c..526cca0 100644 --- a/brints-estate-api/src/users/providers/generate-new-email-verification.provider.ts +++ b/brints-estate-api/src/users/providers/generate-new-email-verification.provider.ts @@ -8,7 +8,7 @@ import { GenerateTokenHelper } from '../../utils/generate-token.lib'; import { GenerateNewEmailTokenDto } from '../dto/new-email-token.dto'; import { CustomException } from '../../exceptions/custom.exception'; import { VerificationStatus } from '../../enums/status.enum'; -import { MailgunService } from '../../services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from '../../messaging/email/mailgun-service/providers/mailgun.service'; @Injectable() export class GenerateNewEmailVerificationProvider { diff --git a/brints-estate-api/src/users/providers/resend-otp.provider.spec.ts b/brints-estate-api/src/users/providers/resend-otp.provider.spec.ts index 20adbbe..c7e0b09 100644 --- a/brints-estate-api/src/users/providers/resend-otp.provider.spec.ts +++ b/brints-estate-api/src/users/providers/resend-otp.provider.spec.ts @@ -6,7 +6,7 @@ import { User } from '../entities/user.entity'; import { UserAuth } from '../entities/userAuth.entity'; import { CustomException } from 'src/exceptions/custom.exception'; import { GenerateNewOTPDto } from '../dto/generate-new-otp.dto'; -import { AwsSmsService } from 'src/services/sms-service/providers/aws-sms.service'; +import { AwsSmsService } from 'src/messaging/sms/providers/aws-sms.service'; import { GenerateTokenHelper } from 'src/utils/generate-token.lib'; import { TimeHelper } from 'src/utils/time-helper.lib'; import { ResendOtpProvider } from './resend-otp.provider'; diff --git a/brints-estate-api/src/users/providers/resend-otp.provider.ts b/brints-estate-api/src/users/providers/resend-otp.provider.ts index c1d74b8..bc1d536 100644 --- a/brints-estate-api/src/users/providers/resend-otp.provider.ts +++ b/brints-estate-api/src/users/providers/resend-otp.provider.ts @@ -8,7 +8,7 @@ import { GenerateTokenHelper } from '../../utils/generate-token.lib'; import { GenerateNewOTPDto } from '../dto/generate-new-otp.dto'; import { CustomException } from '../../exceptions/custom.exception'; import { VerificationStatus } from '../../enums/status.enum'; -import { AwsSmsService } from 'src/services/sms-service/providers/aws-sms.service'; +import { AwsSmsService } from 'src/messaging/sms/providers/aws-sms.service'; import { TimeHelper } from 'src/utils/time-helper.lib'; @Injectable() diff --git a/brints-estate-api/src/users/providers/reset-password.provider.ts b/brints-estate-api/src/users/providers/reset-password.provider.ts index 52d8dc4..1f967f3 100644 --- a/brints-estate-api/src/users/providers/reset-password.provider.ts +++ b/brints-estate-api/src/users/providers/reset-password.provider.ts @@ -8,7 +8,7 @@ import { HashingProvider } from '../../auth/providers/hashing.provider'; import { ResetPasswordDto } from '../dto/reset-password.dto'; import { CustomException } from '../../exceptions/custom.exception'; import { AccountStatus } from '../../enums/account-status.enum'; -import { MailgunService } from 'src/services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from 'src/messaging/email/mailgun-service/providers/mailgun.service'; import { IResetPassword } from '../interface/reset-password.interface'; @Injectable() diff --git a/brints-estate-api/src/users/providers/update-user.provider.ts b/brints-estate-api/src/users/providers/update-user.provider.ts index 2e4cf29..0519dec 100644 --- a/brints-estate-api/src/users/providers/update-user.provider.ts +++ b/brints-estate-api/src/users/providers/update-user.provider.ts @@ -11,7 +11,7 @@ import { UserAuth } from '../entities/userAuth.entity'; import { GenerateTokenHelper } from 'src/utils/generate-token.lib'; import { TimeHelper } from 'src/utils/time-helper.lib'; import { VerificationStatus } from 'src/enums/status.enum'; -import { AwsSmsService } from 'src/services/sms-service/providers/aws-sms.service'; +import { AwsSmsService } from 'src/messaging/sms/providers/aws-sms.service'; @Injectable() export class UpdateUserProvider { diff --git a/brints-estate-api/src/users/providers/users.service.spec.ts b/brints-estate-api/src/users/providers/users.service.spec.ts index cb850be..d92104a 100644 --- a/brints-estate-api/src/users/providers/users.service.spec.ts +++ b/brints-estate-api/src/users/providers/users.service.spec.ts @@ -12,6 +12,7 @@ import { ForgotPasswordProvider } from './forgot-password.provider'; import { UpdateUserProvider } from './update-user.provider'; import { FindOneByGoogleIdProvider } from './find-one-by-google-id.provider'; import { CreateGoogleUserProvider } from './create-google-user.provider'; +import { DeleteUserProfileProvider } from './delete-user-profile.provider'; describe('UsersService', () => { let service: UsersService; @@ -34,6 +35,7 @@ describe('UsersService', () => { { provide: ChangePasswordProvider, useValue: {} }, { provide: ForgotPasswordProvider, useValue: {} }, { provide: UpdateUserProvider, useValue: {} }, + { provide: DeleteUserProfileProvider, useValue: {} }, { provide: FindOneByGoogleIdProvider, useValue: {} }, { provide: CreateGoogleUserProvider, useValue: {} }, ], diff --git a/brints-estate-api/src/users/providers/users.service.ts b/brints-estate-api/src/users/providers/users.service.ts index 2960c34..273a0be 100644 --- a/brints-estate-api/src/users/providers/users.service.ts +++ b/brints-estate-api/src/users/providers/users.service.ts @@ -23,6 +23,7 @@ import { UpdateUserDto } from '../dto/update-user.dto'; import { FindOneByGoogleIdProvider } from './find-one-by-google-id.provider'; import { CreateGoogleUserProvider } from './create-google-user.provider'; import { GoogleUser } from '../interface/google-user.interface'; +import { DeleteUserProfileProvider } from './delete-user-profile.provider'; @Injectable() export class UsersService { @@ -48,6 +49,8 @@ export class UsersService { private readonly findOneByGoogleIdProvider: FindOneByGoogleIdProvider, private readonly createGoogleUserProvider: CreateGoogleUserProvider, + + private readonly deleteUserProfileProvider: DeleteUserProfileProvider, ) {} public async verifyUserEmail(verifyEmailDto: VerifyEmailDto) { @@ -122,6 +125,13 @@ export class UsersService { ); } + public async deleteUser( + activeUser: IActiveUser, + userId: string, + ): Promise { + return await this.deleteUserProfileProvider.deleteUser(activeUser, userId); + } + public async findOneByGoogleId(googleId: string): Promise { return await this.findOneByGoogleIdProvider.findOneByGoogleId(googleId); } diff --git a/brints-estate-api/src/users/providers/verify-email.provider.spec.ts b/brints-estate-api/src/users/providers/verify-email.provider.spec.ts index 1fb33f6..09ff8a7 100644 --- a/brints-estate-api/src/users/providers/verify-email.provider.spec.ts +++ b/brints-estate-api/src/users/providers/verify-email.provider.spec.ts @@ -3,7 +3,7 @@ import { DataSource, ObjectLiteral, Repository } from 'typeorm'; import { getRepositoryToken } from '@nestjs/typeorm'; import { User } from '../entities/user.entity'; -import { MailgunService } from 'src/services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from 'src/messaging/email/mailgun-service/providers/mailgun.service'; import { VerifyEmailProvider } from './verify-email.provider'; import { UserAuth } from '../entities/userAuth.entity'; import { CustomException } from 'src/exceptions/custom.exception'; diff --git a/brints-estate-api/src/users/providers/verify-email.provider.ts b/brints-estate-api/src/users/providers/verify-email.provider.ts index 94be388..8540e2e 100644 --- a/brints-estate-api/src/users/providers/verify-email.provider.ts +++ b/brints-estate-api/src/users/providers/verify-email.provider.ts @@ -7,7 +7,7 @@ import { UserAuth } from '../entities/userAuth.entity'; import { VerifyEmailDto } from '../dto/verify-email.dto'; import { CustomException } from '../../exceptions/custom.exception'; import { VerificationStatus } from '../../enums/status.enum'; -import { MailgunService } from '../../services/email-service/mailgun-service/providers/mailgun.service'; +import { MailgunService } from '../../messaging/email/mailgun-service/providers/mailgun.service'; @Injectable() export class VerifyEmailProvider { diff --git a/brints-estate-api/src/users/providers/verify-phone-number.provider.ts b/brints-estate-api/src/users/providers/verify-phone-number.provider.ts index a35705e..6613dc2 100644 --- a/brints-estate-api/src/users/providers/verify-phone-number.provider.ts +++ b/brints-estate-api/src/users/providers/verify-phone-number.provider.ts @@ -7,8 +7,9 @@ import { User } from '../entities/user.entity'; import { UserAuth } from '../entities/userAuth.entity'; import { CustomException } from '../../exceptions/custom.exception'; import { VerificationStatus } from '../../enums/status.enum'; -import { MailgunService } from 'src/services/email-service/mailgun-service/providers/mailgun.service'; -import { AwsSmsService } from 'src/services/sms-service/providers/aws-sms.service'; +import { MailgunService } from 'src/messaging/email/mailgun-service/providers/mailgun.service'; +import { AwsSmsService } from 'src/messaging/sms/providers/aws-sms.service'; +import { UserHelper } from 'src/utils/userHelper.lib'; @Injectable() export class VerifyPhoneNumberProvider { @@ -22,11 +23,18 @@ export class VerifyPhoneNumberProvider { private readonly mailgunService: MailgunService, private readonly awsSmsService: AwsSmsService, + + private readonly userHelper: UserHelper, ) {} public async verifyPhoneNumber(verifyPhoneNumberDto: VerifyPhoneNumberDto) { + const extractedPhoneNumber = this.userHelper.formatPhoneNumber( + verifyPhoneNumberDto.country_code, + verifyPhoneNumberDto.phone_number, + ); + const user = await this.userRepository.findOne({ - where: { phone_number: verifyPhoneNumberDto.phone_number }, + where: { phone_number: extractedPhoneNumber }, relations: { user_auth: true }, }); diff --git a/brints-estate-api/src/users/users.controller.ts b/brints-estate-api/src/users/users.controller.ts index 976e83c..71fcc79 100644 --- a/brints-estate-api/src/users/users.controller.ts +++ b/brints-estate-api/src/users/users.controller.ts @@ -11,7 +11,9 @@ import { HttpCode, Param, Put, + Delete, } from '@nestjs/common'; + import { ApiBearerAuth, ApiOkResponse, @@ -19,6 +21,7 @@ import { ApiResponse, ApiTags, } from '@nestjs/swagger'; + import { UsersService } from './providers/users.service'; import { VerifyEmailDto } from './dto/verify-email.dto'; import { VerifyPhoneNumberDto } from './dto/verify-phone-number.dto'; @@ -190,7 +193,7 @@ export class UsersController { @ApiOperation({ summary: 'Get user profile. User must be authenticated', }) - @Get('/:id') + @Get('/:userId') @Auth(AuthType.Bearer) @HttpCode(HttpStatus.OK) @UseInterceptors(ClassSerializerInterceptor) @@ -266,4 +269,29 @@ export class UsersController { payload, }; } + + @ApiBearerAuth('access-token') + @ApiOperation({ + summary: 'Delete your profile.', + }) + @ApiResponse({ + status: HttpStatus.OK, + description: 'User profile deleted successfully', + }) + @Delete(':/userId') + @Auth(AuthType.Bearer) + @HttpCode(HttpStatus.OK) + @UseFilters(HttpExceptionFilter) + public async deleteUser( + @Param('userId') userId: string, + @ActiveUser() activeUser: IActiveUser, + ) { + const payload = await this.usersService.deleteUser(activeUser, userId); + + return { + message: 'Profile deleted successfully', + status_code: HttpStatus.OK, + payload, + }; + } } diff --git a/brints-estate-api/src/users/users.module.ts b/brints-estate-api/src/users/users.module.ts index d9f8d0b..1a4a735 100644 --- a/brints-estate-api/src/users/users.module.ts +++ b/brints-estate-api/src/users/users.module.ts @@ -19,21 +19,22 @@ import { HashingProvider } from '../auth/providers/hashing.provider'; import { BcryptProvider } from '../auth/providers/bcrypt.provider'; import { ChangePasswordProvider } from './providers/change-password.provider'; import { TimeHelper } from 'src/utils/time-helper.lib'; -import { MailgunService } from 'src/services/email-service/mailgun-service/providers/mailgun.service'; -import { SendPasswordResetTokenProvider } from 'src/services/email-service/mailgun-service/providers/send-password-reset-token.provider'; -import { SendPasswordChangedEmailProvider } from 'src/services/email-service/mailgun-service/providers/send-password-changed-email.provider'; -import { SendWelcomeEmailProvider } from 'src/services/email-service/mailgun-service/providers/send-welcome-email.provider'; -import { SendVerificationTokenEmailProvider } from 'src/services/email-service/mailgun-service/providers/send-verification-token-email.provider'; -import { SendOtpProvider } from 'src/services/email-service/mailgun-service/providers/send-otp.provider'; -import { SendResetPasswordConfirmationProvider } from 'src/services/email-service/mailgun-service/providers/send-reset-password-confirmation.provider'; +import { MailgunService } from 'src/messaging/email/mailgun-service/providers/mailgun.service'; +import { SendPasswordResetTokenProvider } from 'src/messaging/email/mailgun-service/providers/send-password-reset-token.provider'; +import { SendPasswordChangedEmailProvider } from 'src/messaging/email/mailgun-service/providers/send-password-changed-email.provider'; +import { SendWelcomeEmailProvider } from 'src/messaging/email/mailgun-service/providers/send-welcome-email.provider'; +import { SendVerificationTokenEmailProvider } from 'src/messaging/email/mailgun-service/providers/send-verification-token-email.provider'; +import { SendOtpProvider } from 'src/messaging/email/mailgun-service/providers/send-otp.provider'; +import { SendResetPasswordConfirmationProvider } from 'src/messaging/email/mailgun-service/providers/send-reset-password-confirmation.provider'; import { UpdateUserProvider } from './providers/update-user.provider'; import { UploadToAwsProvider } from 'src/uploads/providers/upload-to-aws.provider'; import { AppConfigService } from 'src/config/config.service'; -import { AwsSmsService } from 'src/services/sms-service/providers/aws-sms.service'; -import { AwsSmsProvider } from 'src/services/sms-service/providers/aws-sms.provider'; +import { AwsSmsService } from 'src/messaging/sms/providers/aws-sms.service'; +import { AwsSmsProvider } from 'src/messaging/sms/providers/aws-sms.provider'; import { UserHelper } from 'src/utils/userHelper.lib'; import { FindOneByGoogleIdProvider } from './providers/find-one-by-google-id.provider'; import { CreateGoogleUserProvider } from './providers/create-google-user.provider'; +import { DeleteUserProfileProvider } from './providers/delete-user-profile.provider'; @Module({ controllers: [UsersController], @@ -68,6 +69,7 @@ import { CreateGoogleUserProvider } from './providers/create-google-user.provide UserHelper, FindOneByGoogleIdProvider, CreateGoogleUserProvider, + DeleteUserProfileProvider, ], imports: [ TypeOrmModule.forFeature([User, UserAuth]), diff --git a/brints-estate-api/src/utils/userHelper.lib.ts b/brints-estate-api/src/utils/userHelper.lib.ts index 3d6cb70..647b8bb 100644 --- a/brints-estate-api/src/utils/userHelper.lib.ts +++ b/brints-estate-api/src/utils/userHelper.lib.ts @@ -31,7 +31,6 @@ export class UserHelper { ); if (!phoneNumber.startsWith('0')) { - //phoneNumber = phoneNumber.slice(1); phoneNumber = `${0}${phoneNumber}`; } return `+${countryCode}${phoneNumber}`; diff --git a/brints-estate-api/tsconfig.build.json b/brints-estate-api/tsconfig.build.json index 50cfb76..f74c161 100644 --- a/brints-estate-api/tsconfig.build.json +++ b/brints-estate-api/tsconfig.build.json @@ -4,7 +4,8 @@ "src/**/*.ts", "src/**/*.d.ts", "**/*.ts", - "src/services/email-service/mailgun-service/templates/**/*.ejs" + "src/messaging/email/mailgun-service/templates/**/*.ejs", + "src/messaging/email/aws-service/templates/**/*.ejs" ], "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] }