diff --git a/controllers/comments.js b/controllers/comments.js new file mode 100644 index 000000000..72a937614 --- /dev/null +++ b/controllers/comments.js @@ -0,0 +1,17 @@ +const Comment = require('../models/Comment') + +module.exports = { + createComment: async (req, res) => { + try { + await Comment.create({ + comment: req.body.comment, + 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); + } + }, +} \ No newline at end of file diff --git a/controllers/posts.js b/controllers/posts.js index a3e2dab5d..9c1d47d36 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) => { @@ -12,7 +13,7 @@ module.exports = { }, getFeed: async (req, res) => { try { - const posts = await Post.find().sort({ createdAt: "desc" }).lean(); + const posts = await Post.find().sort({ createdAt: "desc" }).lean(); //sorts posts in feed from newest to oldest res.render("feed.ejs", { posts: posts }); } catch (err) { console.log(err); @@ -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(); //sorts comments on posts from newest to oldest + res.render("post.ejs", { post: post, comments: comments, user: req.user }); } catch (err) { console.log(err); } @@ -50,7 +52,7 @@ module.exports = { await Post.findOneAndUpdate( { _id: req.params.id }, { - $inc: { likes: 1 }, + $inc: { likes: 1 },//increases like count by one } ); console.log("Likes +1"); diff --git a/middleware/cloudinary.js b/middleware/cloudinary.js index 0960c5b6f..84aa76b7a 100644 --- a/middleware/cloudinary.js +++ b/middleware/cloudinary.js @@ -1,7 +1,7 @@ const cloudinary = require("cloudinary").v2; require("dotenv").config({ path: "./config/.env" }); - +//Config for cloudinary account cloudinary.config({ cloud_name: process.env.CLOUD_NAME, api_key: process.env.API_KEY, diff --git a/middleware/multer.js b/middleware/multer.js index c012afe58..c1af24074 100644 --- a/middleware/multer.js +++ b/middleware/multer.js @@ -1,11 +1,12 @@ const multer = require("multer"); const path = require("path"); +//code for image upload using multer module.exports = multer({ storage: multer.diskStorage({}), fileFilter: (req, file, cb) => { let ext = path.extname(file.originalname); - if (ext !== ".jpg" && ext !== ".jpeg" && ext !== ".png") { + if (ext !== ".jpg" && ext !== ".jpeg" && ext !== ".png") { //prevents use of image filetypes other than .jpg, .jpeg, and .png cb(new Error("File type is not supported"), false); return; } diff --git a/models/Comment.js b/models/Comment.js new file mode 100644 index 000000000..5d08a816a --- /dev/null +++ b/models/Comment.js @@ -0,0 +1,22 @@ +const mongoose = require("mongoose") + +const CommentSchema = new mongoose.Schema({ + comment: { + type: String, + 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); \ No newline at end of file diff --git a/routes/comments.js b/routes/comments.js new file mode 100644 index 000000000..200690d8d --- /dev/null +++ b/routes/comments.js @@ -0,0 +1,7 @@ +const express = require("express"); +const router = express.Router(); +const commentController = require("../controllers/comments") + +router.post("/createComment/:id", commentController.createComment); //route for creating comments on a post; :id parameter tells DB which post the comment is being added to + +module.exports = router; \ No newline at end of file diff --git a/routes/main.js b/routes/main.js index d6883000e..54c4fb8f3 100644 --- a/routes/main.js +++ b/routes/main.js @@ -3,7 +3,7 @@ const router = express.Router(); const authController = require("../controllers/auth"); const homeController = require("../controllers/home"); const postsController = require("../controllers/posts"); -const { ensureAuth, ensureGuest } = require("../middleware/auth"); +const { ensureAuth, ensureGuest } = require("../middleware/auth"); //brings in authentication modules //Main Routes - simplified for now router.get("/", homeController.getIndex); diff --git a/routes/posts.js b/routes/posts.js index aa463ac90..94da55aca 100644 --- a/routes/posts.js +++ b/routes/posts.js @@ -1,16 +1,16 @@ const express = require("express"); const router = express.Router(); -const upload = require("../middleware/multer"); +const upload = require("../middleware/multer"); //brings in multer middleware for uploading multipart/form data const postsController = require("../controllers/posts"); const { ensureAuth, ensureGuest } = require("../middleware/auth"); //Post Routes - simplified for now -router.get("/:id", ensureAuth, postsController.getPost); +router.get("/:id", ensureAuth, postsController.getPost); //gets post that is specified in query parameters -router.post("/createPost", upload.single("file"), postsController.createPost); +router.post("/createPost", upload.single("file"), postsController.createPost); //uses multer middleware to upload img with request -router.put("/likePost/:id", postsController.likePost); +router.put("/likePost/:id", postsController.likePost); //adds like to post specified in query parameter -router.delete("/deletePost/:id", postsController.deletePost); +router.delete("/deletePost/:id", postsController.deletePost); //deletes post specified in query parameter module.exports = router; diff --git a/server.js b/server.js index 1718db010..ead00a199 100644 --- a/server.js +++ b/server.js @@ -1,15 +1,16 @@ const express = require("express"); const app = express(); -const mongoose = require("mongoose"); -const passport = require("passport"); -const session = require("express-session"); -const MongoStore = require("connect-mongo")(session); -const methodOverride = require("method-override"); -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 mongoose = require("mongoose"); //used for creating Models and managing Mongo data +const passport = require("passport"); //requires passport middleware for handling authentication +const session = require("express-session"); //requires sessions +const MongoStore = require("connect-mongo")(session); //handles sessions and cookies +const methodOverride = require("method-override"); //use forms for put / delete requests +const flash = require("express-flash"); // sends error flash messages to client (e.g. when username is entered incorrectly) +const logger = require("morgan"); //logs http requests +const connectDB = require("./config/database"); // for connecting to DB +const mainRoutes = require("./routes/main"); //connects to main routes file +const postRoutes = require("./routes/posts"); //connects to post routes file +const commentRoutes = require("./routes/comments") //connects to comments routes file //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/partials/footer.ejs b/views/partials/footer.ejs index 9db147f85..91a313a4c 100644 --- a/views/partials/footer.ejs +++ b/views/partials/footer.ejs @@ -1,3 +1,4 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/views/partials/header.ejs b/views/partials/header.ejs index 011ff2239..3ff4a5ed3 100644 --- a/views/partials/header.ejs +++ b/views/partials/header.ejs @@ -34,3 +34,4 @@ + \ No newline at end of file diff --git a/views/post.ejs b/views/post.ejs index c36a1c946..6eaf96d17 100644 --- a/views/post.ejs +++ b/views/post.ejs @@ -27,6 +27,28 @@

<%= post.caption %>

+
+ +
+ Return to Feed +
+
+
+

Add a comment

+
+
+ + +
+ +
+
Return to Profile Return to Feed