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
Post a Comment