├── utils ├── wrapAsync.js ├── ExpressError.js └── hereMaps.js ├── public ├── images │ └── image-1681900961930-333556675.png ├── js │ └── validate-form.js └── css │ ├── home.css │ └── stars.css ├── views ├── layouts │ ├── partials │ │ ├── footer.ejs │ │ ├── alert.ejs │ │ └── navbar.ejs │ └── app.ejs ├── error.ejs ├── auth │ ├── login.ejs │ └── register.ejs ├── home.ejs └── places │ ├── create.ejs │ ├── index.ejs │ ├── edit.ejs │ └── show.ejs ├── middlewares ├── isAuth.js ├── validateReview.js ├── validatePlace.js ├── isValidObjectId.js └── isAuthor.js ├── schemas ├── review.js └── place.js ├── models ├── review.js ├── user.js └── place.js ├── package.json ├── routes ├── reviews.js ├── user.js └── places.js ├── controllers ├── reviews.js ├── auth.js └── places.js ├── configs └── multer.js ├── app.js ├── .gitignore └── seeds └── place.js /utils/wrapAsync.js: -------------------------------------------------------------------------------- 1 | module.exports = func => { 2 | return (req, res, next) => { 3 | func(req, res, next).catch(next); 4 | } 5 | } -------------------------------------------------------------------------------- /public/images/image-1681900961930-333556675.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lunadiotic/yelpclone/HEAD/public/images/image-1681900961930-333556675.png -------------------------------------------------------------------------------- /views/layouts/partials/footer.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /middlewares/isAuth.js: -------------------------------------------------------------------------------- 1 | module.exports = (req, res, next) => { 2 | if (!req.isAuthenticated()) { 3 | req.flash('error_msg', 'You are not logged in'); 4 | return res.redirect('/login'); 5 | } 6 | next(); 7 | } -------------------------------------------------------------------------------- /schemas/review.js: -------------------------------------------------------------------------------- 1 | const Joi = require('joi') 2 | 3 | module.exports.reviewSchema = Joi.object({ 4 | review: Joi.object({ 5 | rating: Joi.number().min(1).required(), 6 | body: Joi.string().required(), 7 | }).required() 8 | }) 9 | -------------------------------------------------------------------------------- /utils/ExpressError.js: -------------------------------------------------------------------------------- 1 | class ExpressError extends Error { 2 | constructor(message, statusCode) { 3 | super(); 4 | this.message = message; 5 | this.statusCode = statusCode; 6 | } 7 | } 8 | 9 | module.exports = ExpressError; -------------------------------------------------------------------------------- /views/error.ejs: -------------------------------------------------------------------------------- 1 | <% layout('layouts/app') %> 2 | 3 |
<%= err.stack %>
8 |<%= place.description %>
19 |20 | <%= place.location %> 21 |
22 | View <%= place.title %> 23 |<%= place.description %>
35 |89 | Rated: <%= review.rating %> stars 90 |
91 |<%= review.body %>
93 | <% if(currentUser && review.author.equals(currentUser._id)) {%> 94 | 97 | <% } %> 98 |