All files / src/controllers/statistics-controllers ordersStatistics.js

71.42% Statements 5/7
66.66% Branches 2/3
100% Functions 2/2
71.42% Lines 5/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43      2x 2x                         2x                             77x 6x                  
import OrdersModel from "../../models/Orders.js";
 
export default async function ordersStatistics(year = new Date().getFullYear()) {
    try {
        const result = await OrdersModel.aggregate([
            { $match: { $expr: { $eq: [{ $year: "$createdAt" }, +year] } } },
            {
                $group: {
                    _id: "orders",
                    totalOrders: { $count: {} },
                    completedOrders: condition("Completed"),
                    pendingOrders: condition("Pending"),
                    canceledOrders: condition("Canceled")
                }
            }
        ]);
 
        return result.length ? { year, statistics: result[0] } : {
            year,
            statistics: {
                totalOrders: 0,
                completedOrders: 0,
                pendingOrders: 0,
                canceledOrders: 0
            }
        }
    } catch (error) {
        console.log(error)
        return;
    }
}
 
const condition = (state) => {
    return {
        $sum: {
            $cond: {
                if: { $eq: ["$state", state] },
                then: 1,
                else: 0,
            }
        }
    }
}