From b0b6f199212aec03271dacf9f99241503e6509f2 Mon Sep 17 00:00:00 2001 From: Divby Date: Wed, 15 Jan 2025 14:31:23 +1300 Subject: [PATCH 1/4] added a comments feature --- controllers/comments.js | 22 ++++++++++++++++++++++ controllers/posts.js | 4 +++- models/Comment.js | 26 ++++++++++++++++++++++++++ public/css/style.css | 4 ++++ routes/comments.js | 15 +++++++++++++++ server.js | 2 ++ views/feed.ejs | 37 ++++++++++++++++++++++++++++++++++++- views/post.ejs | 22 ++++++++++++++++++++++ 8 files changed, 130 insertions(+), 2 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..8aeed10e1 --- /dev/null +++ b/controllers/comments.js @@ -0,0 +1,22 @@ +const cloudinary = require("../middleware/cloudinary"); +const Post = require("../models/Post"); +const Comment = require("../models/Comment"); + +module.exports = { + + createComment: async (req, res) => { + try { + + await Comment.create({ + comment: req.body.comment, + likes: 0, + post: req.params.id, + }); + console.log("Comment has been added!"); + res.redirect("/post/" + req.params.id,); + } catch (err) { + console.log(err); + } + }, + +}; diff --git a/controllers/posts.js b/controllers/posts.js index a3e2dab5d..92c2ac196 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..202bc6c97 --- /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", + }, + post: { + type: mongoose.Schema.Types.ObjectId, + ref: "Post", + }, + createdAt: { + type: Date, + default: Date.now, + }, +}); + +module.exports = mongoose.model("Comment", CommentSchema); diff --git a/public/css/style.css b/public/css/style.css index e69de29bb..e77b72ae5 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -0,0 +1,4 @@ +/* .center { + justify-content: center; + align-items: center; +} */ \ No newline at end of file diff --git a/routes/comments.js b/routes/comments.js new file mode 100644 index 000000000..9d7710519 --- /dev/null +++ b/routes/comments.js @@ -0,0 +1,15 @@ +const express = require("express"); +const router = express.Router(); +const commentsController = require("../controllers/comments"); +const { ensureAuth, ensureGuest } = require("../middleware/auth") + + + + + +router.post("/createComment/:id", commentsController.createComment); + + +// router.delete("/deletePost/:id", postsController.deletePost); + +module.exports = router; \ No newline at end of file diff --git a/server.js b/server.js index 1718db010..a2d4541c5 100644 --- a/server.js +++ b/server.js @@ -10,6 +10,7 @@ const logger = require("morgan"); const connectDB = require("./config/database"); const mainRoutes = require("./routes/main"); 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/feed.ejs b/views/feed.ejs index 0ded94809..c61d878c2 100644 --- a/views/feed.ejs +++ b/views/feed.ejs @@ -1,4 +1,33 @@ <%- include('partials/header') -%> +
+
+
+
    + <% for(var i=0; i +
  • + + <%= posts[i].title%> + +

    <%= posts[i].title %>

    +

    <%= posts[i].caption %>

    +
  • + <% } %> +
+
+
+
+ +
+ +
+<%- include('partials/footer') -%> + + \ No newline at end of file diff --git a/views/post.ejs b/views/post.ejs index c36a1c946..1ea8c7b0e 100644 --- a/views/post.ejs +++ b/views/post.ejs @@ -27,6 +27,28 @@

<%= post.caption %>

+ + + + +
+

Add a comment

+
+
+ + +
+ +
+
+ +
Return to Profile Return to Feed From ccc9beb5024ac341c6c5aa0750d6143a8939b896 Mon Sep 17 00:00:00 2001 From: Divby Date: Wed, 15 Jan 2025 15:20:43 +1300 Subject: [PATCH 2/4] tried adding usernames alongside comments, failed. --- controllers/comments.js | 2 ++ controllers/posts.js | 1 + models/Comment.js | 4 ++++ views/post.ejs | 3 +++ 4 files changed, 10 insertions(+) diff --git a/controllers/comments.js b/controllers/comments.js index 8aeed10e1..4058522bb 100644 --- a/controllers/comments.js +++ b/controllers/comments.js @@ -11,6 +11,8 @@ module.exports = { comment: req.body.comment, likes: 0, post: req.params.id, + user: req.user.id, + userName: req.body.userName, }); console.log("Comment has been added!"); res.redirect("/post/" + req.params.id,); diff --git a/controllers/posts.js b/controllers/posts.js index 92c2ac196..7c42a779d 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -40,6 +40,7 @@ module.exports = { caption: req.body.caption, likes: 0, user: req.user.id, + }); console.log("Post has been added!"); res.redirect("/profile"); diff --git a/models/Comment.js b/models/Comment.js index 202bc6c97..a2b2b98ed 100644 --- a/models/Comment.js +++ b/models/Comment.js @@ -13,6 +13,10 @@ const CommentSchema = new mongoose.Schema({ type: mongoose.Schema.Types.ObjectId, ref: "User", }, + userName: { + type: String, + unique: true + }, post: { type: mongoose.Schema.Types.ObjectId, ref: "Post", diff --git a/views/post.ejs b/views/post.ejs index 1ea8c7b0e..fa0aaeae4 100644 --- a/views/post.ejs +++ b/views/post.ejs @@ -33,6 +33,9 @@
  • <%= comments[i].comment %>
  • +
  • + <%= comments[i].user %> +
  • <% } %> From 69f73ddd9855d7ad8c4fa45281b01d7012578365 Mon Sep 17 00:00:00 2001 From: Divby Date: Fri, 17 Jan 2025 14:10:50 +1300 Subject: [PATCH 3/4] added usernames to comments --- controllers/comments.js | 6 +++--- controllers/posts.js | 13 +++++++++++-- models/Comment.js | 2 +- models/Post.js | 4 ++++ views/feed.ejs | 1 + views/post.ejs | 9 ++++----- 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/controllers/comments.js b/controllers/comments.js index 4058522bb..a2acb6cdc 100644 --- a/controllers/comments.js +++ b/controllers/comments.js @@ -6,13 +6,13 @@ module.exports = { createComment: async (req, res) => { try { - + console.log(req.body) await Comment.create({ comment: req.body.comment, likes: 0, + userName: req.user.userName, post: req.params.id, - user: req.user.id, - userName: req.body.userName, + user: req.user.id }); console.log("Comment has been added!"); res.redirect("/post/" + req.params.id,); diff --git a/controllers/posts.js b/controllers/posts.js index 7c42a779d..2e37ee47b 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -22,8 +22,16 @@ 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(); - res.render("post.ejs", { post: post, user: req.user, comments: comments }); + const comments = await Comment + .find({ post: req.params.id }) + .populate("user", "userName") + .sort({ createdAt: "desc" }) + .lean(); + res.render("post.ejs", { + post: post, + user: req.user, + comments: comments + }); } catch (err) { console.log(err); } @@ -39,6 +47,7 @@ module.exports = { cloudinaryId: result.public_id, caption: req.body.caption, likes: 0, + userName: req.user.userName, user: req.user.id, }); diff --git a/models/Comment.js b/models/Comment.js index a2b2b98ed..015acd08b 100644 --- a/models/Comment.js +++ b/models/Comment.js @@ -15,7 +15,7 @@ const CommentSchema = new mongoose.Schema({ }, userName: { type: String, - unique: true + ref: "User" }, post: { type: mongoose.Schema.Types.ObjectId, diff --git a/models/Post.js b/models/Post.js index f7d14c981..be7e3a021 100644 --- a/models/Post.js +++ b/models/Post.js @@ -21,6 +21,10 @@ const PostSchema = new mongoose.Schema({ type: Number, required: true, }, + userName: { + type: String, + ref: "User" + }, user: { type: mongoose.Schema.Types.ObjectId, ref: "User", diff --git a/views/feed.ejs b/views/feed.ejs index c61d878c2..b855ab339 100644 --- a/views/feed.ejs +++ b/views/feed.ejs @@ -6,6 +6,7 @@ <% for(var i=0; i
  • +

    <%= posts[i].userName %>

    <%= posts[i].title%>

    <%= posts[i].title %>

    diff --git a/views/post.ejs b/views/post.ejs index fa0aaeae4..cea427ad7 100644 --- a/views/post.ejs +++ b/views/post.ejs @@ -3,6 +3,7 @@

    <%= post.title %>

    +

    <%= post.userName %>

      <% for(var i=0; i -
    • - <%= comments[i].comment %> +
    • + <%= comments[i].userName + ":" %> <%= comments[i].comment %>
    • -
    • - <%= comments[i].user %> -
    • + <% } %>
    From 2323650d12fa0e79428ad14801cdd7f620f250a1 Mon Sep 17 00:00:00 2001 From: Divby Date: Fri, 31 Jan 2025 15:44:47 +1300 Subject: [PATCH 4/4] first commit --- controllers/posts.js | 16 +++---- models/Post.js | 13 ++++-- public/css/style.css | 3 +- routes/posts.js | 2 +- server.js | 6 +++ views/feed.ejs | 6 +-- views/partials/header.ejs | 6 +-- views/post.ejs | 16 ++++--- views/profile.ejs | 98 +++++++++++++++++++++++++-------------- 9 files changed, 105 insertions(+), 61 deletions(-) diff --git a/controllers/posts.js b/controllers/posts.js index 2e37ee47b..f8e72f195 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -1,4 +1,4 @@ -const cloudinary = require("../middleware/cloudinary"); +// const cloudinary = require("../middleware/cloudinary"); const Post = require("../models/Post"); const Comment = require("../models/Comment"); @@ -38,14 +38,14 @@ module.exports = { }, createPost: async (req, res) => { try { - // Upload image to cloudinary - const result = await cloudinary.uploader.upload(req.file.path); + await Post.create({ - title: req.body.title, - image: result.secure_url, - cloudinaryId: result.public_id, - caption: req.body.caption, + plugin: req.body.plugin, + company: req.body.company, + category: req.body.category, + freeOrPaid: req.body.freeOrPaid, + link: req.body.link, likes: 0, userName: req.user.userName, user: req.user.id, @@ -76,7 +76,7 @@ module.exports = { // Find post by id let post = await Post.findById({ _id: req.params.id }); // Delete image from cloudinary - await cloudinary.uploader.destroy(post.cloudinaryId); + // await cloudinary.uploader.destroy(post.cloudinaryId); // Delete post from db await Post.remove({ _id: req.params.id }); console.log("Deleted Post"); diff --git a/models/Post.js b/models/Post.js index be7e3a021..2bdd90ec3 100644 --- a/models/Post.js +++ b/models/Post.js @@ -1,19 +1,23 @@ const mongoose = require("mongoose"); const PostSchema = new mongoose.Schema({ - title: { + plugin: { type: String, required: true, }, - image: { + company: { type: String, require: true, }, - cloudinaryId: { + category: { type: String, require: true, }, - caption: { + freeOrPaid: { + type: String, + required: true, + }, + link: { type: String, required: true, }, @@ -35,4 +39,5 @@ const PostSchema = new mongoose.Schema({ }, }); +//MongoDB Collection named here - will give lowercase pllural of name module.exports = mongoose.model("Post", PostSchema); diff --git a/public/css/style.css b/public/css/style.css index e77b72ae5..eea1569a6 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -1,4 +1,5 @@ /* .center { justify-content: center; align-items: center; -} */ \ No newline at end of file +} */ + diff --git a/routes/posts.js b/routes/posts.js index aa463ac90..f0353b890 100644 --- a/routes/posts.js +++ b/routes/posts.js @@ -7,7 +7,7 @@ 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.post("/createPost", postsController.createPost); router.put("/likePost/:id", postsController.likePost); diff --git a/server.js b/server.js index a2d4541c5..7579fbb54 100644 --- a/server.js +++ b/server.js @@ -1,11 +1,17 @@ +// All of the modules needed to make the app work const express = require("express"); const app = express(); +//helps us talk to our mongodb databse const mongoose = require("mongoose"); const passport = require("passport"); +//allows our users to stay logged in across sessions const session = require("express-session"); +//Storing our actual session in mongodb const MongoStore = require("connect-mongo")(session); +//allows us to do put and delete requests with forms const methodOverride = require("method-override"); const flash = require("express-flash"); +//our logger const logger = require("morgan"); const connectDB = require("./config/database"); const mainRoutes = require("./routes/main"); diff --git a/views/feed.ejs b/views/feed.ejs index b855ab339..d40ef65f1 100644 --- a/views/feed.ejs +++ b/views/feed.ejs @@ -6,11 +6,9 @@ <% for(var i=0; i
  • -

    <%= posts[i].userName %>

    - <%= posts[i].title%> +

    <%= posts[i].plugin %>

    -

    <%= posts[i].title %>

    -

    <%= posts[i].caption %>

    +
  • <% } %> diff --git a/views/partials/header.ejs b/views/partials/header.ejs index 011ff2239..861f31cbc 100644 --- a/views/partials/header.ejs +++ b/views/partials/header.ejs @@ -4,7 +4,7 @@ - Binary Upload Boom + Plugin Leaderboards
    -

    Binary Upload Boom

    - The #100Devs Social Network +

    Plugin Leaderboards

    + Music Plugins Ranked By The Community
    diff --git a/views/post.ejs b/views/post.ejs index cea427ad7..1e53b97cf 100644 --- a/views/post.ejs +++ b/views/post.ejs @@ -2,9 +2,10 @@
    -

    <%= post.title %>

    +

    <%= post.plugin %>

    <%= post.userName %>

    - + +
    -

    <%= post.caption %>

    +
      +
    • Category: <%= post.category %>
    • +
    • Free or Paid? <%= post.freeOrPaid %>
    • +
    • Link To Plugin: <%= post.link %>
    • +
      @@ -40,13 +45,12 @@
      -

      Add a comment

      - +
      - +
      diff --git a/views/profile.ejs b/views/profile.ejs index ccf3cf330..c4fb119c8 100644 --- a/views/profile.ejs +++ b/views/profile.ejs @@ -1,46 +1,76 @@ <%- include('partials/header') -%>
      -
      -
      -

      User Name: <%= user.userName %>

      -

      Email: <%= user.email %>

      - Logout +
      +
      +

      User Name: <%= user.userName %>

      +

      Email: <%= user.email %>

      + Logout +
      +
      +

      Add a plugin

      +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      + +
      -
      -

      Add a post

      - -
      - - -
      -
      + + + + + -
      +
      +
      +
      +
      +
      + <%- include('partials/footer') -%>
      -<%- include('partials/footer') -%> \ No newline at end of file