Skip to content

Commit

Permalink
feat: validate contained when validator disable
Browse files Browse the repository at this point in the history
- Original, always validate contained property using mongoose scheme
- When we have validator, it is unnecessary to validate contained property
because validator will do that very well
- So, move process of `validate contained` to else condition that
mean validator being disable
- Add `validateContainedList` to validate
contained "Array"
- Refactor `validateContained` to function
  • Loading branch information
Chinlinlee committed Nov 29, 2022
1 parent 519e1d6 commit 3cd87d5
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 27 deletions.
21 changes: 8 additions & 13 deletions api/FHIRApiService/create.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const uuid = require('uuid');
const _ = require('lodash');
const { getNotExistReferenceList } = require('../apiService');
const FHIR = require('fhir').Fhir;
const validateContained = require('./validateContained');
const { validateContainedList } = require('./validateContained');
const { renameCollectionFieldName } = require("../apiService");
const { logger } = require('../../utils/log');
const path = require('path');
Expand Down Expand Up @@ -96,25 +96,20 @@ module.exports = async function(req, res , resourceType) {
try {
let insertData = req.body;
let cloneInsertData = _.cloneDeep(insertData);
if (_.get(insertData, "contained")) {
let containedResources = _.get(insertData, "contained");
for (let index in containedResources) {
let resource = containedResources[index];
let validation = await validateContained(resource, index);
if (!validation.status) {
let operationOutcomeError = handleError.processing(`The resource in contained error. ${validation.message}`);
logger.error(`[Error: ${JSON.stringify(operationOutcomeError)}] [Resource Type: ${resourceType}]`);
return doRes(400, operationOutcomeError);
}
}
}

// Validate user request body
if (process.env.ENABLE_VALIDATOR === "true") {
let { validateResource } = require("../../utils/validator/processor");
let validationResult = await validateResource(req.body);

if (validationResult.isError) return doRes(422, validationResult.message);
} else {
let containedValidation = await validateContainedList(insertData);
if (!containedValidation.status) {
let operationOutcomeError = handleError.processing(`The resource in contained error. ${containedValidation.message}`);
logger.error(`[Error: ${JSON.stringify(operationOutcomeError)}] [Resource Type: ${resourceType}]`);
return doRes(422, operationOutcomeError);
}
}

let [status, doc] = await doInsertData(cloneInsertData, resourceType);
Expand Down
21 changes: 9 additions & 12 deletions api/FHIRApiService/update.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const mongodb = require('models/mongodb');
const _ = require('lodash');
const FHIR = require('fhir').Fhir;
const validateContained = require('./validateContained');
const { validateContainedList } = require('./validateContained');
const { renameCollectionFieldName } = require("../apiService");
const { logger } = require('../../utils/log');
const path = require('path');
Expand Down Expand Up @@ -75,26 +75,23 @@ module.exports = async function (req, res, resourceType) {
return doRes(operationOutcomeMessage.code , operationOutcomeMessage.msg);
}
};

let updateData = req.body;
let updateDataClone = _.cloneDeep(updateData);
if (_.get(updateData, "contained")) {
let containedResources = _.get(updateData, "contained");
for (let index in containedResources) {
let resource = containedResources[index];
let validation = await validateContained(resource, index);
if (!validation.status) {
let operationOutcomeError = handleError.processing(`The resource in contained error. ${validation.message}`);
return doRes(400, operationOutcomeError);
}
}
}

// Validate user request body
if (process.env.ENABLE_VALIDATOR === "true") {
let { validateResource } = require("../../utils/validator/processor");
let validationResult = await validateResource(req.body);

if (validationResult.isError) return doRes(422, validationResult.message);
} else {
let containedValidation = await validateContainedList(updateData);
if (!containedValidation.status) {
let operationOutcomeError = handleError.processing(`The resource in contained error. ${containedValidation.message}`);
logger.error(`[Error: ${JSON.stringify(operationOutcomeError)}] [Resource Type: ${resourceType}]`);
return doRes(422, operationOutcomeError);
}
}

let dataExist = await isDocExist(req.params.id, resourceType);
Expand Down
28 changes: 26 additions & 2 deletions api/FHIRApiService/validateContained.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const mongodb = require('../../models/mongodb');
const _ = require('lodash');

module.exports = async (resourceItem, index) => {
async function validateContained(resourceItem, index) {
try {
let resourceType = _.get(resourceItem, "resourceType", false);
if (!resourceType) {
Expand Down Expand Up @@ -35,4 +35,28 @@ module.exports = async (resourceItem, index) => {
message: e
};
}
};
}

async function validateContainedList(data) {
let cloneData = _.cloneDeep(data);
if (_.get(cloneData, "contained")) {
let containedResources = _.get(cloneData, "contained");
for (let index in containedResources) {
let resource = containedResources[index];
let validation = await validateContained(resource, index);
if (!validation.status) {
return {
status: false,
message: validation.message
};
}
}
}
return {
status: true,
message: "success"
};
}

module.exports.validateContained = validateContained;
module.exports.validateContainedList = validateContainedList;

0 comments on commit 3cd87d5

Please sign in to comment.