Merge pull request #45 from Danakcorp/mrtz

add: populate return orders
This commit is contained in:
morteza-mortezai
2025-10-31 21:36:12 +03:30
committed by GitHub
+41 -8
View File
@@ -36,9 +36,11 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
},
},
{ $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<IReturnOrder> {
},
},
{ $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 isnt 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<IReturnOrder> {
{ $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<IReturnOrder> {
},
},
// 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<IReturnOrder> {
reason: 1,
imagesUrl: 1,
orderItem: 1,
shipmentItem: 1, // ✅ Include populated shipment item
},
},
},
@@ -122,7 +156,7 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
},
},
// // 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<IReturnOrder> {
]);
const result = docs[0] || { data: [], totalCount: 0 };
return {
count: result.totalCount || 0,
docs: result.data || [],