Wolkendama-API / Controller / customerController.js
customerController.js
Raw
const sendInBlue = require("../utils/sendinblue");
const Customer = require("../Model/customerModel");
const AppError = require("../utils/appError");
const catchAsync = require("../utils/catchAsync");

exports.getAllCustomerItem = catchAsync(async (req, res, next) => {
  let query = req.query;

  let data = await Customer.find(query);
  res.status(201).json({
    status: "success",
    data,
  });
});

exports.getOneCustomerItem = catchAsync(async (req, res, next) => {
  const data = await Customer.findById(req.params.id);

  res.status(201).json({
    status: "success",
    data,
  });
});

exports.deleteOneCustomerItem = catchAsync(async (req, res, next) => {
  await Customer.findByIdAndDelete(req.params.id);

  res.status(201).json({
    status: "success",
    data: null,
  });
});

exports.changeShipmentStatus = catchAsync(async (req, res, next) => {
  const customer = await Customer.findById(req.params.id);

  if (!customer) {
    return next(new AppError("Please provide correct customer id", 401));
  }

  if (!customer.status === "pending_payment") {
    return next(new AppError("The customer has not made any payment yet", 401));
  }

  const { trackingNo, shippingProvider, sendEmail } = req.body;

  if (!trackingNo || !shippingProvider) {
    return next(
      new AppError("Please include shipping id or shipping Provider", 401)
    );
  }

  const data = await Customer.findByIdAndUpdate(
    req.params.id,
    { trackingNo, shippingProvider },
    {
      new: true,
      runValidators: true,
    }
  );

  if (sendEmail) {
    const emailParams = { shippingProvider, trackingNo };

    sendInBlue.sendTrackingNoEmail(
      customer.billingName,
      customer.email,
      emailParams
    );
  }

  res.status(201).json({
    status: "success",
    data,
  });
});

exports.printInvoice = catchAsync(async (req, res, next) => {
  const customer = await Customer.findById(req.params.id);

  if (!customer) {
    return next(new AppError("Please provide correct customer id", 401));
  }

  res.status(201).json({
    status: "success",
    data: customer.invoiceUrl,
  });
});