diff --git a/server/controllers/like.controller.js b/server/controllers/like.controller.js index e825b63c..1dbc6774 100644 --- a/server/controllers/like.controller.js +++ b/server/controllers/like.controller.js @@ -1,5 +1,5 @@ import algoliasearch from 'algoliasearch'; -import Like from '../models/like.model'; +import Vote from '../models/vote.model'; import Post from '../models/post.model'; function syncAlgolia(query) { @@ -50,13 +50,19 @@ function syncAlgolia(query) { async function likePost(req, res) { const { postId } = req.params; const { _id: userId } = req.user; - const query = { postId, userId }; - const like = new Like(query); - const likeActive = await Like.findOne(query); - const likeCount = likeActive ? -1 : 1; + const query = { + postId, + userId, + direction: 'upvote', + active: true, + }; + + const like = new Vote(query); + const likeActive = await Vote.findOne(query); + const score = likeActive ? -1 : 1; if (likeActive) { - await Like.deleteOne({ _id: likeActive._id }); + await Vote.deleteOne({ _id: likeActive._id }); } else { await like.save(); } @@ -64,7 +70,7 @@ async function likePost(req, res) { Post .findOneAndUpdate( { _id: postId }, - { $inc: { likeCount } }, + { $inc: { score } }, { new: true }, ).exec(async (err, reply) => { if (err) { @@ -72,13 +78,13 @@ async function likePost(req, res) { } syncAlgolia({ - likeCount: reply.likeCount, + score: reply.score, objectID: reply.id, }); return res.json({ - likeCount: reply.likeCount, - likeActive: !(likeActive), + score: reply.score, + upvoted: !(likeActive), }); }); } diff --git a/server/helpers/post.helper.js b/server/helpers/post.helper.js index 38a63d13..40403239 100644 --- a/server/helpers/post.helper.js +++ b/server/helpers/post.helper.js @@ -1,5 +1,5 @@ import algoliasearch from 'algoliasearch'; -import Like from '../models/like.model'; +import Vote from '../models/vote.model'; import Favorite from '../models/favorite.model'; import { getAdFreeMp3 } from '../helpers/mp3.helper'; import { getPrivateRss } from '../helpers/rss.helper'; @@ -46,9 +46,10 @@ async function addPostData(post, fullUser) { const query = { userId: fullUser ? fullUser._id : null, postId: post._id, + active: true, }; - const likeActive = await Like + const upvoted = await Vote .findOne(query) .exec(l => Promise.resolve(l)); @@ -56,10 +57,9 @@ async function addPostData(post, fullUser) { .findOne(query) .exec(l => Promise.resolve(l)); - post.likeCount = post.likeCount || 0 // eslint-disable-line + post.upvoted = !!(upvoted) // eslint-disable-line post.totalFavorites = post.totalFavorites || 0 // eslint-disable-line - post.likeActive = !!(likeActive) // eslint-disable-line - post.bookmarkActive = !!(bookmark && bookmark.active) // eslint-disable-line + post.bookmarked = !!(bookmark && bookmark.active) // eslint-disable-line post.rss = '/rss/public/all' // eslint-disable-line if (fullUser && fullUser.subscription && fullUser.subscription.active) { diff --git a/server/models/post.model.js b/server/models/post.model.js index 13461aaa..70b4128b 100644 --- a/server/models/post.model.js +++ b/server/models/post.model.js @@ -132,7 +132,6 @@ PostSchema.statics = { */ standardSelectForFind: [ 'content', - 'likeCount', 'totalFavorites', 'title', 'date', diff --git a/server/routes/post.route.js b/server/routes/post.route.js index 9a9b7dfc..0a9e6c6b 100644 --- a/server/routes/post.route.js +++ b/server/routes/post.route.js @@ -43,30 +43,31 @@ router.route('/search') router.route('/recommendations') .get( - expressJwt({ secret: config.jwtSecret }) - , loadFullUser - , postCtrl.recommendations + expressJwt({ secret: config.jwtSecret }), + loadFullUser, + postCtrl.recommendations, ); router.route('/:postId') .get( - expressJwt({ secret: config.jwtSecret, credentialsRequired: false }) - , loadFullUser - , postCtrl.get + expressJwt({ secret: config.jwtSecret, credentialsRequired: false }), + loadFullUser, + postCtrl.get, ); + // Get related links associated with postId router.route('/:postId/related-links') .get( - expressJwt({ secret: config.jwtSecret, credentialsRequired: false }) - , relatedLinkCtrl.list + expressJwt({ secret: config.jwtSecret, credentialsRequired: false }), + relatedLinkCtrl.list, ); // Add a related-link to postId: router.route('/:postId/related-link') .post( - expressJwt({ secret: config.jwtSecret }) - , validate(paramValidation.relatedLinkCreate) - , relatedLinkCtrl.create + expressJwt({ secret: config.jwtSecret }), + validate(paramValidation.relatedLinkCreate), + relatedLinkCtrl.create, ); router.route('/:postId/like') @@ -77,22 +78,20 @@ router.route('/:postId/like') router.route('/:postId/upvote') .post( - expressJwt({ secret: config.jwtSecret }) - , transferField({ source: 'post', target: 'entity' }) - , voteCtrl.findVote - , voteCtrl.upvote // normal upvoting via vote model - , postCtrl.upvote // special-case: uses racoon upvoting just for posts. - , voteCtrl.finish + expressJwt({ secret: config.jwtSecret }), + transferField({ source: 'post', target: 'entity' }), + voteCtrl.findVote, + voteCtrl.upvote, // normal upvoting via vote model + voteCtrl.finish, ); router.route('/:postId/downvote') .post( - expressJwt({ secret: config.jwtSecret }) - , transferField({ source: 'post', target: 'entity' }) - , voteCtrl.findVote - , voteCtrl.downvote - , postCtrl.downvote - , voteCtrl.finish + expressJwt({ secret: config.jwtSecret }), + transferField({ source: 'post', target: 'entity' }), + voteCtrl.findVote, + voteCtrl.downvote, + voteCtrl.finish, ); router.route('/:postId/bookmark') diff --git a/server/tests/post.test.js b/server/tests/post.test.js index 2a42fe99..826416c6 100644 --- a/server/tests/post.test.js +++ b/server/tests/post.test.js @@ -170,9 +170,9 @@ describe('## Post APIs', () => { .expect(httpStatus.OK) .then((res) => { const like = res.body; - expect(like).to.have.property('likeCount').that.is.a('number'); - expect(like).to.have.property('likeActive').that.is.a('boolean'); - expect(like.likeActive).to.be.true; //eslint-disable-line + expect(like).to.have.property('score').that.is.a('number'); + expect(like).to.have.property('upvoted').that.is.a('boolean'); + expect(like.upvoted).to.be.true; //eslint-disable-line done(); }) .catch(done); @@ -185,9 +185,9 @@ describe('## Post APIs', () => { .expect(httpStatus.OK) .then((res) => { const like = res.body; - expect(like).to.have.property('likeCount').that.is.a('number'); - expect(like).to.have.property('likeActive').that.is.a('boolean'); - expect(like.likeActive).to.be.false; //eslint-disable-line + expect(like).to.have.property('score').that.is.a('number'); + expect(like).to.have.property('upvoted').that.is.a('boolean'); + expect(like.upvoted).to.be.false; //eslint-disable-line done(); }) .catch(done);