Untitled

mail@pastecode.io avatar
unknown
plain_text
20 days ago
1.8 kB
5
Indexable
Never
exports.getRetailersByFilter = catchAsync(async (req, res, next) => {
  const { email, pricingType, status } = req.query;
  const page = parseInt(req.query.page) || 1;
  const limit = parseInt(req.query.limit) || 10;
  let search = { role: 'retailer' };
  
  let obj = {};
  if (req.user.role == 'salesman') {
    obj.sales_man = req.user.profile;
  }
  if (email) {
    search.email = { $regex: email, $options: 'i' };
  }

  if (pricingType == 1 || pricingType == 2 || pricingType == 3) {
    obj.pricingType = parseInt(pricingType);
  }

  if (status == 'true') {
    search.status = true;
  } else if (status == 'false') {
    search.status = false;
  }

  const count = await User.find(search).count();
  let retailers = null;
  let countPages = count % limit == 0 ? parseInt(count / limit) : parseInt(count / limit) + 1;
  retailers = await User.aggregate([
    { $match: search },
    {
      $lookup: {
        from: 'retailers',
        localField: 'profile',
        foreignField: '_id',
        pipeline: [{ $match: obj }, { $project: { pricingType: 1 } }],
        as: 'Pricing'
      }
    },
    { $match: { Pricing: { $ne: [] } } }
  ])
    .skip((page - 1) * limit)
    .limit(limit);
  //.map((resul) => resul.PricingType)

  const data = retailers.reduce((result, retailer) => {
    let obj = {};
    obj._id = retailer._id;
    obj.name = retailer.name;
    obj.joiningDate = retailer.createdAt;
    obj.email = retailer.email;
    obj.phone = retailer.phone;
    obj.status = retailer.status;
    obj.profileImage = retailer.photo;
    obj.pricingType = retailer.Pricing[0].pricingType;

    result.push(obj);

    return result;
  }, []);

  res.status(200).json({
    status: 'success',
    data: data,
    count
  });
});
Leave a Comment