From b830015b30ce96c0c380a6c6f4fc49805ebb4ede Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Fri, 31 Oct 2025 21:35:35 +0330 Subject: [PATCH] add: populate return orders --- src/modules/return/return.repository.ts | 49 +++++++++++++++++++++---- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/src/modules/return/return.repository.ts b/src/modules/return/return.repository.ts index 26ddd77..3b79b34 100644 --- a/src/modules/return/return.repository.ts +++ b/src/modules/return/return.repository.ts @@ -36,9 +36,11 @@ export class ReturnOrderRepo extends BaseRepository { }, }, { $unwind: { path: "$returnOrderItems", preserveNullAndEmptyArrays: true } }, + + // 3) lookup return reason { $lookup: { - from: "returnreasons", // collection name of ReturnReasonModel + from: "returnreasons", localField: "returnOrderItems.reason", foreignField: "_id", as: "returnOrderItems.reason", @@ -61,9 +63,40 @@ export class ReturnOrderRepo extends BaseRepository { }, }, { $unwind: { path: "$orderItem", preserveNullAndEmptyArrays: true } }, - { $addFields: { "returnOrderItems.orderItem": "$orderItem" } }, - // 5) lookup shop from the orderItem + // ✅ 5) populate shipmentItem from orderItem.shipmentItems + { + $addFields: { + "returnOrderItems.shipmentItem": { + $first: { + $filter: { + input: "$orderItem.shipmentItems", + as: "si", + cond: { $eq: ["$$si._id", "$returnOrderItems.shipmentItem"] }, + }, + }, + }, + }, + }, + + // 6) attach orderItem itself + { $addFields: { "returnOrderItems.orderItem": "$orderItem" } }, + // ✅ populate product inside shipmentItem + { + $lookup: { + from: "products", // name of your product collection + localField: "returnOrderItems.shipmentItem.product", + foreignField: "_id", // or "productId" if your product._id isn’t numeric + as: "returnOrderItems.shipmentItem.product", + }, + }, + { + $unwind: { + path: "$returnOrderItems.shipmentItem.product", + preserveNullAndEmptyArrays: true, + }, + }, + // 7) lookup shop { $lookup: { from: "shops", @@ -75,7 +108,7 @@ export class ReturnOrderRepo extends BaseRepository { { $unwind: { path: "$shop", preserveNullAndEmptyArrays: true } }, { $addFields: { shopName: "$shop.shopName" } }, - // 6) group back so each return order is a single document with array of items + // 8) regroup all return items per return order { $group: { _id: "$_id", @@ -89,10 +122,10 @@ export class ReturnOrderRepo extends BaseRepository { }, }, - // 7) sort (by createdAt) before pagination + // 9) sort (latest first) { $sort: { createdAt: -1 } }, - // 8) facet for pagination + count + // 10) facet for pagination { $facet: { data: [ @@ -114,6 +147,7 @@ export class ReturnOrderRepo extends BaseRepository { reason: 1, imagesUrl: 1, orderItem: 1, + shipmentItem: 1, // ✅ Include populated shipment item }, }, }, @@ -122,7 +156,7 @@ export class ReturnOrderRepo extends BaseRepository { }, }, - // // 9) flatten count field + // 11) flatten count field { $addFields: { totalCount: { $ifNull: [{ $arrayElemAt: ["$totalCount.count", 0] }, 0] }, @@ -131,7 +165,6 @@ export class ReturnOrderRepo extends BaseRepository { ]); const result = docs[0] || { data: [], totalCount: 0 }; - return { count: result.totalCount || 0, docs: result.data || [],