@tasolutions/express-core
Version:
All libs for express
69 lines (55 loc) • 2.63 kB
JavaScript
const Response = require('../../utils/v1Response');
const httpStatus = require('../../utils/httpStatus');
const { mapHeadersAndCheckAuthorization, mapHeadersToQuery } = require('../../utils/requestHeader');
const { parseFormData } = require('../../utils/collection.util');
const { uploadFiles } = require('../../utils/upload');
const queryUtil = require('../../utils/query.util');
module.exports = {
/**
* This crud update
*/
update: async (req, res, Collection, configs) => {
const moduleName = Collection.collection.collectionName;
await mapHeadersToQuery(req, Collection);
let payloadFilter = { _id: req.params._id };
if (req.query.is_deleted !== undefined) {
payloadFilter.is_deleted = req.query.is_deleted;
}
const count = await Collection.countDocuments(payloadFilter);
if (!count) {
return Response.error(req, res, `Unable to find ${moduleName} with id: ${req.params._id}`, httpStatus.NOT_FOUND);
}
const parsedBody = parseFormData(req.body);
const parsedFiles = parseFormData(req.files);
if (!(parsedBody[moduleName] || parsedFiles[moduleName])) {
return Response.error(req, res, { message: `${moduleName} is required` }, httpStatus.BAD_REQUEST);
}
req.body = parsedBody[moduleName] || {};
req.files = parsedFiles[moduleName] || {};
const isAuthorized = await mapHeadersAndCheckAuthorization(req, payloadFilter, Collection);
if (!isAuthorized) {
return Response.error(req, res, 'User does not have permission to update the record.', httpStatus.FORBIDDEN);
}
Object.keys(req.body).forEach((key) => {
if (!req.body[key]) {
req.body[key] = null;
}
});
try {
const payload = await uploadFiles(req, Collection);
await Collection.updateOne(payloadFilter, { $set: { ...payload, ...req.body } });
const populateFields = req.headers['x-populate'] ? req.headers['x-populate'].split(',') : queryUtil.populateField(Collection);
const changedEntry = await Collection.findOne(payloadFilter).populate(populateFields);
const crudOptions = {
type: 'CRUD',
action: 'UPDATE',
typeName: moduleName,
options: {}
};
return Response.success(req, res, changedEntry, {}, crudOptions);
} catch (e) {
console.log('[CRUD] update: e:', e);
return Response.error(req, res, e);
}
}
}