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