Skip to content

Commit

Permalink
Merge pull request #10 from Brints/feat/environment_configurations
Browse files Browse the repository at this point in the history
feat: environment configurations
  • Loading branch information
aniebietafia authored Aug 31, 2024
2 parents 41045d3 + cd5fa05 commit 927cea4
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 33 deletions.
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"workbench.iconTheme": "vscode-icons",
"workbench.iconTheme": "eq-material-theme-icons-ocean",
"typescript.validate.enable": true
}
1 change: 1 addition & 0 deletions brints-estate-api/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ web_modules/
.env.test.local
.env.production.local
.env.local
.env.*

# parcel-bundler cache (https://parceljs.org/)
.cache
Expand Down
7 changes: 4 additions & 3 deletions brints-estate-api/src/auth/auth.controller.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { Controller, Post, Body } from '@nestjs/common';
import { Controller, Post, Body, HttpStatus, UseFilters } from '@nestjs/common';
import { AuthService } from './providers/auth.service';
import { CreateUserDto } from 'src/users/dto/create-user.dto';
import { CreateUserAuthDto } from 'src/users/dto/create-userauth.dto';
import { ApiTags } from '@nestjs/swagger';
import { STATUS_CODES } from 'http';
import { HttpExceptionFilter } from 'src/exceptions/http-exception.filter';

@Controller('auth')
@ApiTags('Auth')
export class AuthController {
constructor(private readonly authService: AuthService) {}

@UseFilters(HttpExceptionFilter)
@Post('register')
async registerUser(
@Body()
Expand All @@ -22,7 +23,7 @@ export class AuthController {
);
return {
message: 'Registration successful',
status_code: STATUS_CODES.OK,
status_code: HttpStatus.CREATED,
data: user,
};
}
Expand Down
48 changes: 32 additions & 16 deletions brints-estate-api/src/auth/providers/auth.service.ts
Original file line number Diff line number Diff line change
@@ -1,48 +1,67 @@
import { Injectable } from '@nestjs/common';
import { HttpStatus, Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';

import { CreateUserDto } from 'src/users/dto/create-user.dto';
import { CreateUserAuthDto } from 'src/users/dto/create-userauth.dto';
import { User } from 'src/users/entities/user.entity';
import { UserAuth } from 'src/users/entities/userAuth.entity';
import AppDataSource from 'src/database/data-source';
import {
generateOTP,
generateVerificationToken,
} from 'src/utils/generate-token.lib';
import { VerificationStatus } from 'src/enums/roles.model';
import { CustomConflictException } from 'src/exceptions/http-exception.filter';

@Injectable()
export class AuthService {
private readonly userRepository: Repository<User> =
AppDataSource.getRepository(User);
private readonly userAuthRepository: Repository<UserAuth> =
AppDataSource.getRepository(UserAuth);

constructor() {}
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
@InjectRepository(UserAuth)
private readonly userAuthRepository: Repository<UserAuth>,
) {}

public async createUser(
createUserDto: CreateUserDto,
createUserAuthDto: CreateUserAuthDto,
) {
const user = this.userRepository.create(createUserDto);
const {
// first_name,
// last_name,
email,
// password,
// confirm_password,
// gender,
// phone_number,
// role,
} = createUserDto;

const userExists = await this.userRepository.findOne({
where: { email },
});

if (userExists) {
throw new CustomConflictException(
HttpStatus.CONFLICT,
'User Exists already',
);
}

const user = this.userRepository.create(createUserDto);
const verificationToken = generateVerificationToken();
const newOtp = generateOTP(6);
const verificationTokenExpiry = new Date();
verificationTokenExpiry.setHours(verificationTokenExpiry.getHours() + 1);

const otpExpiry = new Date();
otpExpiry.setMinutes(otpExpiry.getMinutes() + 20);

const emailVerificationToken = verificationToken;
const emailVerificationTokenExpiresIn = verificationTokenExpiry;
const otp = parseInt(newOtp);
const otpExpiresIn = otpExpiry;
const isEmailVerified = false;
const isPhoneNumberVerified = false;
const status = VerificationStatus.PENDING;

const userAuth = this.userAuthRepository.create({
...createUserAuthDto,
emailVerificationToken,
Expand All @@ -53,13 +72,10 @@ export class AuthService {
isPhoneNumberVerified,
status,
});

user.user_auth = userAuth;
userAuth.user = user;

await this.userAuthRepository.save(userAuth);
await this.userRepository.save(user);

return { user, userAuth };
return user;
}
}
29 changes: 29 additions & 0 deletions brints-estate-api/src/exceptions/http-exception.filter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import {
ArgumentsHost,
Catch,
ExceptionFilter,
HttpException,
HttpStatus,
} from '@nestjs/common';
import { Response } from 'express';

export class CustomConflictException extends HttpException {
constructor(status_code: HttpStatus, message: string) {
super(message, status_code);
}
}

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
//const request = ctx.getRequest<Request>();

response.send({
success: exception.getStatus() < 400 ? true : false,
status_code: exception.getStatus(),
message: exception.getResponse(),
});
}
}
8 changes: 1 addition & 7 deletions brints-estate-api/src/users/providers/users.service.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import { Injectable } from '@nestjs/common';
// import { CreateUserDto } from '../dto/create-user.dto';
// import { CreateAuthDto } from 'src/auth/dto/create-auth.dto';
// import { InjectRepository } from '@nestjs/typeorm';
// import { Repository } from 'typeorm';
// import { User } from '../entities/user.entity';
// import { UserAuth } from '../entities/userAuth.entity';

@Injectable()
export class UsersService {
constructor() {} // private readonly userAuthRepository: Repository<UserAuth>, // private readonly userRepository: Repository<User>, // @InjectRepository(User)
constructor() {}
}
8 changes: 7 additions & 1 deletion brints-estate-api/src/users/users.module.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

import { UsersController } from './users.controller';
import { UsersService } from './providers/users.service';

import { User } from './entities/user.entity';
import { UserAuth } from './entities/userAuth.entity';

@Module({
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
imports: [TypeOrmModule.forFeature([User, UserAuth])],
exports: [TypeOrmModule, UsersService],
})
export class UsersModule {}
6 changes: 2 additions & 4 deletions brints-estate-api/test/app.e2e-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ describe('AppController (e2e)', () => {
});

it('/ (GET)', () => {
return request(app.getHttpServer())
.get('/')
.expect(200)
.expect('Hello World!');
console.log(process.env.APP_TEST);
return request(app.getHttpServer()).get('/').expect(404);
});
});
3 changes: 2 additions & 1 deletion brints-estate-api/test/jest-e2e.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"moduleFileExtensions": ["js", "json", "ts"],
"rootDir": ".",
"rootDir": "../",
"modulePaths": ["<rootDir>"],
"testEnvironment": "node",
"testRegex": ".e2e-spec.ts$",
"transform": {
Expand Down

0 comments on commit 927cea4

Please sign in to comment.