Skip to content

Commit

Permalink
favorite unfavorite article
Browse files Browse the repository at this point in the history
  • Loading branch information
bhavishya2107 committed Feb 8, 2020
1 parent 715acfc commit c061aa7
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 14 deletions.
7 changes: 5 additions & 2 deletions models/article.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,11 @@ var articleSchema = new Schema({
},
body: {
type: String,
required:true
required: true
},
image: {
type: String
},
tagList: [String],
favorited: Boolean,
favoritesCount: {
type: Number,
Expand All @@ -34,6 +33,10 @@ var articleSchema = new Schema({
comments: [{
type: Schema.Types.ObjectId,
ref: 'Comment'
}],
favorites: [{
type: Schema.Types.ObjectId,
ref: 'User'
}]
}, { timestamps: true })

Expand Down
12 changes: 12 additions & 0 deletions models/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ var userSchema = new Schema({
following: {
type: [Schema.Types.ObjectId],
ref: "User"
},
comments: {
type: [Schema.Types.ObjectId],
ref: "Comment"
},
articles: {
type: [Schema.Types.ObjectId],
ref: "Article"
},
favorited: {
type: [Schema.Types.ObjectId],
ref: "Article"
}
}, { timestamps: true })

Expand Down
98 changes: 88 additions & 10 deletions routes/api/articles.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
var express = require('express');
var router = express.Router();
var Article = require('../../models/article');
var Comment = require('../../models/comment');
var User = require('../../models/user');
var auth = require('../../modules/auth');
var loggedUser = auth.verifyToken
var updateSlug = auth.upateSlug
var loggedUser = auth.verifyToken;
var updateSlug = auth.upateSlug;


//get single article
Expand All @@ -27,9 +29,9 @@ router.use(loggedUser)
router.get('/', async (req, res) => {
try {
var articles = await Article.find({})
res.json({success:true, articles})
res.json({ success: true, articles })
} catch (error) {
res.json({error, msg:"No articles found"})
res.json({ error, msg: "No articles found" })
}

})
Expand All @@ -38,8 +40,8 @@ router.get('/', async (req, res) => {
router.post('/', async (req, res) => {
try {
var article = await Article.create(req.body.article)
console.log(article)
res.json({ success: "true", article })
var articleWithUser = await Article.findOneAndUpdate(article.id, { author: req.user.UserId })
res.json({ success: "true", articleWithUser })
} catch (error) {
res.status(400).json(error)
}
Expand All @@ -63,12 +65,88 @@ router.put('/:slug', async (req, res) => {
router.delete('/:slug', async (req, res) => {
var slug = req.params.slug
try {
await Article.findOneAndDelete({slug})
res.json({success:true,msg:"Article Deleted"})
await Article.findOneAndDelete({ slug })
res.json({ success: true, msg: "Article Deleted" })
} catch (error) {
res.json({ error: "Article not deleted, invalid slug input" })
}

})

// =======================COMMENTS========================================
//create comments
router.post('/:slug/comments', async (req, res) => {
console.log(req.user)
try {
var comment = await Comment.create(req.body.comment)
var commentWithUser = await Comment.findByIdAndUpdate(comment.id, { author: req.user.UserId }, { new: true })
await Article.findOneAndUpdate({ slug: req.params.slug }, { $push: { comments: comment._id } }, { new: true })
res.json({ success: true, commentWithUser })
} catch (error) {
res.json({ error, msg: "comment not created" })
}
})

//delete comment
router.delete('/:slug/comments/:id', async (req, res) => {
var slug = req.params.slug
try {
await Comment.findByIdAndDelete(req.params.id)
await Article.findOneAndUpdate({ slug }, { $pull: { comments: req.params.id } })
res.json({ success: "true", msg: `comment with ${req.params.id} is deleted` })
} catch (error) {
res.json({ error, msg: "comment could not be deleted" })
}
})

//get all comments in an article
router.get('/:slug/comments', (req, res) => {
console.log(req.user)
var slug = req.params.slug
Article.findOne({ slug })
.populate({ path: 'comments', select: 'body' })
.exec((err, comments) => {
if (err) return res.json(err)
res.json(comments)
})
})

//like an article
router.post('/:slug/favorite', async (req, res) => {
var slug = req.params.slug
var user = req.user.UserId
try {
var article = await Article.findOne({ slug })
console.log(article)
if (!article.favorites.includes(user)) {
await Article.findOneAndUpdate({ slug }, { $push: { favorites: user }, $inc: { favoritesCount: 1 } })
await User.findByIdAndUpdate({ user }, { $push: { favorited: article.id } })
console.log(article.id, "ID")
} else {
res.json({ msg: "Article already liked!!" })
}
res.json({ success: true, msg: "Article successfully liked" })
} catch (error) {
res.json({ error, msg: "Could not like the article" })
}
})

//dislike an article
router.delete('/:slug/favorite', async (req, res) => {
var slug = req.params.slug
var user = req.user.UserId
try {
var article = await Article.findOne({ slug })
if (article.favorites.includes(user)) {
await Article.findOneAndUpdate({ slug }, { $pull: { favorites: user }, $inc: { favoritesCount: -1 } })
await User.findByIdAndUpdate({ user }, { $pull: { favorited: article.id } })
} else {
res.json({ msg: "Article already disliked!!" })
}
res.json({ success: true, msg: "Article disliked" })
} catch (error) {
res.json({error:"Article not deleted, invalid slug input"})
res.json({ error, msg: "Could not dislike the article" })
}

})


Expand Down
2 changes: 0 additions & 2 deletions routes/api/profiles.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ var express = require('express');
var router = express.Router();
var User = require('../../models/user');
var auth = require('../../modules/auth');
var jwt = require('jsonwebtoken');
var gravatar = require('gravatar');
var loggedUser = auth.verifyToken;

router.use(loggedUser);
Expand Down

0 comments on commit c061aa7

Please sign in to comment.