UNPKG

@tasolutions/express-core

Version:
90 lines (74 loc) 3.23 kB
const Response = require('../../utils/v1Response'); const queryUtil = require('../../utils/query.util'); const _ = require('lodash'); const { mapHeadersToQuery } = require('../../utils/requestHeader'); module.exports = { /** * This crud readMany */ readMany: async (req, res, Collection, configs) => { try { const moduleName = Collection.collection.collectionName; const sort = queryUtil.getSort(req, configs); let query = await queryUtil.getQuery(Collection, req); if (configs.query) { query = { ...configs.query, ...query }; } if (req.query.search) { const searchQuery = queryUtil.search(Collection, req.query.search); delete query.search; query = { ...query, $or: [searchQuery] }; } query = { ...await mapHeadersToQuery(req, Collection), ...query }; // Ánh xạ header vào query const populateFields = req.headers['x-populate'] ? req.headers['x-populate'].split(',') : []; const limit = parseInt(req.query.limit, 10); if (limit === -1) { delete query.limit; delete query.page; let results = await Collection.find(query).lean().sort(sort); if (populateFields.length > 0) { results = await Collection.populate(results, populateFields.map(field => ({ path: field }))); } const crudOptions = { type: 'CRUD', action: 'LIST_ALL', typeName: moduleName, options: { lean: true, page: req.query.page || 1, sort: sort, }, }; return Response.success(req, res, results, {}, crudOptions); } else { const options = { lean: true, page: req.query.page || 1, limit: limit || 10, sort: sort, populate: populateFields.length > 0 ? populateFields : queryUtil.populateField(Collection), }; delete query.page; delete query.limit; let results; if (configs.callbackLIST) { results = await Collection.paginate(query, options).then(configs.callbackLIST); } else { results = await Collection.paginate(query, options); } if (Array.isArray(configs.includeFields) && configs.includeFields.length > 0) { results.docs = results.docs.map(result => _.pick(result, configs.includeFields)); } const crudOptions = { type: 'CRUD', action: 'LIST', typeName: moduleName, options, }; return Response.success(req, res, results, {}, crudOptions); } } catch (e) { return Response.error(req, res, e); } }, };