Wolkendama-API / Controller / reviewController.js
reviewController.js
Raw
const Review = require("../Model/reviewModel");
const AppError = require("../utils/appError");
const catchAsync = require("../utils/catchAsync");

exports.createReviewItem = catchAsync(async (req, res, next) => {
  const reviewItem = await Review.create({
    name: req.body.name,
    text: req.body.text,
    email: req.body.email,
    blog: req.body.blog,
  });

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

exports.getAllReviewItem = catchAsync(async (req, res, next) => {
  let data = await Review.find();
  res.status(201).json({
    status: "success",
    data,
  });
});

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

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

exports.changeOneReviewItem = catchAsync(async (req, res, next) => {
  const reviewItem = await Review.findById(req.params.id).select("email");

  if (!req.body.email || reviewItem.email !== req.body.email) {
    return next(
      new AppError("Please provide correct email to amend the comment", 400)
    );
  }

  let amendedData = {};

  amendedData.name = req.body.name;
  amendedData.text = req.body.text;
  const data = await Review.findByIdAndUpdate(req.params.id, amendedData, {
    new: true,
    runValidators: true,
  });

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

exports.deleteOneReviewItem = catchAsync(async (req, res, next) => {
  const reviewItem = await Review.findById(req.params.id).select("email");

  if (!req.body.email || reviewItem.email !== req.body.email) {
    return next(
      new AppError("Please provide correct email to amend the comment", 400)
    );
  }

  await Review.findByIdAndDelete(req.params.id);

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