오늘은 뉴스피드 프로젝트 중 좋아요 기능을 만들었다!
// 게시물 좋아요 기능
router.post('/:postId', validateAccessToken, async (req, res, next) => {
try {
const { postId } = req.params;
const post = await prisma.posts.findFirst({ where: { postId: +postId } });
if (!post) {
return res.status(404).json({ message: '해당 게시물이 없습니다.' });
}
// 사용자가 해당 게시물에 대해 이미 좋아요를 눌렀는지 확인
const existingLike = await prisma.likes.findFirst({
where: {
postId: +postId,
userId: req.user.userId, // 사용자 ID
},
});
if (existingLike) {
// 이미 좋아요를 눌렀으면 좋아요 취소
await prisma.likes.delete({
where: {
likeId: existingLike.likeId,
},
});
return res.status(200).json({ message: '게시물 좋아요를 취소합니다.' });
} else {
// 좋아요를 누르지 않았으면 좋아요 추가
await prisma.likes.create({
data: {
postId: +postId,
userId: req.user.userId, // 사용자 ID
},
});
return res.status(201).json({ message: '게시물을 좋아합니다.' });
}
} catch (error) {
next(error);
}
});
먼저 해당 게시물이 있는지 postId를 조건으로 찾아내고 게시물이 없다면 "해당 게시물이 없습니다" 라는 메세지를 준다!
postId와 userId로 사용자가 게시물에 대해 좋아요를 눌렀는지 확인한 후
이미 눌려있는 좋아요를 다시 누르면 좋아요 취소!
눌려있지 않는 상태라면 좋아요 추가!