diff --git a/controllers/comments.js b/controllers/comments.js new file mode 100644 index 000000000..a2acb6cdc --- /dev/null +++ b/controllers/comments.js @@ -0,0 +1,24 @@ +const cloudinary = require("../middleware/cloudinary"); +const Post = require("../models/Post"); +const Comment = require("../models/Comment"); + +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 + }); + 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..f8e72f195 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -1,5 +1,6 @@ -const cloudinary = require("../middleware/cloudinary"); +// const cloudinary = require("../middleware/cloudinary"); const Post = require("../models/Post"); +const Comment = require("../models/Comment"); module.exports = { getProfile: async (req, res) => { @@ -21,23 +22,34 @@ 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 }) + .populate("user", "userName") + .sort({ createdAt: "desc" }) + .lean(); + res.render("post.ejs", { + post: post, + user: req.user, + comments: comments + }); } catch (err) { console.log(err); } }, 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, + }); console.log("Post has been added!"); res.redirect("/profile"); @@ -64,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/Comment.js b/models/Comment.js new file mode 100644 index 000000000..015acd08b --- /dev/null +++ b/models/Comment.js @@ -0,0 +1,30 @@ +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", + }, + userName: { + type: String, + 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/models/Post.js b/models/Post.js index f7d14c981..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, }, @@ -21,6 +25,10 @@ const PostSchema = new mongoose.Schema({ type: Number, required: true, }, + userName: { + type: String, + ref: "User" + }, user: { type: mongoose.Schema.Types.ObjectId, ref: "User", @@ -31,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 e69de29bb..eea1569a6 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -0,0 +1,5 @@ +/* .center { + justify-content: center; + align-items: center; +} */ + 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/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 1718db010..7579fbb54 100644 --- a/server.js +++ b/server.js @@ -1,15 +1,22 @@ +// 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"); const postRoutes = require("./routes/posts"); +const commentRoutes = require("./routes/comments"); //Use .env file in config folder require("dotenv").config({ path: "./config/.env" }); @@ -56,6 +63,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..d40ef65f1 100644 --- a/views/feed.ejs +++ b/views/feed.ejs @@ -1,4 +1,32 @@ <%- include('partials/header') -%> +