@tasolutions/express-core
Version:
All libs for express
77 lines (69 loc) • 3.13 kB
JavaScript
const Response = require('../../utils/response');
const { mapHeadersToQuery } = require('../../utils/requestHeader');
const { parseFormData } = require('../../utils/collection.util');
const { uploadFiles } = require('../../utils/upload');
const { authInfo } = require('../../config');
module.exports = {
/**
* This crud create
*/
create: async (req, res, Collection) => {
try {
await mapHeadersToQuery(req, Collection);
if (req.userLogin && req.userLogin.userId) {
req.body.creatorId = req.userLogin.userId;
}
// Merchant
if (authInfo.enableMerchant && !req.isSystemAdmin && configs.isFilterMerchant) {
const { merchant } = req.headers;
req.body.merchant_id = merchant;
}
// Remove fields with empty string values from req.body
Object.keys(req.body).forEach((key) => {
if (req.body[key] === "") {
req.body[key] = null;
}
});
// Phân tích cú pháp req.body thành cấu trúc đối tượng
const parsedBody = parseFormData(req.body);
// Xử lý trường hợp array
if (Array.isArray(parsedBody)) {
// Nếu là array, tạo nhiều documents
const createdEntries = [];
for (const item of parsedBody) {
if (item && typeof item === 'object') {
const newEntry = await uploadFiles(req, Collection);
const createdEntry = await Collection.create({ ...newEntry, ...item });
createdEntries.push(createdEntry);
}
}
return Response.success(res, createdEntries);
}
// Xử lý trường hợp object có items array
else if (parsedBody.items && Array.isArray(parsedBody.items)) {
const createdEntries = [];
const { items, ...otherFields } = parsedBody;
for (const item of items) {
if (item && typeof item === 'object') {
const newEntry = await uploadFiles(req, Collection);
const createdEntry = await Collection.create({
...newEntry,
...otherFields, // Thêm các fields khác (creatorId, etc.)
...item
});
createdEntries.push(createdEntry);
}
}
return Response.success(res, createdEntries);
}
// Nếu là object đơn lẻ, tạo một document
else {
const newEntry = await uploadFiles(req, Collection);
const createdEntry = await Collection.create({ ...newEntry, ...parsedBody });
return Response.success(res, createdEntry);
}
} catch (e) {
return Response.error(res, e.message);
}
}
}