@tasolutions/express-core
Version:
All libs for express
59 lines (50 loc) • 2.6 kB
JavaScript
const mongoose = require('mongoose');
const Response = require('../../utils/v1Response');
const { httpStatus } = require('../../utils/httpStatus');
const { mapHeadersAndCheckAuthorization, mapHeadersToQuery } = require('../../utils/requestHeader');
const queryUtil = require('../../utils/query.util');
const { count } = require('./count.crud');
const { exportToExcel } = require('./exportToExcel.crud');
module.exports = {
/**
* This crud readOne
*/
readOne: 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 crudOptions = {
type: 'CRUD',
action: 'DETAIL',
typeName: moduleName,
options: {}
};
try {
if (!mongoose.Types.ObjectId.isValid(payloadFilter._id)) {
switch (payloadFilter._id) {
case 'count':
return count(req, res, Collection);
case 'export':
return exportToExcel(req, res, Collection);
default:
return Response.error(req, res, { message: `Not Found: Invalid route format: ${req.baseUrl}/${payloadFilter._id}`, statusCode: httpStatus.NOT_FOUND }, crudOptions);
}
}
const isCheck = await Collection.countDocuments(payloadFilter);
if (!isCheck) return Response.error(req, res, { message: `Unable to find ${moduleName} with id: ${req.params._id}`, statusCode: httpStatus.NOT_FOUND }, crudOptions);
const isAuthorized = await mapHeadersAndCheckAuthorization(req, payloadFilter, Collection);
if (!isAuthorized) return Response.error(req, res, { message: 'User does not have permission to update the record.', statusCode: httpStatus.FORBIDDEN }, crudOptions);
const populateFields = req.headers['x-populate'] ? req.headers['x-populate'].split(',') : queryUtil.populateField(Collection);
let result = await Collection.findOne(payloadFilter).populate(populateFields);
if (configs.callbackDETAIL) {
result = await configs.callbackDETAIL(result);
}
return Response.success(req, res, result, {}, crudOptions);
} catch (e) {
return Response.error(req, res, e);
}
}
}