From a44b90c80c098cc41d493f628693b7768df71cc7 Mon Sep 17 00:00:00 2001 From: Corinne GoodSmith Date: Tue, 10 Dec 2024 16:00:29 -0600 Subject: [PATCH 1/2] added comment like btn but not functionality --- controllers/comments.js | 33 +++++++++++++++++++++++++++++++++ controllers/posts.js | 4 +++- models/Comment.js | 26 ++++++++++++++++++++++++++ package-lock.json | 17 +++++++++-------- package.json | 2 +- routes/comments.js | 10 ++++++++++ server.js | 4 +++- views/post.ejs | 25 +++++++++++++++++++++++++ 8 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 controllers/comments.js create mode 100644 models/Comment.js create mode 100644 routes/comments.js diff --git a/controllers/comments.js b/controllers/comments.js new file mode 100644 index 000000000..8e9b02a52 --- /dev/null +++ b/controllers/comments.js @@ -0,0 +1,33 @@ +const cloudinary = require("../middleware/cloudinary"); +const Comment = require("../models/Comment"); + +module.exports = { + createComment: async (req, res) => { + try { + await Comment.create({ + comment: req.body.comment, + likes: 0, + user: req.user.id, + post: req.params.id, + }); + console.log("Comment has been added!"); + res.redirect(`/post/${req.params.id}`); + } catch (err) { + console.log(err); + } + }, + likeComment: async (req, res) => { + try { + await Comment.findOneAndUpdate( + { _id: req.body.commentIdFromJSFile}, + { + $inc: { likes: 1 }, + } + ); + console.log("Likes +1"); + res.redirect(`/post/${req.params.id}`); + } catch (err) { + console.log(err); + } + }, +}; diff --git a/controllers/posts.js b/controllers/posts.js index a3e2dab5d..c44a628cc 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -1,5 +1,6 @@ const cloudinary = require("../middleware/cloudinary"); const Post = require("../models/Post"); +const Comment = require("../models/Comment"); module.exports = { getProfile: async (req, res) => { @@ -21,7 +22,8 @@ module.exports = { getPost: async (req, res) => { try { const post = await Post.findById(req.params.id); - res.render("post.ejs", { post: post, user: req.user }); + const comments = await Comment.find({post: req.params.id}).sort({createdAt: "desc"}).lean(); + res.render("post.ejs", { post: post, user: req.user, comments: comments }); } catch (err) { console.log(err); } diff --git a/models/Comment.js b/models/Comment.js new file mode 100644 index 000000000..5f776d404 --- /dev/null +++ b/models/Comment.js @@ -0,0 +1,26 @@ +const mongoose = require("mongoose"); + +const CommentSchema = new mongoose.Schema({ + comment: { + type: String, + required: true, + }, + likes: { + type: Number, + required: true, + }, + user: { + type: mongoose.Schema.Types.ObjectId, + ref: "User", + }, + createdAt: { + type: Date, + default: Date.now, + }, + post: { + type: mongoose.Schema.Types.ObjectId, + ref: "Post", + } +}); + +module.exports = mongoose.model("Comment", CommentSchema); diff --git a/package-lock.json b/package-lock.json index 80734e98f..1d2254695 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "bcrypt": "^5.0.1", "cloudinary": "^1.25.1", "connect-mongo": "^3.2.0", - "dotenv": "^8.2.0", + "dotenv": "^8.6.0", "ejs": "^3.1.6", "express": "^4.17.1", "express-flash": "^0.0.2", @@ -580,11 +580,12 @@ } }, "node_modules/dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/ee-first": { @@ -2551,9 +2552,9 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" }, "ee-first": { "version": "1.1.1", diff --git a/package.json b/package.json index 8441374f6..a19a2875e 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "bcrypt": "^5.0.1", "cloudinary": "^1.25.1", "connect-mongo": "^3.2.0", - "dotenv": "^8.2.0", + "dotenv": "^8.6.0", "ejs": "^3.1.6", "express": "^4.17.1", "express-flash": "^0.0.2", diff --git a/routes/comments.js b/routes/comments.js new file mode 100644 index 000000000..4b1019784 --- /dev/null +++ b/routes/comments.js @@ -0,0 +1,10 @@ +const express = require("express"); +const router = express.Router(); +const commentsController = require("../controllers/comments"); +const { ensureAuth, ensureGuest } = require("../middleware/auth"); + +//Comment Routes - simplified for now +router.post("/createComment/:id", commentsController.createComment); +router.put("/likeComment/:id", commentsController.likeComment); + +module.exports = router; diff --git a/server.js b/server.js index 1718db010..ee4f4aaea 100644 --- a/server.js +++ b/server.js @@ -9,7 +9,8 @@ const flash = require("express-flash"); const logger = require("morgan"); const connectDB = require("./config/database"); const mainRoutes = require("./routes/main"); -const postRoutes = require("./routes/posts"); +const postRoutes = require("./routes/posts") +const commentRoutes = require("./routes/comments") //Use .env file in config folder require("dotenv").config({ path: "./config/.env" }); @@ -56,6 +57,7 @@ app.use(flash()); //Setup Routes For Which The Server Is Listening app.use("/", mainRoutes); app.use("/post", postRoutes); +app.use("/comment", commentRoutes); //Server Running app.listen(process.env.PORT, () => { diff --git a/views/post.ejs b/views/post.ejs index c36a1c946..d98ecdafd 100644 --- a/views/post.ejs +++ b/views/post.ejs @@ -23,6 +23,31 @@ <%}%> +
+

Add a Comment

+
+
+ + +
+ +
+

<%= post.caption %>

From eb1de72752593f10f3c65563030167634d73eced Mon Sep 17 00:00:00 2001 From: Corinne GoodSmith Date: Wed, 11 Dec 2024 10:15:58 -0600 Subject: [PATCH 2/2] added ability to like comments --- controllers/comments.js | 5 ++--- controllers/posts.js | 5 ++++- routes/comments.js | 2 +- views/post.ejs | 22 ++++++++++++---------- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/controllers/comments.js b/controllers/comments.js index 8e9b02a52..9be521e2a 100644 --- a/controllers/comments.js +++ b/controllers/comments.js @@ -1,4 +1,3 @@ -const cloudinary = require("../middleware/cloudinary"); const Comment = require("../models/Comment"); module.exports = { @@ -19,13 +18,13 @@ module.exports = { likeComment: async (req, res) => { try { await Comment.findOneAndUpdate( - { _id: req.body.commentIdFromJSFile}, + { _id: req.params.commentid }, { $inc: { likes: 1 }, } ); console.log("Likes +1"); - res.redirect(`/post/${req.params.id}`); + res.redirect(`/post/${req.params.postid}`); } catch (err) { console.log(err); } diff --git a/controllers/posts.js b/controllers/posts.js index c44a628cc..2d1a23620 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -22,7 +22,10 @@ module.exports = { getPost: async (req, res) => { try { const post = await Post.findById(req.params.id); - const comments = await Comment.find({post: req.params.id}).sort({createdAt: "desc"}).lean(); + const comments = await Comment + .find({post: req.params.id}) + .sort({createdAt: "desc"}) + .lean(); res.render("post.ejs", { post: post, user: req.user, comments: comments }); } catch (err) { console.log(err); diff --git a/routes/comments.js b/routes/comments.js index 4b1019784..108ab9a87 100644 --- a/routes/comments.js +++ b/routes/comments.js @@ -5,6 +5,6 @@ const { ensureAuth, ensureGuest } = require("../middleware/auth"); //Comment Routes - simplified for now router.post("/createComment/:id", commentsController.createComment); -router.put("/likeComment/:id", commentsController.likeComment); +router.put("/likeComment/:postid/:commentid", commentsController.likeComment); module.exports = router; diff --git a/views/post.ejs b/views/post.ejs index d98ecdafd..6120fc0f7 100644 --- a/views/post.ejs +++ b/views/post.ejs @@ -5,7 +5,7 @@

<%= post.title %>

-

Add a Comment

- +
- + +
    <% for(let i=0; i
  • - <%=comments[i].user%> + User <%=comments[i].user%> <%=comments[i].comment%> <%=comments[i].likes%>
    - -
    + class="col-1" + action="/comment/likeComment/<%=post._id%>/<%=comments[i]._id%>?_method=PUT" + method="POST" + > + +
  • <% } %>
+

User: <%= post.user%>

<%= post.caption %>