From 2687db2b080f28fa8cea7b54065f589bb6659b40 Mon Sep 17 00:00:00 2001 From: bhavishya2107 Date: Tue, 11 Feb 2020 16:42:40 +0530 Subject: [PATCH] taglist, feeds --- models/user.js | 35 +++++++++++++-------------------- routes/api/articles.js | 44 +++++++++++++++++++++++++++--------------- routes/api/index.js | 17 ++++++++-------- routes/api/profiles.js | 10 +++++----- routes/api/users.js | 11 ++++++----- 5 files changed, 61 insertions(+), 56 deletions(-) diff --git a/models/user.js b/models/user.js index 8472489..18e995a 100644 --- a/models/user.js +++ b/models/user.js @@ -19,37 +19,28 @@ var userSchema = new Schema({ type: String, required: true }, - token: { - type: String - }, bio: { type: String }, image: { type: String }, - following: { - type: [Schema.Types.ObjectId], + following: [{ + type: Schema.Types.ObjectId, ref: "User" - }, - comments: { - type: [Schema.Types.ObjectId], - ref: "Comment" - }, - articles: { - type: [Schema.Types.ObjectId], + }], + articles: [{ + type: Schema.Types.ObjectId, ref: "Article" - }, - favorited: { - type: [Schema.Types.ObjectId], + }], + favorited: [{ + type: Schema.Types.ObjectId, ref: "Article" - }, - followers: { - type: [String] - }, - following: { - type: [String] - } + }], + followers: [{ + type: Schema.Types.ObjectId, + ref: "User" + }] }, { timestamps: true }) diff --git a/routes/api/articles.js b/routes/api/articles.js index 78d5527..6867be5 100644 --- a/routes/api/articles.js +++ b/routes/api/articles.js @@ -4,32 +4,46 @@ 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 loggedUser = auth.verifyToken; var updateSlug = auth.upateSlug; +//feed articles +router.get('/feed', auth.verifyToken, async (req, res) => { + try { + var user = await User.findById(req.user.UserId) + .populate({ + path: 'following', populate: { path: 'articles' } + }) + res.json({ success: true, feeds:user.following }) + } catch (error) { + res.json({ error, msg: "errro" }) + } +}) + + //get single article router.get('/:slug', async (req, res) => { var query = req.params.slug try { var singleArticle = await Article.findOne({ slug: query }) - .populate('author','-following') - console.log(singleArticle) + .populate('author', '-following') + if (!singleArticle) return res.json({ success: false, msg: "Invalid Slug" }) res.json(singleArticle) } catch (error) { res.status(400).json(error, { msg: "Article not found or slug is not appropriate" }) } - }) //==================only for logged user=================== -router.use(loggedUser) +// router.use(loggedUser) //list all articles router.get('/', async (req, res) => { try { var articles = await Article.find({}) + .populate('author') res.json({ success: true, articles }) } catch (error) { res.json({ error, msg: "No articles found" }) @@ -38,19 +52,19 @@ router.get('/', async (req, res) => { }) //create Article -router.post('/', async (req, res) => { +router.post('/', auth.verifyToken, async (req, res) => { try { var article = await Article.create(req.body.article) var articleWithUser = await Article.findOneAndUpdate(article.id, { author: req.user.UserId }) + var articleUpdate = await User.findByIdAndUpdate(req.user.UserId, {$push:{articles:article.id}}) res.json({ success: "true", articleWithUser }) } catch (error) { res.status(400).json(error) } }) - //update Article -router.put('/:slug', async (req, res) => { +router.put('/:slug', auth.verifyToken, async (req, res) => { var slug = req.params.slug try { var updatedArticle = await Article.findOneAndUpdate({ slug }, req.body.article, { new: true }) @@ -63,7 +77,7 @@ router.put('/:slug', async (req, res) => { }) //delete Article -router.delete('/:slug', async (req, res) => { +router.delete('/:slug', auth.verifyToken, async (req, res) => { var slug = req.params.slug try { await Article.findOneAndDelete({ slug }) @@ -76,7 +90,7 @@ router.delete('/:slug', async (req, res) => { // =======================COMMENTS======================================== //create comments -router.post('/:slug/comments', async (req, res) => { +router.post('/:slug/comments', auth.verifyToken, async (req, res) => { console.log(req.user) try { var comment = await Comment.create(req.body.comment) @@ -89,7 +103,7 @@ router.post('/:slug/comments', async (req, res) => { }) //delete comment -router.delete('/:slug/comments/:id', async (req, res) => { +router.delete('/:slug/comments/:id', auth.verifyToken, async (req, res) => { var slug = req.params.slug try { await Comment.findByIdAndDelete(req.params.id) @@ -101,7 +115,7 @@ router.delete('/:slug/comments/:id', async (req, res) => { }) //get all comments in an article -router.get('/:slug/comments', (req, res) => { +router.get('/:slug/comments', auth.verifyToken, (req, res) => { console.log(req.user) var slug = req.params.slug Article.findOne({ slug }) @@ -113,7 +127,7 @@ router.get('/:slug/comments', (req, res) => { }) //like an article -router.post('/:slug/favorite', async (req, res) => { +router.post('/:slug/favorite', auth.verifyToken, async (req, res) => { var slug = req.params.slug var user = req.user.UserId try { @@ -133,7 +147,7 @@ router.post('/:slug/favorite', async (req, res) => { }) //dislike an article -router.delete('/:slug/favorite', async (req, res) => { +router.delete('/:slug/favorite', auth.verifyToken, async (req, res) => { var slug = req.params.slug var user = req.user.UserId try { @@ -150,6 +164,4 @@ router.delete('/:slug/favorite', async (req, res) => { } }) - - module.exports = router; \ No newline at end of file diff --git a/routes/api/index.js b/routes/api/index.js index 9840261..536a28a 100644 --- a/routes/api/index.js +++ b/routes/api/index.js @@ -7,17 +7,18 @@ var articleRouter = require('./articles'); var profilesRouter = require('./profiles'); -router.get('/tags', (req, res) => { - Article.find({}) - .populate({path:'tagList'}) - .exec((err, tags) => { - if(err) return res.json(err) - res.json({tags}) - }) +router.get('/tags', async (req, res) => { + try { + var articles = await Article.find({}) + articles.forEach((article) => { + res.json({success:true,tags:article.tagList}) + }) + } catch (error) { + res.json(error) + } }) router.use('/', userRouter); - router.use('/articles', articleRouter); router.use('/profiles', profilesRouter); diff --git a/routes/api/profiles.js b/routes/api/profiles.js index 80b7cb8..d9e651c 100644 --- a/routes/api/profiles.js +++ b/routes/api/profiles.js @@ -28,11 +28,11 @@ router.post('/:username/follow', async (req, res) => { var user = await User.findOne({ username }) console.log(user) if (!user.following.includes(loginUser)) { - var follow = await User.findOneAndUpdate({ username }, { $push: { following: req.user.UserId } }) - await User.findByIdAndUpdate(req.user.UserId, { $push: { followers: follow.id } }) + var follow = await User.findOneAndUpdate({ username }, { $push: { followers: req.user.UserId } }, { new: true }) + await User.findByIdAndUpdate(req.user.UserId, { $push: { following: follow.id } }) res.json({ success: true, follow }) } else { - res.json({ msg: `you have already followed the ${username}`,follow }) + res.json({ msg: `you have already followed the ${username}`, follow }) } } catch (error) { res.json({ msg: "Issue in following" }) @@ -48,8 +48,8 @@ router.delete('/:username/follow', async (req, res) => { var user = await User.findOne({ username }) console.log(user) if (user.following.includes(loginUser)) { - var follow = await User.findOneAndUpdate({ username }, { $pull: { following: req.user.UserId } }) - await User.findByIdAndUpdate(req.user.UserId, { $pull: { followers: follow.id } }) + var follow = await User.findOneAndUpdate({ username }, { $pull: { followers: req.user.UserId } }, { new: true }) + await User.findByIdAndUpdate(req.user.UserId, { $pull: { following: follow.id } }) res.json({ success: true, msg: `successfully unfollowed ${username}` }) } else { res.json({ msg: `you have already unfollowed the ${username}` }) diff --git a/routes/api/users.js b/routes/api/users.js index 988b874..2f2bde0 100644 --- a/routes/api/users.js +++ b/routes/api/users.js @@ -3,7 +3,7 @@ var router = express.Router(); var User = require('../../models/user'); var auth = require('../../modules/auth'); var jwt = require('jsonwebtoken'); -var loggedUser = auth.verifyToken; +// var loggedUser = auth.verifyToken; var updatePW = auth.updatePW; @@ -29,7 +29,7 @@ router.post('/users/login', async (req, res) => { var payload = { UserId: user.id, email: user.email } var token = await jwt.sign(payload, process.env.SECRET) user.token = token - res.json({ success: "true", user }) + res.json({ success: "true" , token}) } catch (error) { res.status(400).json(error); } @@ -37,11 +37,12 @@ router.post('/users/login', async (req, res) => { // ------------------------------------only for logged user------------------------------------------------ -router.use(loggedUser) +// router.use(loggedUser) //get single user -router.get('/user', async (req, res) => { +router.get('/user', auth.verifyToken,async (req, res) => { var { username } = req.body.user + console.log(username) try { var user = await User.findOne({ username }) if (user) return res.json({ success: "true", user }) @@ -51,7 +52,7 @@ router.get('/user', async (req, res) => { }) //update user -router.put('/user', async (req, res) => { +router.put('/user',auth.verifyToken, async (req, res) => { let id = req.user.UserId; console.log(req.user) try {