first
This commit is contained in:
@@ -0,0 +1,335 @@
|
||||
import { Types } from "mongoose";
|
||||
|
||||
import { BaseRepository } from "../../../common/base/repository";
|
||||
import { SellerFinesQueries } from "../../../common/types/query.type";
|
||||
import { IFine } from "../models/Abstraction/IFine";
|
||||
import { FineModel } from "../models/fine.model";
|
||||
|
||||
export class FineRepo extends BaseRepository<IFine> {
|
||||
constructor() {
|
||||
super(FineModel);
|
||||
}
|
||||
|
||||
async findAllBySeller(sellerId: string, queries: SellerFinesQueries) {
|
||||
const page = queries.page || 1;
|
||||
const limit = queries.limit || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
const docs = await this.model.aggregate([
|
||||
{
|
||||
$match: {
|
||||
seller: new Types.ObjectId(sellerId),
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "finerules",
|
||||
localField: "fine_rule",
|
||||
foreignField: "_id",
|
||||
as: "fineRuleDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: "$fineRuleDetails",
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
sellerDetails: { $arrayElemAt: ["$sellerDetails", 0] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "cancelreasons",
|
||||
localField: "reason",
|
||||
foreignField: "_id",
|
||||
as: "cancelReasonDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
cancelReasonDetails: { $ifNull: ["$cancelReasonDetails", []] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "returnreasons",
|
||||
localField: "reason",
|
||||
foreignField: "_id",
|
||||
as: "returnReasonDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
returnReasonDetails: { $ifNull: ["$returnReasonDetails", []] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
reasonDetails: {
|
||||
$cond: {
|
||||
if: { $eq: ["$reasonRef", "Cancel"] },
|
||||
then: { $arrayElemAt: ["$cancelReasonDetails", 0] },
|
||||
else: { $arrayElemAt: ["$returnReasonDetails", 0] },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$unset: ["cancelReasonDetails", "returnReasonDetails"],
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "cancelorderitems",
|
||||
localField: "orderItem",
|
||||
foreignField: "_id",
|
||||
as: "cancelOrderItemDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
cancelOrderItemDetails: { $ifNull: ["$cancelOrderItemDetails", []] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "returnorderitems",
|
||||
localField: "orderItem",
|
||||
foreignField: "_id",
|
||||
as: "returnOrderItemDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
returnOrderItemDetails: { $ifNull: ["$returnOrderItemDetails", []] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
orderItemsDetails: {
|
||||
$cond: {
|
||||
if: { $eq: ["$orderItemRef", "CancelOrderItem"] },
|
||||
then: { $arrayElemAt: ["$cancelOrderItemDetails", 0] },
|
||||
else: { $arrayElemAt: ["$returnOrderItemDetails", 0] },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$unset: ["cancelOrderItemDetails", "returnOrderItemDetails"],
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "orderitems",
|
||||
localField: "orderItemsDetails.orderItem",
|
||||
foreignField: "_id",
|
||||
as: "orderItemsDetails.orderItem",
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: "$orderItemsDetails.orderItem",
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
shipmentItem: {
|
||||
$arrayElemAt: ["$orderItemsDetails.orderItem.shipmentItems", 0],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "products",
|
||||
localField: "shipmentItem.product",
|
||||
foreignField: "_id",
|
||||
as: "product",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
product: { $arrayElemAt: ["$product", 0] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$facet: {
|
||||
data: [{ $skip: skip }, { $limit: limit }],
|
||||
totalCount: [{ $count: "count" }],
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
totalCount: { $arrayElemAt: ["$totalCount.count", 0] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$sort: {
|
||||
createdAt: -1,
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
console.dir(docs[0], { depth: null });
|
||||
return {
|
||||
count: (docs[0]?.totalCount as number) || 0,
|
||||
docs: docs[0]?.data || [],
|
||||
};
|
||||
}
|
||||
|
||||
async findAllForAdmin(queries: SellerFinesQueries) {
|
||||
const page = queries.page || 1;
|
||||
const limit = queries.limit || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
const docs = await this.model.aggregate([
|
||||
{
|
||||
$lookup: {
|
||||
from: "finerules",
|
||||
localField: "fine_rule",
|
||||
foreignField: "_id",
|
||||
as: "fineRuleDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: "$fineRuleDetails",
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
sellerDetails: { $arrayElemAt: ["$sellerDetails", 0] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "cancelreasons",
|
||||
localField: "reason",
|
||||
foreignField: "_id",
|
||||
as: "cancelReasonDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
cancelReasonDetails: { $ifNull: ["$cancelReasonDetails", []] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "returnreasons",
|
||||
localField: "reason",
|
||||
foreignField: "_id",
|
||||
as: "returnReasonDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
returnReasonDetails: { $ifNull: ["$returnReasonDetails", []] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
reasonDetails: {
|
||||
$cond: {
|
||||
if: { $eq: ["$reasonRef", "Cancel"] },
|
||||
then: { $arrayElemAt: ["$cancelReasonDetails", 0] },
|
||||
else: { $arrayElemAt: ["$returnReasonDetails", 0] },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$unset: ["cancelReasonDetails", "returnReasonDetails"],
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "cancelorderitems",
|
||||
localField: "orderItem",
|
||||
foreignField: "_id",
|
||||
as: "cancelOrderItemDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
cancelOrderItemDetails: { $ifNull: ["$cancelOrderItemDetails", []] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "returnorderitems",
|
||||
localField: "orderItem",
|
||||
foreignField: "_id",
|
||||
as: "returnOrderItemDetails",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
returnOrderItemDetails: { $ifNull: ["$returnOrderItemDetails", []] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
orderItemsDetails: {
|
||||
$cond: {
|
||||
if: { $eq: ["$orderItemRef", "CancelOrderItem"] },
|
||||
then: { $arrayElemAt: ["$cancelOrderItemDetails", 0] },
|
||||
else: { $arrayElemAt: ["$returnOrderItemDetails", 0] },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$unset: ["cancelOrderItemDetails", "returnOrderItemDetails"],
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "orderitems",
|
||||
localField: "orderItemsDetails.orderItem",
|
||||
foreignField: "_id",
|
||||
as: "orderItemsDetails.orderItem",
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: "$orderItemsDetails.orderItem",
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
shipmentItem: {
|
||||
$arrayElemAt: ["$orderItemsDetails.orderItem.shipmentItems", 0],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "products",
|
||||
localField: "shipmentItem.product",
|
||||
foreignField: "_id",
|
||||
as: "product",
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
product: { $arrayElemAt: ["$product", 0] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$facet: {
|
||||
data: [{ $skip: skip }, { $limit: limit }],
|
||||
totalCount: [{ $count: "count" }],
|
||||
},
|
||||
},
|
||||
{
|
||||
$addFields: {
|
||||
totalCount: { $arrayElemAt: ["$totalCount.count", 0] },
|
||||
},
|
||||
},
|
||||
{
|
||||
$sort: {
|
||||
createdAt: -1,
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
console.dir(docs[0], { depth: null });
|
||||
return {
|
||||
count: (docs[0]?.totalCount as number) || 0,
|
||||
docs: docs[0]?.data || [],
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export function createFineRepo(): FineRepo {
|
||||
return new FineRepo();
|
||||
}
|
||||
Reference in New Issue
Block a user