Skip to content
Snippets Groups Projects

Toggle like endpoint

Closed Talty-Kerr, Patrick (UG - Comp Sci & Elec Eng) requested to merge toggle-like-endpoint into main
2 files
+ 163
2
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -150,6 +150,164 @@ const readAllComments = async (req: Request, res: Response, next: NextFunction)
@@ -150,6 +150,164 @@ 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 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' });
 
}
 
 
};
 
 
 
const likedState = 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 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){
 
 
try{
 
const query = {_id : new mongoose.Types.ObjectId(_id)};
 
let comment = await Comment.findOne(query);
 
if(comment == null){
 
 
}else{
 
for (var val of comment.users_liked) {
 
if(val == user_id){
 
console.log("Already Liked")
 
const responseDataTrue = {
 
likedState:"true",
 
}
 
const jsonContent = JSON.stringify(responseDataTrue);
 
return res.status(200).send(jsonContent)
 
}
 
}
 
console.log("Not Liked")
 
const responseDataFalse = {
 
likedState:"false",
 
}
 
const jsonContent = JSON.stringify(responseDataFalse);
 
return res.status(200).send(jsonContent)
 
 
}}
 
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, likedState}
Loading