UNPKG

@tasolutions/express-core

Version:
65 lines (57 loc) 2.6 kB
const mongoose = require('mongoose'); const Response = require('../../utils/response'); const { httpStatus } = require('../../utils/httpStatus'); const { mapHeadersAndCheckAuthorization } = require('../../utils/requestHeader'); const queryUtil = require('../../utils/query.util'); const { count } = require('./count.crud'); const { exportToExcel } = require('./exportToExcel.crud'); const { authInfo } = require('../../config'); module.exports = { /** * This crud readOne */ readOne: async (req, res, Collection, configs) => { let payloadFilter = { _id: req.params._id }; if (configs.onlyOwner && req.userLogin && req.userLogin.userId) { payloadFilter.user_id = req.userLogin.userId; } // Ánh xạ headers và kiểm tra quyền truy cập const isAuthorized = await mapHeadersAndCheckAuthorization(req, payloadFilter, Collection); if (!isAuthorized) { return Response.error(res, 'User does not have permission to update the record.', httpStatus.FORBIDDEN); } // Merchant if (authInfo.enableMerchant && !req.isSystemAdmin && configs.isFilterMerchant) { const { merchant } = req.headers; payloadFilter['merchant_id'] = merchant; } try { if (!mongoose.Types.ObjectId.isValid(payloadFilter._id)) { switch (payloadFilter._id) { case 'count': return count(req, res, Collection, configs); case 'export': return exportToExcel(req, res, Collection, configs); default: res.status(httpStatus.BAD_REQUEST).json({ statusCode: httpStatus.BAD_REQUEST, success: false, status: 'error', message: 'Something went wrong', }); } } let populate = queryUtil.populateField(Collection); if (configs.populate) { populate = populate.concat(configs.populate); } let result = await Collection.findOne(payloadFilter).populate(populate); if (result && configs.callbackDETAIL) { result = await configs.callbackDETAIL(result); } return result ? Response.success(res, result) : Response.error(res, 'Not found', httpStatus.NOT_FOUND); } catch (e) { return Response.error(res, e.message); } } }