@Override
public Result blogLike(Long id) {
//1.获取用户信息
UserDTO user = UserHolder.getUser();
Long userId = user.getId();
//2.查询是否为第一次点赞
String key="blog:liked:"+id;
Boolean isMember = stringRedisTemplate.opsForSet().isMember(key, userId.toString());
if(BooleanUtil.isFalse(isMember)){
//2.1 更新数据库+1
boolean isSuccess = this.update().setSql("liked=liked+1").eq("id", id).update();
if (isSuccess){
//2.2添加到redis中 选用数据类型为set
stringRedisTemplate.opsForSet().add(key,userId.toString());
}
}else {
//3.1更新数据库-1
boolean isSuccess = this.update().setSql("liked=liked-1").eq("id", id).update();
if (isSuccess){
//3.2 从redis中移除
stringRedisTemplate.opsForSet().remove(key,userId.toString());
}
}
return Result.ok();
}
private void isBlogLike(Blog blog) {
UserDTO user = UserHolder.getUser();
Long userId = user.getId();
String key="blog:liked:"+blog.getId();
Boolean isMember = stringRedisTemplate.opsForSet().isMember(key, userId.toString());
blog.setIsLike(BooleanUtil.isTrue(isMember));
}
@Override
public Result hotBlogByPage(Integer current) {
// 根据用户查询
Page<Blog> page = this.query()
.orderByDesc("liked")
.page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE));
// 获取当前页数据
List<Blog> records = page.getRecords();
// 查询用户
records.forEach(blog ->{
queryBlogUser(blog);
this.isBlogLike(blog);
});
return Result.ok(records);
}
@Override
public Result blogGetById(Long id) {
//1.查询blog
Blog blog= this.getById(id);
//2.查询blog相关的用户
queryBlogUser(blog);
//3.查询该用户是否点过赞
isBlogLike(blog);
return Result.ok(blog);
}