MVC FOR REVIEWS AND USERS

 REVIEW.JS (CONTROLLER)

const Review = require("../models/review.js");
const Listing = require("../models/listing.js");

module.exports.postReview = async (req, res) => {
  let { id } = req.params;
  let listing = await Listing.findById(id);
  let newRev = new Review(req.body.review);
  newRev.author = req.user._id;
  console.log(newRev.author);
  console.log(newRev);
  await newRev.save();
  listing.reviews.push(newRev);
  await listing.save();

  console.log("review saved");
  req.flash("success", "New Review Added!");

  res.redirect(`/listings/${id}`);
};

module.exports.deleteReview = async (req, res) => {
  let { id, reviewId } = req.params;

  await Listing.findByIdAndUpdate(id, { $pull: { reviews: reviewId } });
  await Review.findByIdAndDelete(reviewId);
  req.flash("success", "Review Deleted!");

  res.redirect(`/listings/${id}`);
};


REVIEW.JS(ROUTES)

const express = require("express");
const router = express.Router({ mergeParams: true });
const wrapAsync = require("../utils/wrapAsync.js");
const ExpressError = require("../utils/ExpressError.js");
const { listingSchema, reviewSchema } = require("../schema.js");
const Review = require("../models/review.js");
const Listing = require("../models/listing.js");

const { isLoggedIn, isAuthor } = require("../middleware.js");
const ValidateReview = (req, res, next) => {
  let { error } = reviewSchema.validate(req.body);
  if (error) {
    let errMsg = error.details.map((el) => el.message).join(",");
    throw new ExpressError(400, errMsg);
  } else {
    next();
  }
};

const reviewController = require("../controller/review.js");
// REVIEWS
router.post(
  "/",
  ValidateReview,
  isLoggedIn,
  wrapAsync(reviewController.postReview)
);

// DELETE REVIEW
router.delete(
  "/:reviewId",
  isLoggedIn,
  isAuthor,
  wrapAsync(reviewController.deleteReview)
);

module.exports = router;



USER.JS(CONTROLLER)

const User = require("../models/user.js");

module.exports.renderSignup = (req, res) => {
  res.render("users/signup.ejs");
};

module.exports.signup = async (req, res) => {
  try {
    let { username, email, password } = req.body;
    const newuser = new User({ username, email });
    const RegUser = await User.register(newuser, password);
    console.log(RegUser);
    req.login(RegUser, function (err) {
      if (err) {
        return next(err);
      }
      req.flash("success", "Welcome to WanderLust!");
      res.redirect("/listings");
    });
  } catch (e) {
    req.flash("error", e.message);
    res.redirect("/signup");
  }
};

module.exports.loginForm = (req, res) => {
  res.render("users/login.ejs");
};

module.exports.login = async (req, res) => {
  req.flash("success", "Welcome Back!");
  let redirectURL = res.locals.redirectURL || "/listings";
  res.redirect(redirectURL);
};

module.exports.logout = (req, res, next) => {
  req.logOut((err) => {
    if (err) {
      return next(err);
    }
    req.flash("success", "loggedout successfully");
    res.redirect("/listings");
  });
};


USER.JS(ROUTES)

const express = require("express");
const router = express.Router();
const wrapAsync = require("../utils/wrapAsync.js");
const User = require("../models/user.js");
const passport = require("passport");
const { func } = require("joi");
const { saveRedirectedUrl } = require("../middleware.js");
const userController = require("../controller/user.js");
router.get("/signup", userController.renderSignup);

router.post("/signup", wrapAsync(userController.signup));

router.get("/login",userController.loginForm);

router.post(
  "/login",
  saveRedirectedUrl,
  passport.authenticate("local", {
    failureRedirect: "/login",
    failureFlash: true,
  }),
 userController.login
);
router.get("/logout", userController.logout);
module.exports = router;

Comments