diff --git a/controllers/posts.js b/controllers/posts.js index a3e2dab5d..70c23fc6f 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -38,6 +38,7 @@ module.exports = { caption: req.body.caption, likes: 0, user: req.user.id, + userName: req.user.userName, }); console.log("Post has been added!"); res.redirect("/profile"); @@ -73,4 +74,24 @@ module.exports = { res.redirect("/profile"); } }, + commentPost: async (req, res) => { + console.log(req.body.comment); + try { + await Post.findOneAndUpdate( + { _id: req.params.id }, + { $push: { + comments: { + message: req.body.comment, + userName: req.user.userName, + user: req.user.id, + }} + } + ); + console.log("Comment added"); + res.redirect(`/post/${req.params.id}`); + } catch (err) { + console.log(err); + res.redirect(`/post/${req.params.id}`); + } + } }; diff --git a/models/Comment.js b/models/Comment.js new file mode 100644 index 000000000..574341951 --- /dev/null +++ b/models/Comment.js @@ -0,0 +1,34 @@ +const mongoose = require("mongoose"); + +const CommentSchema = new mongoose.Schema({ + post: { + type: mongoose.Schema.Types.ObjectId, + ref: "Post" + }, + message: { + type: String, + required: true + }, + likes: { + type: Number, + required: true, + }, + user: { + type: mongoose.Schema.Types.ObjectId, + ref: "User", + }, + userName: { + type: String, + required: true + }, + createdAt: { + type: Date, + default: Date.now, + }, + replies: { + type: [this], + required: false + } +}); + +module.exports = mongoose.model("Comment", CommentSchema); diff --git a/models/Post.js b/models/Post.js index f7d14c981..11fe9cec1 100644 --- a/models/Post.js +++ b/models/Post.js @@ -1,4 +1,5 @@ const mongoose = require("mongoose"); +const Comments = require("./Comment"); const PostSchema = new mongoose.Schema({ title: { @@ -25,6 +26,11 @@ const PostSchema = new mongoose.Schema({ type: mongoose.Schema.Types.ObjectId, ref: "User", }, + userName: { + type: String, + required: true + }, + comments: [Comments.schema], createdAt: { type: Date, default: Date.now, diff --git a/models/User.js b/models/User.js index afe8afc36..f67612c45 100644 --- a/models/User.js +++ b/models/User.js @@ -8,7 +8,6 @@ const UserSchema = new mongoose.Schema({ }); // Password hash middleware. - UserSchema.pre("save", function save(next) { const user = this; if (!user.isModified("password")) { @@ -29,7 +28,6 @@ UserSchema.pre("save", function save(next) { }); // Helper method for validating user's password. - UserSchema.methods.comparePassword = function comparePassword( candidatePassword, cb diff --git a/public/css/style.css b/public/css/style.css index e69de29bb..130c456d9 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -0,0 +1,29 @@ +/* Overlay the username above the sibling image*/ +.username-overlay { + transform: translateY(-100%); + text-decoration: none; + text-decoration-style: revert; + color: white; + font-size: 1.5rem; +} +.comments { + margin: 2rem 0; +} +.comment { + margin: 1.5rem 0; + background-color: #FEFEFE; + border-radius: 5px; + padding: 0.5rem; +} +.comment-text { + font-size: 1rem; + margin: 0; +} +.comment-username { + font-size: 0.75rem; + font-weight: bold; + color: #343434; +} +.comment-input-label { + font-size: 0.75rem +} \ No newline at end of file diff --git a/routes/main.js b/routes/main.js index d6883000e..805e86d7b 100644 --- a/routes/main.js +++ b/routes/main.js @@ -9,9 +9,11 @@ const { ensureAuth, ensureGuest } = require("../middleware/auth"); router.get("/", homeController.getIndex); router.get("/profile", ensureAuth, postsController.getProfile); router.get("/feed", ensureAuth, postsController.getFeed); + router.get("/login", authController.getLogin); router.post("/login", authController.postLogin); router.get("/logout", authController.logout); + router.get("/signup", authController.getSignup); router.post("/signup", authController.postSignup); diff --git a/routes/posts.js b/routes/posts.js index aa463ac90..3987e7242 100644 --- a/routes/posts.js +++ b/routes/posts.js @@ -6,11 +6,11 @@ const { ensureAuth, ensureGuest } = require("../middleware/auth"); //Post Routes - simplified for now router.get("/:id", ensureAuth, postsController.getPost); - router.post("/createPost", upload.single("file"), postsController.createPost); - router.put("/likePost/:id", postsController.likePost); - +// Comments are only ever accessed via Posts as embedded documents, +// so it makes sense for the comments to be part of the Post routes. +router.post("/comment/:id", ensureAuth, postsController.commentPost); router.delete("/deletePost/:id", postsController.deletePost); module.exports = router; diff --git a/server.js b/server.js index 1718db010..990242de9 100644 --- a/server.js +++ b/server.js @@ -59,5 +59,5 @@ app.use("/post", postRoutes); //Server Running app.listen(process.env.PORT, () => { - console.log("Server is running, you better catch it!"); + console.log(`Server is running at PORT ${process.env.PORT}, you better catch it!`); }); diff --git a/views/feed.ejs b/views/feed.ejs index 0ded94809..77ef7364b 100644 --- a/views/feed.ejs +++ b/views/feed.ejs @@ -2,14 +2,16 @@
<%= comment.message %>
+ <%= comment.userName %> + + <% for (const reply of comment.replies) { %> +<%= reply.message %>
+ <%= reply.userName %> +