diff --git a/src/main/java/com/cxx/food/controller/MomentController.java b/src/main/java/com/cxx/food/controller/MomentController.java index cd9f367..ea92064 100644 --- a/src/main/java/com/cxx/food/controller/MomentController.java +++ b/src/main/java/com/cxx/food/controller/MomentController.java @@ -49,5 +49,17 @@ public class MomentController { @RequestParam String content) { return momentService.addComment(id, content); } + + @Operation(summary = "增加点赞") + @PostMapping("/{id}/like") + public Boolean addLike(@PathVariable("id") long id) { + return momentService.addLike(id); + } + + @Operation(summary = "取消点赞") + @DeleteMapping("/{id}/like") + public Boolean deleteLike(@PathVariable("id") long id) { + return momentService.deleteLike(id); + } } \ No newline at end of file diff --git a/src/main/java/com/cxx/food/controller/UserController.java b/src/main/java/com/cxx/food/controller/UserController.java index ccf3db1..144ac30 100644 --- a/src/main/java/com/cxx/food/controller/UserController.java +++ b/src/main/java/com/cxx/food/controller/UserController.java @@ -36,7 +36,7 @@ public class UserController { @Operation(summary = "更新用户") @PutMapping("/{id}") public Boolean updateUser(@PathVariable("id") Long id, - @JsonView(WriteView.class) @Validated @RequestBody UserDto userDto) { + @Validated @RequestBody UserDto userDto) { return userService.updateUser(id, userDto); } } \ No newline at end of file diff --git a/src/main/java/com/cxx/food/dto/MomentDto.java b/src/main/java/com/cxx/food/dto/MomentDto.java index 53f2985..1760431 100644 --- a/src/main/java/com/cxx/food/dto/MomentDto.java +++ b/src/main/java/com/cxx/food/dto/MomentDto.java @@ -42,6 +42,10 @@ public class MomentDto { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date date; + @Schema(description = "点赞用户") + @JsonView(ReadView.class) + private List likeList; + @Schema(description = "评论内容") @JsonView(ReadView.class) private List commentList; diff --git a/src/main/java/com/cxx/food/entity/Like.java b/src/main/java/com/cxx/food/entity/MomentLike.java similarity index 84% rename from src/main/java/com/cxx/food/entity/Like.java rename to src/main/java/com/cxx/food/entity/MomentLike.java index 4987d36..a50ef8f 100644 --- a/src/main/java/com/cxx/food/entity/Like.java +++ b/src/main/java/com/cxx/food/entity/MomentLike.java @@ -8,8 +8,8 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) -@TableName("moment") -public class Like extends AbstractEntity { +@TableName("moment_like") +public class MomentLike extends AbstractEntity { @TableField("moment_id") private Long momentId; diff --git a/src/main/java/com/cxx/food/entity/User.java b/src/main/java/com/cxx/food/entity/User.java index fb6a08e..c628e1d 100644 --- a/src/main/java/com/cxx/food/entity/User.java +++ b/src/main/java/com/cxx/food/entity/User.java @@ -12,7 +12,7 @@ import java.util.List; @Data @EqualsAndHashCode(callSuper = true) -@TableName("user") +@TableName(value = "user", autoResultMap = true) public class User extends AbstractEntity { @TableField("username") private String username; diff --git a/src/main/java/com/cxx/food/mapper/LikeMapper.java b/src/main/java/com/cxx/food/mapper/MomentLikeMapper.java similarity index 57% rename from src/main/java/com/cxx/food/mapper/LikeMapper.java rename to src/main/java/com/cxx/food/mapper/MomentLikeMapper.java index 543b386..b1e8085 100644 --- a/src/main/java/com/cxx/food/mapper/LikeMapper.java +++ b/src/main/java/com/cxx/food/mapper/MomentLikeMapper.java @@ -1,9 +1,9 @@ package com.cxx.food.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.cxx.food.entity.Like; +import com.cxx.food.entity.MomentLike; import org.apache.ibatis.annotations.Mapper; @Mapper -public interface LikeMapper extends BaseMapper { +public interface MomentLikeMapper extends BaseMapper { } \ No newline at end of file diff --git a/src/main/java/com/cxx/food/service/MomentService.java b/src/main/java/com/cxx/food/service/MomentService.java index 243b743..7f36dda 100644 --- a/src/main/java/com/cxx/food/service/MomentService.java +++ b/src/main/java/com/cxx/food/service/MomentService.java @@ -15,4 +15,8 @@ public interface MomentService { List queryMoment(); Boolean addComment(Long momentId, String content); + + Boolean addLike(Long momentId); + + Boolean deleteLike(Long momentId); } diff --git a/src/main/java/com/cxx/food/service/impl/MomentServiceImpl.java b/src/main/java/com/cxx/food/service/impl/MomentServiceImpl.java index c8526ae..18aa761 100644 --- a/src/main/java/com/cxx/food/service/impl/MomentServiceImpl.java +++ b/src/main/java/com/cxx/food/service/impl/MomentServiceImpl.java @@ -1,12 +1,13 @@ package com.cxx.food.service.impl; +import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.cxx.food.dao.MomentDao; import com.cxx.food.dto.MomentDto; -import com.cxx.food.entity.Comment; -import com.cxx.food.entity.Moment; -import com.cxx.food.entity.MomentImage; +import com.cxx.food.entity.*; import com.cxx.food.mapper.CommentMapper; +import com.cxx.food.mapper.MomentLikeMapper; import com.cxx.food.mapper.MomentImageMapper; import com.cxx.food.mapper.MomentMapper; import com.cxx.food.service.MomentService; @@ -28,6 +29,9 @@ public class MomentServiceImpl implements MomentService { @Resource private CommentMapper commentMapper; + @Resource + private MomentLikeMapper momentLikeMapper; + @Resource private MomentImageMapper momentImageMapper; @@ -83,6 +87,41 @@ public class MomentServiceImpl implements MomentService { return commentMapper.insert(comment) == 1; } + @Override + public Boolean addLike(Long momentId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(MomentLike::getMomentId, momentId).eq(MomentLike::getCreateBy, StpUtil.getLoginIdAsString()); + MomentLike like = momentLikeMapper.selectOne(queryWrapper); + + if (like != null) { + if (like.getIsDelete() == 0) { + throw new CustomException("已经点赞了"); + } else { + like.setIsDelete(0); + return momentLikeMapper.updateById(like) == 1; + } + } + + MomentLike newLike = new MomentLike(); + newLike.setMomentId(momentId); + newLike.setIsDelete(0); + return momentLikeMapper.insert(newLike) == 1; + } + + @Override + public Boolean deleteLike(Long momentId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(MomentLike::getMomentId, momentId).eq(MomentLike::getCreateBy, StpUtil.getLoginIdAsString()); + MomentLike like = momentLikeMapper.selectOne(queryWrapper); + + if (like == null ) { + throw new CustomException("该朋友圈不存在"); + } + + like.setIsDelete(1); + return momentLikeMapper.updateById(like) == 1; + } + private void deleteMomentImage(Long id) { momentImageMapper.delete(Wrappers.lambdaQuery(MomentImage.class).eq(MomentImage::getMomentId, id)); } diff --git a/src/main/resources/mapper/MomentMapper.xml b/src/main/resources/mapper/MomentMapper.xml index 7ca431d..ebad015 100644 --- a/src/main/resources/mapper/MomentMapper.xml +++ b/src/main/resources/mapper/MomentMapper.xml @@ -10,6 +10,9 @@ + + @@ -23,6 +26,13 @@ + +