chore: add the order count to user porfile

This commit is contained in:
mahyargdz
2025-09-17 15:49:14 +03:30
parent eb7305366c
commit 23a51aceb3
3 changed files with 104 additions and 5 deletions
+99
View File
@@ -14,6 +14,105 @@ class OrderRepository extends BaseRepository<IOrder> {
super(OrderModel);
}
async getUserOrderCount(userId: string) {
const pipeline = [
{
$match: {
user: new Types.ObjectId(userId),
},
},
{
$lookup: {
from: "orderitems",
localField: "_id",
foreignField: "order",
as: "orderItems",
},
},
{
$unwind: "$orderItems",
},
{
$group: {
_id: {
orderId: "$_id",
orderStatus: "$orderStatus",
itemStatus: "$orderItems.status",
},
},
},
{
$group: {
_id: null,
processing: {
$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,
],
},
0,
],
},
},
delivered: {
$sum: {
$cond: [
{
$and: [
{ $eq: ["$_id.orderStatus", OrdersStatus.process_by_seller] },
{ $eq: ["$_id.itemStatus", OrderItemsStatus.Delivered] },
],
},
1,
0,
],
},
},
cancelled: {
$sum: {
$cond: [
{
$and: [
{ $eq: ["$_id.orderStatus", OrdersStatus.cancelled_system] },
{ $eq: ["$_id.itemStatus", OrderItemsStatus.cancelled_system] },
],
},
1,
0,
],
},
},
},
},
{
$project: {
_id: 0,
processing: 1,
delivered: 1,
cancelled: 1,
},
},
];
const result = await this.model.aggregate(pipeline);
return result[0] || { processing: 0, delivered: 0, cancelled: 0 };
}
async getUserOrders(userId: string, statusQuery: OrderStatusQuery) {
const matchQuery: { [k: string]: unknown } = {
user: new Types.ObjectId(userId),