Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
node_modules
.env
.vscode
.vscode
configFile
19 changes: 0 additions & 19 deletions config/database.js

This file was deleted.

41 changes: 0 additions & 41 deletions config/passport.js

This file was deleted.

56 changes: 25 additions & 31 deletions controllers/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,12 @@ exports.postLogin = (req, res, next) => {
exports.logout = (req, res) => {
req.logout(() => {
console.log('User has logged out.')
req.session.destroy((err) => {
if (err) console.log('Error : Failed to destroy the session during logout.', err)
req.user = null
res.redirect('/')
})
})
req.session.destroy((err) => {
if (err)
console.log("Error : Failed to destroy the session during logout.", err);
req.user = null;
res.redirect("/");
});
};

exports.getSignup = (req, res) => {
Expand All @@ -65,7 +64,7 @@ exports.getSignup = (req, res) => {
});
};

exports.postSignup = (req, res, next) => {
exports.postSignup = async (req, res, next) => {
const validationErrors = [];
if (!validator.isEmail(req.body.email))
validationErrors.push({ msg: "Please enter a valid email address." });
Expand All @@ -90,29 +89,24 @@ exports.postSignup = (req, res, next) => {
password: req.body.password,
});

User.findOne(
{ $or: [{ email: req.body.email }, { userName: req.body.userName }] },
(err, existingUser) => {
if (err) {
return next(err);
}
if (existingUser) {
req.flash("errors", {
msg: "Account with that email address or username already exists.",
});
return res.redirect("../signup");
}
user.save((err) => {
if (err) {
return next(err);
}
req.logIn(user, (err) => {
if (err) {
return next(err);
}
res.redirect("/profile");
});
});
try {
const existingUser = await User.findOne({$or: [
{email: req.body.email},
{userName: req.body.userName}
]})

if (existingUser) {
req.flash('errors', { msg: 'Account with that email address or username already exists.'})
return res.redirect('../signup')
}
await user.save()

req.logIn(user, (err) => {
if (err) return next(err)
res.redirect('/profile')
})
}
catch (err) {
return next(err)
}
);
};
42 changes: 42 additions & 0 deletions controllers/comment.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
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,
userName: req.user.userName,
post: req.params.id
});
console.log("Post has been added!");
res.redirect(`/post/${req.params.id}`);
} catch (err) {
console.log(err);
}
},
likeComment: async (req, res) => {
try {
await Comment.findOneAndUpdate(
{ _id: req.params.commentid },
{
$inc: { likes: 1 },
}
);
console.log("Likes +1");
res.redirect(`/post/${req.params.postid}`);
} catch (err) {
console.log(err);
}
},
deleteComment: async (req, res) => {
try{
await Comment.findOneAndDelete({_id: req.params.commentid})
console.log("Deleted Post");
res.redirect(`/post/${req.params.postid}`);
}catch(err){
res.redirect(`/post/${req.params.postid}`);
}
},
};
15 changes: 7 additions & 8 deletions controllers/posts.js
Original file line number Diff line number Diff line change
@@ -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) => {
Expand All @@ -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 comment = await Comment.find({post: req.params.id}).sort({ createdAt: "desc" }).lean();
res.render("post.ejs", { post: post, comment: comment, user: req.user });
} catch (err) {
console.log(err);
}
Expand Down Expand Up @@ -60,16 +62,13 @@ module.exports = {
}
},
deletePost: async (req, res) => {
try {
// Find post by id
let post = await Post.findById({ _id: req.params.id });
// Delete image from cloudinary
try{
let post = await Post.findById({_id: req.params.id})
await cloudinary.uploader.destroy(post.cloudinaryId);
// Delete post from db
await Post.remove({ _id: req.params.id });
await Post.findOneAndDelete({_id: req.params.id})
console.log("Deleted Post");
res.redirect("/profile");
} catch (err) {
}catch(err){
res.redirect("/profile");
}
},
Expand Down
2 changes: 1 addition & 1 deletion middleware/cloudinary.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const cloudinary = require("cloudinary").v2;

require("dotenv").config({ path: "./config/.env" });
require("dotenv").config({ path: "./configFile/.env" });

cloudinary.config({
cloud_name: process.env.CLOUD_NAME,
Expand Down
30 changes: 30 additions & 0 deletions models/Comment.js
Original file line number Diff line number Diff line change
@@ -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,
required: true,
},
post: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
},
createdAt: {
type: Date,
default: Date.now,
},
});

module.exports = mongoose.model("Comment", CommentSchema);
25 changes: 7 additions & 18 deletions models/User.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,13 @@ const UserSchema = new mongoose.Schema({

// Password hash middleware.

UserSchema.pre("save", function save(next) {
const user = this;
if (!user.isModified("password")) {
return next();
}
bcrypt.genSalt(10, (err, salt) => {
if (err) {
return next(err);
}
bcrypt.hash(user.password, salt, (err, hash) => {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
});
UserSchema.pre('save', async function save(next) {
const user = this
if (!user.isModified('password')) { return next() }
let salt = await bcrypt.genSalt(10)
let hash = await bcrypt.hash(user.password, salt)
user.password = hash
})

// Helper method for validating user's password.

Expand Down
Loading