1 | var Ajv = require('ajv');
|
2 | var ajv = new Ajv({ v5: true, $data: true, allErrors: true, jsonPointers: true });
|
3 |
|
4 | require('ajv-keywords')(ajv );
|
5 | require('ajv-errors')(ajv);
|
6 | const coreUtils = require('../CoreUtils');
|
7 | const sendResponse = require('../exception/SendResponse');
|
8 |
|
9 | validateRequest = (schema,dto) => {
|
10 | const log = require('../index').Logger;
|
11 | var validate = ajv.compile(schema);
|
12 | var valid = validate(dto);
|
13 | if (!valid) {
|
14 | log.error('dto validation failed');
|
15 | let validationResponse = validate.errors;
|
16 | log.info('raw dto errors:: ' + JSON.stringify(validationResponse));
|
17 | let customErrorResponse= createErrorResponse(validationResponse);
|
18 | return sendResponse.validationException(customErrorResponse);
|
19 | } else {
|
20 | log.info('dto validation passed');
|
21 | return null;
|
22 | }
|
23 | }
|
24 |
|
25 | createErrorResponse = (validationResponse) => {
|
26 | var errors = [];
|
27 | var error;
|
28 |
|
29 | validationResponse.forEach(function (errorRow) {
|
30 | if (errorRow.dataPath) {
|
31 | if (errorRow.keyword === 'required') {
|
32 | let property = errorRow.params.missingProperty
|
33 | error = {
|
34 | "message": "Key_" + coreUtils.convertUCfirst(property) + "CannotBeBlank",
|
35 | "field": errorRow.dataPath + "/"+ property
|
36 | }
|
37 | } else {
|
38 | error = {
|
39 | "message": errorRow.message,
|
40 | "field": errorRow.dataPath.slice(1)
|
41 | }
|
42 | }
|
43 |
|
44 | errors.push(error);
|
45 | } else {
|
46 | let internalErrorRow = errorRow;
|
47 | if (internalErrorRow.keyword === 'dependencies') {
|
48 | let firstProperty = internalErrorRow.params.property
|
49 | let secondProperty = internalErrorRow.params.missingProperty
|
50 | error = {
|
51 | "message": "Key_" + coreUtils.convertUCfirst(firstProperty) +
|
52 | "And" + coreUtils.convertUCfirst(secondProperty) + "NotToBeEmpty",
|
53 | "field": firstProperty + "," + secondProperty
|
54 | }
|
55 |
|
56 | }
|
57 | if (internalErrorRow.keyword === 'required') {
|
58 | let property = internalErrorRow.params.missingProperty
|
59 | error = {
|
60 | "message": "Key_" + coreUtils.convertUCfirst(property) + "CannotBeBlank",
|
61 | "field": property
|
62 | }
|
63 | }
|
64 | if (internalErrorRow.keyword === 'additionalProperties') {
|
65 | let property = internalErrorRow.params.additionalProperty
|
66 | error = {
|
67 | "message": "Key_" + coreUtils.convertUCfirst(property) + "isNotRequired",
|
68 | "field": property
|
69 | }
|
70 | }
|
71 | errors.push(error);
|
72 | }
|
73 | });
|
74 | return errors;
|
75 | }
|
76 | module.exports = {
|
77 | validateRequest
|
78 | } |
\ | No newline at end of file |