add: populate return orders
This commit is contained in:
@@ -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 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<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 || [],
|
||||
|
||||
Reference in New Issue
Block a user