@tasolutions/express-core
Version:
All libs for express
65 lines (53 loc) • 2.62 kB
JavaScript
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);
}
}
}