@@ -36,9 +36,11 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ $unwind: { path: "$returnOrderItems", preserveNullAndEmptyArrays: true } },
|
{ $unwind: { path: "$returnOrderItems", preserveNullAndEmptyArrays: true } },
|
||||||
|
|
||||||
|
// 3) lookup return reason
|
||||||
{
|
{
|
||||||
$lookup: {
|
$lookup: {
|
||||||
from: "returnreasons", // collection name of ReturnReasonModel
|
from: "returnreasons",
|
||||||
localField: "returnOrderItems.reason",
|
localField: "returnOrderItems.reason",
|
||||||
foreignField: "_id",
|
foreignField: "_id",
|
||||||
as: "returnOrderItems.reason",
|
as: "returnOrderItems.reason",
|
||||||
@@ -61,9 +63,40 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ $unwind: { path: "$orderItem", preserveNullAndEmptyArrays: true } },
|
{ $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: {
|
$lookup: {
|
||||||
from: "shops",
|
from: "shops",
|
||||||
@@ -75,7 +108,7 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
|||||||
{ $unwind: { path: "$shop", preserveNullAndEmptyArrays: true } },
|
{ $unwind: { path: "$shop", preserveNullAndEmptyArrays: true } },
|
||||||
{ $addFields: { shopName: "$shop.shopName" } },
|
{ $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: {
|
$group: {
|
||||||
_id: "$_id",
|
_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 } },
|
{ $sort: { createdAt: -1 } },
|
||||||
|
|
||||||
// 8) facet for pagination + count
|
// 10) facet for pagination
|
||||||
{
|
{
|
||||||
$facet: {
|
$facet: {
|
||||||
data: [
|
data: [
|
||||||
@@ -114,6 +147,7 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
|||||||
reason: 1,
|
reason: 1,
|
||||||
imagesUrl: 1,
|
imagesUrl: 1,
|
||||||
orderItem: 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: {
|
$addFields: {
|
||||||
totalCount: { $ifNull: [{ $arrayElemAt: ["$totalCount.count", 0] }, 0] },
|
totalCount: { $ifNull: [{ $arrayElemAt: ["$totalCount.count", 0] }, 0] },
|
||||||
@@ -131,7 +165,6 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
const result = docs[0] || { data: [], totalCount: 0 };
|
const result = docs[0] || { data: [], totalCount: 0 };
|
||||||
|
|
||||||
return {
|
return {
|
||||||
count: result.totalCount || 0,
|
count: result.totalCount || 0,
|
||||||
docs: result.data || [],
|
docs: result.data || [],
|
||||||
|
|||||||
Reference in New Issue
Block a user