From 784ebe1db5c76dd1522135e9e480640961ecfae4 Mon Sep 17 00:00:00 2001 From: pt00371 <pt00371@surrey.ac.uk> Date: Sun, 23 Apr 2023 02:53:20 +0100 Subject: [PATCH] added route + controller toggle-like end point --- .../src/controllers/Comment.ts | 133 +++++++++++++++++- .../comment-service/src/routes/Comment.ts | 2 + 2 files changed, 134 insertions(+), 1 deletion(-) diff --git a/backend-services/comment-service/src/controllers/Comment.ts b/backend-services/comment-service/src/controllers/Comment.ts index f34a73e9..66b17ded 100644 --- a/backend-services/comment-service/src/controllers/Comment.ts +++ b/backend-services/comment-service/src/controllers/Comment.ts @@ -150,6 +150,137 @@ const readAllComments = async (req: Request, res: Response, next: NextFunction) } -export default { createComment, readAllComments} +const toggleLike = async ( req: Request, res: Response, next: NextFunction,) => { + + + + const { _id, user_id, } = req.body; + + + + if (_id == null || _id === 'undefined') { + return res.status(400).send({ message: 'Bad Request' }); + } + + if (user_id == null || user_id === 'undefined') { + return res.status(400).send({ message: 'Bad Request' }); + } + + + + + + /* + const query = {_id : new mongoose.Types.ObjectId(_id)}; + const comment = await Comment.findOne(query) + + + + + + try{ + + if (!comment?.users_liked.length) { + let update = {$push: {users_liked : [user_id]}}; + await Comment.findOneAndUpdate(query, update); + } + else{ + let likedByUser = false + for (var val of comment.users_liked) { + if(val == user_id){ + console.log("Already Liked") + likedByUser = true + } + } + if(likedByUser){ + let update = {$pull: {users_liked : user_id}}; + console.log("Removed Like"); + Comment.findOneAndUpdate(query, update); + await Comment.findOneAndUpdate(query, update); + + }else{ + let update = {$push: {users_liked : [user_id]}}; + console.log("Added Like"); + await Comment.findOneAndUpdate(query, update); + } + } + + + + } + catch{ + Logging.error("Incorrect") + } + */ + + + const token = req.headers.authorization?.split(' ')[1]; + if (!token) { + return res.status(401).send({ message: 'Unauthorised' }); + } + + + + try { + const decodedToken = jwt.verify(token, config.server.token.secret ); + const decodeTokenToString = decodedToken; + const tokenString = JSON.stringify(decodeTokenToString); + const JSobj = JSON.parse(tokenString).user_id; + + if(JSobj == user_id){ + const query = {_id : new mongoose.Types.ObjectId(_id)}; + const comment = await Comment.findOne(query) + try{ + + if (!comment?.users_liked.length) { + console.log(!comment?.users_liked.length) + let update = {$push: {users_liked : [user_id]}}; + await Comment.findOneAndUpdate(query, update); + return res.status(201).send({ message: 'Likes Updated'}); + } + else{ + let likedByUser = false + for (var val of comment.users_liked) { + if(val == user_id){ + console.log("Already Liked") + likedByUser = true + } + } + if(likedByUser){ + let update = {$pull: {users_liked : user_id}}; + console.log("Removed Like"); + Comment.findOneAndUpdate(query, update); + await Comment.findOneAndUpdate(query, update); + return res.status(201).send({ message: 'Likes Updated'}); + + }else{ + let update = {$push: {users_liked : [user_id]}}; + console.log("Added Like"); + await Comment.findOneAndUpdate(query, update); + return res.status(201).send({ message: 'Likes Updated'}); + } + } + + + + } + catch{ + Logging.error("Incorrect") + return res.status(400).send({message: 'Bad Request'}) + } + + } + else{ + return res.status(401).send({ message: 'Unauthorised' }); + } + + + } catch (error) { + return res.status(400).send({ message: 'Bad Request' }); + } + +}; + +export default { createComment, readAllComments, toggleLike} diff --git a/backend-services/comment-service/src/routes/Comment.ts b/backend-services/comment-service/src/routes/Comment.ts index 4078f4ca..e681275b 100644 --- a/backend-services/comment-service/src/routes/Comment.ts +++ b/backend-services/comment-service/src/routes/Comment.ts @@ -4,6 +4,8 @@ import controller from '../controllers/Comment'; const router = express.Router(); router.post('/create', controller.createComment); +router.put('/toggle-like', controller.toggleLike); + router.get('/:post_id', controller.readAllComments); router.get('/', controller.readAllComments); export = router; -- GitLab