Не знаю, как упростить функцию

Есть такой код:

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 содержится информация такого типа:

Информация в productInOrder

А в ordersArray такая информация:

введите сюда описание изображения

Это более подробно для заказа с Id 4: введите сюда описание изображения

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


Ответы (0 шт):