UNPKG

@tasolutions/express-core

Version:
69 lines (55 loc) 2.63 kB
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); } } }