UNPKG

@tasolutions/express-core

Version:
65 lines (53 loc) 2.62 kB
const Response = require('../../utils/v1Response'); const httpStatus = require('../../utils/httpStatus'); const { 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 create */ create: async (req, res, Collection) => { const moduleName = Collection.collection.collectionName; const crudOptions = { type: 'CRUD', action: 'CREATE', typeName: moduleName, }; try { const parsedBody = parseFormData(req.body); const parsedFiles = parseFormData(req.files); if (!(parsedBody[moduleName] || parsedFiles[moduleName])) { return Response.error(req, res, { message: `${moduleName} is required`, statusCode: httpStatus.BAD_REQUEST }, crudOptions); } req.body = parsedBody[moduleName] || {}; req.files = parsedFiles[moduleName] || {}; if (typeof Collection.validateSchema === 'function') { const validationSchema = Collection.validateSchema(); const { error } = validationSchema.validate(parsedBody[moduleName]); if (error) { return Response.error(req, res, error, crudOptions); } } await mapHeadersToQuery(req, Collection); Object.keys(parsedBody[moduleName]).forEach((key) => { if (parsedBody[moduleName][key] === "") { parsedBody[moduleName][key] = null; } if (parsedBody[moduleName]['user_identifier']) { parsedBody[moduleName]['created_by_identifier'] = parsedBody[moduleName]['user_identifier']; } }); const newEntry = await uploadFiles(req, Collection); const createdEntry = await Collection.create({ ...newEntry, ...parsedBody[moduleName] }); const populateFields = req.headers['x-populate'] ? req.headers['x-populate'].split(',') : queryUtil.populateField(Collection); const populatedEntry = populateFields.length > 0 ? await Collection.populate(createdEntry, populateFields.map(field => ({ path: field }))) : createdEntry; return Response.success(req, res, populatedEntry, {}, crudOptions); } catch (e) { return Response.error(req, res, e); } } }