Skip to content

Commit 7fe0737

Browse files
committed
add uservalidators and sanitizer
1 parent 4c86449 commit 7fe0737

File tree

6 files changed

+86
-0
lines changed

6 files changed

+86
-0
lines changed

Projects/BooksLibrary/package-lock.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Projects/BooksLibrary/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"dotenv": "^16.0.0",
3333
"express": "^4.17.3",
3434
"express-fileupload": "^1.3.1",
35+
"express-validator": "^6.14.0",
3536
"jsonwebtoken": "^8.5.1",
3637
"pg": "^8.7.3",
3738
"reflect-metadata": "^0.1.13",

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import { UserValidator } from 'api/validators/user.validator';
12
import { Authorizer } from 'auth/authorizer';
23
import { ResponseHandler } from 'common/response.handler';
4+
import { UserDomainModel } from 'domain.types/user/user.domain.model';
35
import express from 'express';
46
import { UserService } from 'services/user.service';
57
import { Loader } from 'startup/loader';
@@ -34,6 +36,8 @@ export class UserController {
3436
try {
3537
// request.context = 'User.create';
3638

39+
const domainData: UserDomainModel = await UserValidator.create(request, response);
40+
3741
const apiResponse = await this._service.create();
3842

3943
ResponseHandler.success(
@@ -43,6 +47,7 @@ export class UserController {
4347
200,
4448
{
4549
entity: apiResponse,
50+
domainData: domainData,
4651
},
4752
false
4853
);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/* eslint-disable newline-per-chained-call */
2+
import { Helper } from 'common/helper';
3+
import { ResponseHandler } from 'common/response.handler';
4+
import { UserDomainModel } from 'domain.types/user/user.domain.model';
5+
import express from 'express';
6+
import { body, oneOf, param, query, validationResult } from 'express-validator';
7+
8+
export class UserValidator {
9+
static create = async (request: express.Request, response: express.Response): Promise<UserDomainModel> => {
10+
try {
11+
await body('Prefix').optional().trim().run(request);
12+
await body('FirstName').isString().notEmpty().trim().run(request);
13+
await body('MiddleName').optional().trim().run(request);
14+
await body('LastName').isString().notEmpty().trim().run(request);
15+
await body('Email').isEmail().trim().run(request);
16+
await body('Password').isString().notEmpty().trim().run(request);
17+
18+
const result = validationResult(request);
19+
if (!result.isEmpty()) {
20+
Helper.handleValidationError(result);
21+
}
22+
23+
const createUserDomainModel: UserDomainModel = {
24+
Prefix: request.body.prefix,
25+
FirstName: request.body.FirstName,
26+
MiddleName: request.body.MiddleName,
27+
LastName: request.body.LastName,
28+
Email: request.body.Email,
29+
Password: request.body.Password,
30+
};
31+
32+
return createUserDomainModel;
33+
} catch (err) {
34+
ResponseHandler.handleError(request, response, err);
35+
}
36+
};
37+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { InputValidationError } from './input.validation.error';
2+
3+
export class Helper {
4+
static handleValidationError = (result) => {
5+
let index = 1;
6+
const errorMessages = [];
7+
for (const er of result.errors) {
8+
errorMessages.push(` ${index}. ${er.msg} - <${er.value}> for <${er.param}> in ${er.location}`);
9+
index++;
10+
}
11+
throw new InputValidationError(errorMessages);
12+
};
13+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export interface UserDomainModel {
2+
Prefix: string;
3+
FirstName: string;
4+
MiddleName: string;
5+
LastName: string;
6+
Email: string;
7+
Password: string;
8+
}

0 commit comments

Comments
 (0)