Skip to content

Commit

Permalink
finishing up clapping and disliking feature
Browse files Browse the repository at this point in the history
[Finishes #167313408]
  • Loading branch information
salviosage committed Aug 19, 2019
1 parent 703d5e6 commit 9868f27
Show file tree
Hide file tree
Showing 9 changed files with 413 additions and 42 deletions.
2 changes: 1 addition & 1 deletion src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { mock } from './middlewares/validators/socialLogin-mock';

const app = express();

if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
if (process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'development') {
app.use(mock);
}
logging();
Expand Down
87 changes: 62 additions & 25 deletions src/controllers/likes.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,21 @@ class LikesController {
if (req.body.likeId) {
const prof = {
status: 'neutral',
claps: null,
claps: 0,
};
const like = await likeService.updateLikes(prof, req.params.Article);
util.setSuccess(200, 'Successfully unliked', like);
const like = await likeService.updateLikes(prof, req.body.likeId);
const newLike = {
status: like[1].status,
claps: like[1].claps,
ArticleSlug: like[1].ArticleSlug,
};
util.setSuccess(200, 'Successfully unliked', newLike);
return util.send(res);
}
util.setError(404, 'you cant unlike article you didnt like');
util.setError(401, 'you cant unlike article you did not like');
return util.send(res);
} catch (error) {
util.setError(500, 'contact admin');
util.setError(500, 'server error contact admin');
return util.send(res);
}
}
Expand All @@ -42,26 +47,43 @@ class LikesController {
*/
static async dislike(req, res) {
try {
if (req.body.author === req.body.userId) {
util.setError(401, 'You can not dislike to your own post');
return util.send(res);
}
if (!req.body.likeId) {
const prof = {
userId: req.body.userId,
ArticleSlug: req.params.Article,
status: 'dislike',
claps: null,
claps: 0,
};
const like = await likeService.createLikes(prof);
util.setSuccess(200, 'Successfully disliked', like);
const newLike = {
status: like.status,
claps: like.claps,
ArticleSlug: like.ArticleSlug,
};
util.setSuccess(200, 'Successfully disliked', newLike);
return util.send(res);
}
const prof = {
status: 'dislike',
claps: null,
claps: 0,
};
if (req.body.status === 'dislike') {
prof.status = 'neutral';
}
const like = await likeService.updateLikes(prof, req.body.likeId);
util.setSuccess(200, 'Successfully disliked', like);
const newLike = {
status: like[1].status,
claps: like[1].claps,
ArticleSlug: like[1].ArticleSlug,
};
util.setSuccess(200, 'Successfully disliked', newLike);
return util.send(res);
} catch (error) {
util.setError(500, 'dislike not successfully server error');
util.setError(500, 'server error contact admin');
return util.send(res);
}
}
Expand All @@ -74,13 +96,22 @@ class LikesController {
*/
static async clap(req, res) {
try {
if (req.body.author === req.body.userId) {
util.setError(401, 'You can not clap to your own post');
return util.send(res);
}
if (req.body.likeId) {
const prof = {
status: 'like',
claps: req.body.claps + 1,
};
const like = await likeService.updateLikes(prof, req.body.likeId);
util.setSuccess(200, 'Successfully claped', like);
const newLike = {
status: like[1].status,
claps: like[1].claps,
ArticleSlug: like[1].ArticleSlug,
};
util.setSuccess(200, 'Successfully claped', newLike);
return util.send(res);
}
const prof = {
Expand All @@ -90,11 +121,15 @@ class LikesController {
claps: 1,
};
const like = await likeService.createLikes(prof);
util.setSuccess(200, 'Successfully claped', like);
const newLike = {
status: like.status,
claps: like.claps,
ArticleSlug: like.ArticleSlug,
};
util.setSuccess(200, 'Successfully claped', newLike);
return util.send(res);
} catch (error) {
console.log(error);
util.setError(500, 'clap not successfully server error');
util.setError(500, 'server error contact admin');
return util.send(res);
}
}
Expand All @@ -107,15 +142,16 @@ class LikesController {
*/
static async getDislikes(req, res) {
try {
const dislike = await likeService.getAllADislike(req.params.parentid);
const dislike = await likeService.getAllADislike(req.params.Article);
if (dislike) {
util.setSuccess(200, 'Successfully claped', dislike);
const data = {
dislikes: dislike.count,
};
util.setSuccess(200, 'Successfully dislike retrieved', data);
return util.send(res);
}
util.setError(404, 'no dislike found');
return util.send(res);
} catch (error) {
util.setError(400, 'unsuccessfull request server error');
util.setError(400, 'server error contact admin');
return util.send(res);
}
}
Expand All @@ -128,16 +164,17 @@ class LikesController {
*/
static async getClaps(req, res) {
try {
const claps = await likeService.getAllAClaps(req.params.parentid);
const claps = await likeService.getAllAClaps(req.params.Article);
if (claps) {
util.setSuccess(200, 'Successfully claps retrieved', claps);
const data = {
clapers: claps.count,
claps: Object.values(claps)[1],
};
util.setSuccess(200, 'Successfully claps retrieved', data);
return util.send(res);
}
util.setError(404, 'no claps found');
return util.send(res);
} catch (error) {
console.log(error);
util.setError(400, 'unsuccessfull request');
util.setError(400, 'server error contact admin');
return util.send(res);
}
}
Expand Down
2 changes: 0 additions & 2 deletions src/middlewares/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ const validateToken = async (req, res, next) => {
req.token = token;
req.auth = decode;
next();

return decode;
});
} else {
return res.status(400).send({
Expand Down
17 changes: 11 additions & 6 deletions src/middlewares/likes.middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,27 @@ export default async (req, res, next) => {
const userId = user.id;
const ArticleSlug = req.params.Article;
const post = await models.Article.findOne({ where: { slug: ArticleSlug } });

if (!post) {
util.setError(404, 'post not found');
return util.send(res);
}
const like = await models.Likes.findOne({ where: { ArticleSlug, userId } });
console.log(req.params.Article);
if (like) {
if (!like) {
req.body.author = post.authorId;
req.body.userId = userId;
req.body.likeId = null;
req.body.claps = null;
req.body.author = post.authorId;
next();
} else {
req.body.author = post.authorId;
req.body.likeId = like.id;
req.body.claps = like.claps;
req.body.userId = userId;
req.body.status = like.status;
next();
}
req.body.likeId = null;
req.body.claps = null;
req.body.userId = userId;
next();
} catch (error) {
util.setError(500, 'server error');
return util.send(res);
Expand Down
4 changes: 2 additions & 2 deletions src/routes/api/likes/likes.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import isLike from '../../../middlewares/likes.middleware';
const router = express.Router();
// greate edit a viewing profile handlers

router.get('/claps/:Article', [validateToken, confirmEmaiAuth], LikesController.getClaps);
router.get('/dislike/:Article', [validateToken, confirmEmaiAuth], LikesController.getDislikes);
router.get('/claps/:Article', [validateToken, confirmEmaiAuth, isLike], LikesController.getClaps);
router.get('/dislikes/:Article', [validateToken, confirmEmaiAuth, isLike], LikesController.getDislikes);
router.put('/clap/:Article', [validateToken, confirmEmaiAuth, isLike], LikesController.clap);
router.put('/dislike/:Article', [validateToken, confirmEmaiAuth, isLike], LikesController.dislike);
router.put('/unlike/:Article', [validateToken, confirmEmaiAuth, isLike], LikesController.unlike);
Expand Down
4 changes: 3 additions & 1 deletion src/routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import error from '../middlewares/error.middleware';
import notfound from '../middlewares/404.middleware';
import { mock } from '../middlewares/validators/socialLogin-mock';
import article from './api/article/article.routes';
import likes from './api/likes/likes.routes';

dotenv.config();

Expand Down Expand Up @@ -38,9 +39,10 @@ const apiVersion = process.env.API_VERSION;
const baseUrl = `/api/${apiVersion}`;

router.get('/', (req, res) => res.status(200).json({ status: 200, data: 'Welcome to Authors Haven.' }));
router.use(article);
router.use(baseUrl, api);
router.use(oauth);
router.use(article);
router.use(likes);

router.use(notfound);
router.use(error);
Expand Down
13 changes: 12 additions & 1 deletion src/seeders/20190808074800-normal-user.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,18 @@ export default {
verified: true,
createdAt: new Date(),
updatedAt: new Date()
}
},
{
firstname: 'usertwo',
lastname: 'usertwo',
email: 'usertwo@gmail.com',
password: hashPassword,
username: 'usertwo',
role: 'normal',
verified: true,
createdAt: new Date(),
updatedAt: new Date()
},
]),

down: queryInterface => queryInterface.bulkDelete('users', null, {})
Expand Down
14 changes: 10 additions & 4 deletions src/services/likes.service.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import Sequelize from 'sequelize';
import models from '../models';

const db = models.Likes;
Expand All @@ -18,11 +19,15 @@ class LikeService {
*/
static async getAllADislike(ArticleSlug) {
try {
const dislikes = await db.findAll({
const dislikes = await db.findAndCountAll({
where: {
ArticleSlug: String(ArticleSlug),
status: 'dislike'
}
},
attributes: {
exclude: ['id', 'userId', 'createdAt', 'updatedAt', 'status']
},
raw: true
});
return dislikes;
} catch (error) {
Expand All @@ -40,11 +45,12 @@ class LikeService {
*/
static async getAllAClaps(ArticleSlug) {
try {
const claps = await db.findAll({
const claps = await db.findAndCountAll({
where: {
ArticleSlug: String(ArticleSlug),
status: 'like'
}
},
attributes: [[Sequelize.fn('sum', Sequelize.col('claps')), 'total']],
});
return claps;
} catch (error) {
Expand Down
Loading

0 comments on commit 9868f27

Please sign in to comment.