Не знаю, как упростить функцию
Есть такой код:
conn.query(`SELECT orders.id,
order_product.product_count,
products.product_id,
products.product_amount,
date_format(orders.date, '%d.%m.%Y %H:%i') as 'date'
FROM orders INNER JOIN order_product
ON orders.id = order_product.order_id INNER JOIN products
ON order_product.product_id = products.product_id
WHERE orders.id IN(
SELECT DISTINCT orders.id
FROM orders LEFT JOIN order_product
ON orders.id = order_product.order_id
WHERE orders.user_id = ${req.session.userId}
AND orders.status = '${orderStatus[0]}'
ORDER BY orders.id
);`, (err, productInOrder) => {
if (err) {throw err;}
if (productInOrder.length > 0) {
let ordersArray = [];
for (let i = 0; i < productInOrder.length; i++) {
if (ordersArray.length === 0) {
ordersArray[0] = {
orderId: productInOrder[i].id,
productList: [
{
product_id: productInOrder[i].product_id,
product_count: productInOrder[i].product_count,
product_amount: productInOrder[i].product_amount
}
],
totalAmount: productInOrder[i].product_amount *
productInOrder[i].product_count,
totalCount: 1,
orderDate: productInOrder[i].date
}
} else if (ordersArray.length > 0){
for (let j = 0; j < ordersArray.length; j++) {
if (ordersArray[j].orderId === productInOrder[i].id) {
for (let k = 0; k < ordersArray[j].productList.length; k++) {
if(ordersArray[j].productList[k].product_id !== productInOrder[i].product_id) {
if (k === ordersArray[j].productList.length - 1) {
ordersArray[j].productList.push({
product_id: productInOrder[i].product_id,
product_count: productInOrder[i].product_count,
product_amount: productInOrder[i].product_amount,
});
ordersArray[j].totalAmount += productInOrder[i].product_count *
productInOrder[i].product_amount,
ordersArray[j].totalCount++;
}
}
}
} else if (ordersArray[j].orderId !== productInOrder[i].id &&
j === ordersArray.length - 1) {
ordersArray.push({
orderId: productInOrder[i].id,
productList: [
{
product_id: productInOrder[i].product_id,
product_count: productInOrder[i].product_count,
product_amount: productInOrder[i].product_amount
}
],
totalAmount: productInOrder[i].product_amount *
productInOrder[i].product_count,
totalCount: 1,
orderDate: productInOrder[i].date
});
}
}
}
}
res.render('myOrders', {
userName: req.session.userName,
successAuthentication: req.session.successAuthentication,
isWorker: req.session.isWorker,
ordersArray
});
} else {
res.render('myOrders', {
userName: req.session.userName,
successAuthentication: req.session.successAuthentication,
isWorker: req.session.isWorker
});
}
});
в productInOrder содержится информация такого типа:
А в ordersArray такая информация:
Это более подробно для заказа с Id 4:

P.S. там форматирование в коде болеет, я не знаю почему, извините за это.

