Skip to content

Commit

Permalink
Merge pull request #61 from Brints/swagger_doc
Browse files Browse the repository at this point in the history
fix: ejs fix to correctly copy ejs templates into dist folder.
  • Loading branch information
aniebietafia authored Jan 29, 2025
2 parents b77eced + 08120aa commit 27489cd
Show file tree
Hide file tree
Showing 48 changed files with 173 additions and 51 deletions.
3 changes: 1 addition & 2 deletions brints-estate-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
6 changes: 3 additions & 3 deletions brints-estate-api/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
Expand Down
18 changes: 9 additions & 9 deletions brints-estate-api/src/auth/auth.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
4 changes: 2 additions & 2 deletions brints-estate-api/src/auth/providers/create-user.provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
Expand All @@ -32,7 +37,7 @@ import { SendPasswordChangedEmailProvider } from './providers/send-password-chan
from: `Brints Group <no-reply@brintsgroup.live>`,
},
template: {
dir: join(__dirname, 'templates'),
dir: join(__dirname, '/messaging/email/mailgun-service/templates'),
adapter: new EjsAdapter({
inlineCssEnabled: true,
}),
Expand Down
12 changes: 10 additions & 2 deletions brints-estate-api/src/users/dto/reset-password.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
12 changes: 10 additions & 2 deletions brints-estate-api/src/users/dto/verify-email.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
23 changes: 20 additions & 3 deletions brints-estate-api/src/users/dto/verify-phone-number.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<User>,
) {}

public async deleteUser(
activeUser: IActiveUser,
userId: string,
): Promise<null> {
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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
2 changes: 2 additions & 0 deletions brints-estate-api/src/users/providers/users.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,6 +35,7 @@ describe('UsersService', () => {
{ provide: ChangePasswordProvider, useValue: {} },
{ provide: ForgotPasswordProvider, useValue: {} },
{ provide: UpdateUserProvider, useValue: {} },
{ provide: DeleteUserProfileProvider, useValue: {} },
{ provide: FindOneByGoogleIdProvider, useValue: {} },
{ provide: CreateGoogleUserProvider, useValue: {} },
],
Expand Down
10 changes: 10 additions & 0 deletions brints-estate-api/src/users/providers/users.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -48,6 +49,8 @@ export class UsersService {
private readonly findOneByGoogleIdProvider: FindOneByGoogleIdProvider,

private readonly createGoogleUserProvider: CreateGoogleUserProvider,

private readonly deleteUserProfileProvider: DeleteUserProfileProvider,
) {}

public async verifyUserEmail(verifyEmailDto: VerifyEmailDto) {
Expand Down Expand Up @@ -122,6 +125,13 @@ export class UsersService {
);
}

public async deleteUser(
activeUser: IActiveUser,
userId: string,
): Promise<null> {
return await this.deleteUserProfileProvider.deleteUser(activeUser, userId);
}

public async findOneByGoogleId(googleId: string): Promise<User | null> {
return await this.findOneByGoogleIdProvider.findOneByGoogleId(googleId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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 },
});

Expand Down
Loading

0 comments on commit 27489cd

Please sign in to comment.