populate : return list reason
This commit is contained in:
@@ -64,12 +64,18 @@ export class ReturnOrderDTO {
|
||||
@Expose()
|
||||
total_price: number;
|
||||
|
||||
@Expose()
|
||||
@Transform(({ value }) => new Date(value).toISOString())
|
||||
@Transform(({ value }) => {
|
||||
if (!value) return null;
|
||||
const date = new Date(value);
|
||||
return isNaN(date.getTime()) ? null : date.toISOString();
|
||||
})
|
||||
createdAt: string;
|
||||
|
||||
@Expose()
|
||||
@Transform(({ value }) => new Date(value).toISOString())
|
||||
@Transform(({ value }) => {
|
||||
if (!value) return null;
|
||||
const date = new Date(value);
|
||||
return isNaN(date.getTime()) ? null : date.toISOString();
|
||||
})
|
||||
updatedAt: string;
|
||||
|
||||
@Expose()
|
||||
|
||||
@@ -14,8 +14,8 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
||||
}
|
||||
|
||||
async getAllReturnsForAdmin(skip: number, limit: number) {
|
||||
const [result] = await this.model.aggregate([
|
||||
// --- 1. Lookup order ---
|
||||
const docs = await this.model.aggregate([
|
||||
// 1) lookup order
|
||||
{
|
||||
$lookup: {
|
||||
from: "orders",
|
||||
@@ -26,7 +26,7 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
||||
},
|
||||
{ $unwind: { path: "$order", preserveNullAndEmptyArrays: true } },
|
||||
|
||||
// --- 2. Lookup return order items ---
|
||||
// 2) lookup return order items
|
||||
{
|
||||
$lookup: {
|
||||
from: "returnorderitems",
|
||||
@@ -36,8 +36,22 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
||||
},
|
||||
},
|
||||
{ $unwind: { path: "$returnOrderItems", preserveNullAndEmptyArrays: true } },
|
||||
{
|
||||
$lookup: {
|
||||
from: "returnreasons", // collection name of ReturnReasonModel
|
||||
localField: "returnOrderItems.reason",
|
||||
foreignField: "_id",
|
||||
as: "returnOrderItems.reason",
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: {
|
||||
path: "$returnOrderItems.reason",
|
||||
preserveNullAndEmptyArrays: true,
|
||||
},
|
||||
},
|
||||
|
||||
// --- 3. Lookup order items ---
|
||||
// 4) lookup orderItem (the original order item)
|
||||
{
|
||||
$lookup: {
|
||||
from: "orderitems",
|
||||
@@ -49,7 +63,7 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
||||
{ $unwind: { path: "$orderItem", preserveNullAndEmptyArrays: true } },
|
||||
{ $addFields: { "returnOrderItems.orderItem": "$orderItem" } },
|
||||
|
||||
// --- 4. Lookup shop ---
|
||||
// 5) lookup shop from the orderItem
|
||||
{
|
||||
$lookup: {
|
||||
from: "shops",
|
||||
@@ -61,10 +75,24 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
||||
{ $unwind: { path: "$shop", preserveNullAndEmptyArrays: true } },
|
||||
{ $addFields: { shopName: "$shop.shopName" } },
|
||||
|
||||
// --- 5. Sort before pagination ---
|
||||
// 6) group back so each return order is a single document with array of items
|
||||
{
|
||||
$group: {
|
||||
_id: "$_id",
|
||||
order: { $first: "$order" },
|
||||
status: { $first: "$status" },
|
||||
total_price: { $first: "$total_price" },
|
||||
shopName: { $first: "$shopName" },
|
||||
createdAt: { $first: "$createdAt" },
|
||||
updatedAt: { $first: "$updatedAt" },
|
||||
returnOrderItems: { $push: "$returnOrderItems" },
|
||||
},
|
||||
},
|
||||
|
||||
// 7) sort (by createdAt) before pagination
|
||||
{ $sort: { createdAt: -1 } },
|
||||
|
||||
// --- 6. Facet for pagination + count ---
|
||||
// 8) facet for pagination + count
|
||||
{
|
||||
$facet: {
|
||||
data: [
|
||||
@@ -85,10 +113,7 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
||||
comment: 1,
|
||||
reason: 1,
|
||||
imagesUrl: 1,
|
||||
orderItem: {
|
||||
_id: 1,
|
||||
totalSellingPrice: 1,
|
||||
},
|
||||
orderItem: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -97,7 +122,7 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
||||
},
|
||||
},
|
||||
|
||||
// --- 7. Flatten count field ---
|
||||
// // 9) flatten count field
|
||||
{
|
||||
$addFields: {
|
||||
totalCount: { $ifNull: [{ $arrayElemAt: ["$totalCount.count", 0] }, 0] },
|
||||
@@ -105,9 +130,11 @@ export class ReturnOrderRepo extends BaseRepository<IReturnOrder> {
|
||||
},
|
||||
]);
|
||||
|
||||
const result = docs[0] || { data: [], totalCount: 0 };
|
||||
|
||||
return {
|
||||
count: result?.totalCount || 0,
|
||||
docs: result?.data || [],
|
||||
count: result.totalCount || 0,
|
||||
docs: result.data || [],
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user