fix : user order count

This commit is contained in:
morteza-mortezai
2025-11-05 23:39:55 +03:30
parent f8edd3f358
commit 9817917bf1
+31 -45
View File
@@ -18,9 +18,7 @@ class OrderRepository extends BaseRepository<IOrder> {
async getUserOrderCount(userId: string) { async getUserOrderCount(userId: string) {
const pipeline = [ const pipeline = [
{ {
$match: { $match: { user: new Types.ObjectId(userId) },
user: new Types.ObjectId(userId),
},
}, },
{ {
$lookup: { $lookup: {
@@ -30,9 +28,7 @@ class OrderRepository extends BaseRepository<IOrder> {
as: "orderItems", as: "orderItems",
}, },
}, },
{ { $unwind: "$orderItems" },
$unwind: "$orderItems",
},
{ {
$group: { $group: {
_id: { _id: {
@@ -49,34 +45,25 @@ class OrderRepository extends BaseRepository<IOrder> {
$sum: { $sum: {
$cond: [ $cond: [
{ {
$or: [ $or: [{ $eq: ["$_id.itemStatus", OrderItemsStatus.Processing] }],
{ $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,
],
}, },
1,
0, 0,
], ],
}, },
}, },
delivered: { delivered: {
$sum: {
$cond: [{ $eq: ["$_id.itemStatus", OrderItemsStatus.Delivered] }, 1, 0],
},
},
cancelled: {
$sum: { $sum: {
$cond: [ $cond: [
{ {
$and: [ $in: [
{ $eq: ["$_id.orderStatus", OrdersStatus.process_by_seller] }, "$_id.itemStatus",
{ $eq: ["$_id.itemStatus", OrderItemsStatus.Delivered] }, [OrderItemsStatus.cancelled_system, OrderItemsStatus.cancelled_user, OrderItemsStatus.cancelled_shop],
], ],
}, },
1, 1,
@@ -84,18 +71,14 @@ class OrderRepository extends BaseRepository<IOrder> {
], ],
}, },
}, },
cancelled: { returned: {
$sum: { $sum: {
$cond: [ $cond: [{ $eq: ["$_id.itemStatus", OrderItemsStatus.Returned] }, 1, 0],
{ },
$and: [ },
{ $eq: ["$_id.orderStatus", OrdersStatus.cancelled_system] }, shipped: {
{ $eq: ["$_id.itemStatus", OrderItemsStatus.cancelled_system] }, $sum: {
], $cond: [{ $eq: ["$_id.itemStatus", OrderItemsStatus.Shipped] }, 1, 0],
},
1,
0,
],
}, },
}, },
}, },
@@ -106,12 +89,22 @@ class OrderRepository extends BaseRepository<IOrder> {
processing: 1, processing: 1,
delivered: 1, delivered: 1,
cancelled: 1, cancelled: 1,
returned: 1,
shipped: 1,
}, },
}, },
]; ];
const result = await this.model.aggregate(pipeline); const [result] = await this.model.aggregate(pipeline);
return result[0] || { processing: 0, delivered: 0, cancelled: 0 }; return (
result || {
processing: 0,
delivered: 0,
cancelled: 0,
returned: 0,
shipped: 0,
}
);
} }
async getUserOrders(userId: string, statusQuery: OrderStatusQuery) { async getUserOrders(userId: string, statusQuery: OrderStatusQuery) {
@@ -123,7 +116,6 @@ class OrderRepository extends BaseRepository<IOrder> {
switch (statusQuery) { switch (statusQuery) {
case "Cancelled": case "Cancelled":
// matchQuery.$or = [{ orderStatus: OrdersStatus.cancelled_system }, { orderStatus: OrdersStatus.Cancelled }];
orderItemsMatchQuery.$or = [ orderItemsMatchQuery.$or = [
{ "orderItems.status": OrderItemsStatus.cancelled_system }, { "orderItems.status": OrderItemsStatus.cancelled_system },
{ "orderItems.status": OrderItemsStatus.cancelled_shop }, { "orderItems.status": OrderItemsStatus.cancelled_shop },
@@ -131,21 +123,15 @@ class OrderRepository extends BaseRepository<IOrder> {
]; ];
break; break;
case "Processing": case "Processing":
// matchQuery.$or = [{ orderStatus: OrdersStatus.process_by_seller }, { orderStatus: OrdersStatus.wait_payment }];
orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Processing; orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Processing;
// { "orderItems.status": OrderItemsStatus.Shipped },
break; break;
case "Delivered": case "Delivered":
// matchQuery.orderStatus = OrdersStatus.process_by_seller;
orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Delivered; orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Delivered;
break; break;
case "Returned": case "Returned":
// matchQuery.orderStatus = OrdersStatus.process_by_seller;
orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Returned; orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Returned;
break; break;
case "Shipped": case "Shipped":
// matchQuery.orderStatus = OrdersStatus.process_by_seller;
orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Shipped; orderItemsMatchQuery["orderItems.status"] = OrderItemsStatus.Shipped;
break; break;
default: default: