UNPKG

@tasolutions/express-core

Version:
59 lines (50 loc) 2.6 kB
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); } } }