From 9817917bf16b610331f24d0d34ecab8bd3156776 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Wed, 5 Nov 2025 23:39:55 +0330 Subject: [PATCH] fix : user order count --- src/modules/order/order.repository.ts | 76 +++++++++++---------------- 1 file changed, 31 insertions(+), 45 deletions(-) diff --git a/src/modules/order/order.repository.ts b/src/modules/order/order.repository.ts index bbeda8e..3b7dcd5 100644 --- a/src/modules/order/order.repository.ts +++ b/src/modules/order/order.repository.ts @@ -18,9 +18,7 @@ class OrderRepository extends BaseRepository { async getUserOrderCount(userId: string) { const pipeline = [ { - $match: { - user: new Types.ObjectId(userId), - }, + $match: { user: new Types.ObjectId(userId) }, }, { $lookup: { @@ -30,9 +28,7 @@ class OrderRepository extends BaseRepository { as: "orderItems", }, }, - { - $unwind: "$orderItems", - }, + { $unwind: "$orderItems" }, { $group: { _id: { @@ -49,34 +45,25 @@ class OrderRepository extends BaseRepository { $sum: { $cond: [ { - $or: [ - { $eq: ["$_id.orderStatus", OrdersStatus.process_by_seller] }, - { $eq: ["$_id.orderStatus", OrdersStatus.wait_payment] }, - ], - }, - { - $cond: [ - { - $or: [ - { $eq: ["$_id.itemStatus", OrderItemsStatus.Processing] }, - { $eq: ["$_id.itemStatus", OrderItemsStatus.Shipped] }, - ], - }, - 1, - 0, - ], + $or: [{ $eq: ["$_id.itemStatus", OrderItemsStatus.Processing] }], }, + 1, 0, ], }, }, delivered: { + $sum: { + $cond: [{ $eq: ["$_id.itemStatus", OrderItemsStatus.Delivered] }, 1, 0], + }, + }, + cancelled: { $sum: { $cond: [ { - $and: [ - { $eq: ["$_id.orderStatus", OrdersStatus.process_by_seller] }, - { $eq: ["$_id.itemStatus", OrderItemsStatus.Delivered] }, + $in: [ + "$_id.itemStatus", + [OrderItemsStatus.cancelled_system, OrderItemsStatus.cancelled_user, OrderItemsStatus.cancelled_shop], ], }, 1, @@ -84,18 +71,14 @@ class OrderRepository extends BaseRepository { ], }, }, - cancelled: { + returned: { $sum: { - $cond: [ - { - $and: [ - { $eq: ["$_id.orderStatus", OrdersStatus.cancelled_system] }, - { $eq: ["$_id.itemStatus", OrderItemsStatus.cancelled_system] }, - ], - }, - 1, - 0, - ], + $cond: [{ $eq: ["$_id.itemStatus", OrderItemsStatus.Returned] }, 1, 0], + }, + }, + shipped: { + $sum: { + $cond: [{ $eq: ["$_id.itemStatus", OrderItemsStatus.Shipped] }, 1, 0], }, }, }, @@ -106,12 +89,22 @@ class OrderRepository extends BaseRepository { processing: 1, delivered: 1, cancelled: 1, + returned: 1, + shipped: 1, }, }, ]; - const result = await this.model.aggregate(pipeline); - return result[0] || { processing: 0, delivered: 0, cancelled: 0 }; + const [result] = await this.model.aggregate(pipeline); + return ( + result || { + processing: 0, + delivered: 0, + cancelled: 0, + returned: 0, + shipped: 0, + } + ); } async getUserOrders(userId: string, statusQuery: OrderStatusQuery) { @@ -123,7 +116,6 @@ class OrderRepository extends BaseRepository { switch (statusQuery) { case "Cancelled": - // matchQuery.$or = [{ orderStatus: OrdersStatus.cancelled_system }, { orderStatus: OrdersStatus.Cancelled }]; orderItemsMatchQuery.$or = [ { "orderItems.status": OrderItemsStatus.cancelled_system }, { "orderItems.status": OrderItemsStatus.cancelled_shop }, @@ -131,21 +123,15 @@ class OrderRepository extends BaseRepository { ]; break; case "Processing": - // matchQuery.$or = [{ orderStatus: OrdersStatus.process_by_seller }, { orderStatus: OrdersStatus.wait_payment }]; orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Processing; - // { "orderItems.status": OrderItemsStatus.Shipped }, - break; case "Delivered": - // matchQuery.orderStatus = OrdersStatus.process_by_seller; orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Delivered; break; case "Returned": - // matchQuery.orderStatus = OrdersStatus.process_by_seller; orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Returned; break; case "Shipped": - // matchQuery.orderStatus = OrdersStatus.process_by_seller; orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Shipped; break; default: