Skip to content

Commit 5758400

Browse files
committed
create user repo
1 parent 4ee8188 commit 5758400

File tree

8 files changed

+80
-12
lines changed

8 files changed

+80
-12
lines changed

Projects/BooksLibrary/src/api/controllers/user.controller.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { UserValidator } from 'api/validators/user.validator';
22
import { Authorizer } from 'auth/authorizer';
33
import { ResponseHandler } from 'common/response.handler';
44
import { UserDomainModel } from 'domain.types/user/user.domain.model';
5+
import { UserDetailsDto } from 'domain.types/user/user.dto';
56
import express from 'express';
67
import { UserService } from 'services/user.service';
78
import { Loader } from 'startup/loader';
@@ -38,16 +39,15 @@ export class UserController {
3839

3940
const domainData: UserDomainModel = await UserValidator.create(request, response);
4041

41-
const apiResponse = await this._service.create(domainData);
42+
const userdetails: UserDetailsDto = await this._service.create(domainData);
4243

4344
ResponseHandler.success(
4445
request,
4546
response,
4647
'User created!',
4748
200,
4849
{
49-
entity: apiResponse,
50-
domainData: domainData,
50+
entity: userdetails,
5151
},
5252
false
5353
);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { UserDomainModel } from 'domain.types/user/user.domain.model';
2+
import { UserDetailsDto } from 'domain.types/user/user.dto';
3+
4+
export interface IUserRepo {
5+
createUser(userDetails: UserDomainModel): Promise<UserDetailsDto>;
6+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { UserDetailsDto } from 'domain.types/user/user.dto';
2+
import User from '../models/user.model';
3+
4+
export class UserMapper {
5+
static toDetailsDto = async (entity: User): Promise<UserDetailsDto> => {
6+
const dto: UserDetailsDto = {
7+
id: entity.id,
8+
FirstName: entity.FirstName,
9+
Prefix: entity.Prefix,
10+
MiddleName: entity.MiddleName,
11+
LastName: entity.LastName,
12+
Email: entity.Email,
13+
CreatedAt: entity.createdAt,
14+
UpdatedAt: entity.updatedAt,
15+
DeletedAt: entity.deletedAt,
16+
};
17+
18+
return dto;
19+
};
20+
}

Projects/BooksLibrary/src/database/sql/sequelize/models/user.model.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,11 @@ export default class User extends Model {
8181
})
8282
Password: string;
8383

84-
@IsUUID(4)
84+
// @IsUUID(4)
8585
@ForeignKey(() => Role)
8686
@Column({
8787
type: DataType.UUID,
88-
allowNull: false,
88+
allowNull: true,
8989
})
9090
RoleId: string;
9191

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { IUserRepo } from 'database/repository.interfaces/user.repo.intrerface';
2+
import { UserDomainModel } from 'domain.types/user/user.domain.model';
3+
import { UserDetailsDto } from 'domain.types/user/user.dto';
4+
import { UserMapper } from '../mapper/user.mapper';
5+
import User from '../models/user.model';
6+
7+
export class UserRepo implements IUserRepo {
8+
async createUser(userDetails: UserDomainModel): Promise<UserDetailsDto> {
9+
const entity = {
10+
Prefix: userDetails.Prefix,
11+
FirstName: userDetails.FirstName,
12+
MiddleName: userDetails.MiddleName,
13+
LastName: userDetails.LastName,
14+
Email: userDetails.Email,
15+
Password: userDetails.Password,
16+
RoleId: '',
17+
};
18+
19+
const user: User = await User.create(entity);
20+
const dto: UserDetailsDto = await UserMapper.toDetailsDto(user);
21+
22+
return dto;
23+
}
24+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { DependencyContainer } from 'tsyringe';
22
import { DatabaseConnector_Sequelize } from './sequelize/database.connector.sequelize';
3+
import { UserRepo } from './sequelize/repositories/user.repo';
34

45
export class SQLInjector {
56
static registerInjections(container: DependencyContainer) {
67
container.register('IDatabaseConnector', DatabaseConnector_Sequelize);
8+
9+
container.register('IUserRepo', UserRepo);
710
}
811
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export interface UserDetailsDto {
2+
id: string;
3+
Prefix: string;
4+
FirstName: string;
5+
MiddleName: string;
6+
LastName: string;
7+
Email: string;
8+
9+
CreatedAt: Date;
10+
11+
UpdatedAt: Date;
12+
13+
DeletedAt: Date;
14+
}
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import { UserDomainModel } from 'domain.types/user/user.domain.model';
2-
import { injectable } from 'tsyringe';
2+
import { UserDetailsDto } from 'domain.types/user/user.dto';
3+
import { inject, injectable } from 'tsyringe';
4+
import { IUserRepo } from '../database/repository.interfaces/user.repo.intrerface';
35

46
@injectable()
57
export class UserService {
6-
create = async (userDetails: UserDomainModel) => {
7-
const servicceResponse = {
8-
name: 'akash jadhav',
9-
designation: 'software dev',
10-
};
8+
constructor(@inject('IUserRepo') private _userRepo: IUserRepo) {}
119

12-
return servicceResponse;
10+
create = async (userDetails: UserDomainModel): Promise<UserDetailsDto> => {
11+
const userDetailsDto: UserDetailsDto = await this._userRepo.createUser(userDetails);
12+
13+
return userDetailsDto;
1314
};
1415
}

0 commit comments

Comments
 (0)