✨Feat: 增加取消点赞功能

This commit is contained in:
2025-10-19 10:53:47 +08:00
parent 02c75583bd
commit bc6d627bc9
3 changed files with 39 additions and 0 deletions
@@ -22,4 +22,10 @@ public class ThumbController {
Boolean success = thumbService.doThumb(doThumbRequest, request);
return ResultUtils.sucess(success);
}
@PostMapping("/undo")
public BaseResponse<Boolean> undoThumb(@RequestBody DoThumbRequest doThumbRequest, HttpServletRequest request) {
Boolean success = thumbService.undoThumb(doThumbRequest, request);
return ResultUtils.sucess(success);
}
}
@@ -14,4 +14,6 @@ public interface ThumbService extends IService<Thumb> {
Boolean doThumb(DoThumbRequest doThumbRequest, HttpServletRequest request);
Boolean undoThumb(DoThumbRequest doThumbRequest, HttpServletRequest request);
}
@@ -67,6 +67,37 @@ public class ThumbServiceImpl extends ServiceImpl<ThumbMapper, Thumb>
});
}
}
@Override
public Boolean undoThumb(DoThumbRequest doThumbRequest, HttpServletRequest request) {
if (doThumbRequest == null || doThumbRequest.getBlogId() == null) {
throw new RuntimeException("参数异常");
}
User loginUser = userService.getLoginUser(request);
// Lock: 这里使用字符串加锁,获取字符串常量对象才可运行,字符串常量对象具有唯一性
synchronized (("LOCK-USERID-" + loginUser.getId().toString()).intern()) {
// Transaction: 编程式事务
return transactionTemplate.execute(status -> {
Long blogId = doThumbRequest.getBlogId();
// 判断是否已点过赞
Thumb thumb = this.lambdaQuery()
.eq(Thumb::getUserid, loginUser.getId())
.eq(Thumb::getBlogId, blogId)
.one();
if (thumb == null) {
throw new BusinessException(ErrorCode.OPERATION_ERROR, "用户未点赞");
}
// 更新帖子点赞计数器
boolean update = blogService.lambdaUpdate()
.eq(Blog::getId, blogId)
.setSql("thumbCount = thumbCount - 1")
.update();
// 更新点赞表数据
// 两者一起执行
return update && this.removeById(thumb.getId());
});
}
}
}