feat:新增点赞接口

This commit is contained in:
2025-06-30 20:03:00 +08:00
parent 0ac3898a56
commit ec5636e6d2
9 changed files with 78 additions and 9 deletions

View File

@@ -49,5 +49,17 @@ public class MomentController {
@RequestParam String content) { @RequestParam String content) {
return momentService.addComment(id, 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);
}
} }

View File

@@ -36,7 +36,7 @@ public class UserController {
@Operation(summary = "更新用户") @Operation(summary = "更新用户")
@PutMapping("/{id}") @PutMapping("/{id}")
public Boolean updateUser(@PathVariable("id") Long id, public Boolean updateUser(@PathVariable("id") Long id,
@JsonView(WriteView.class) @Validated @RequestBody UserDto userDto) { @Validated @RequestBody UserDto userDto) {
return userService.updateUser(id, userDto); return userService.updateUser(id, userDto);
} }
} }

View File

@@ -42,6 +42,10 @@ public class MomentDto {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date date; private Date date;
@Schema(description = "点赞用户")
@JsonView(ReadView.class)
private List<Long> likeList;
@Schema(description = "评论内容") @Schema(description = "评论内容")
@JsonView(ReadView.class) @JsonView(ReadView.class)
private List<CommentDto> commentList; private List<CommentDto> commentList;

View File

@@ -8,8 +8,8 @@ import lombok.EqualsAndHashCode;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("moment") @TableName("moment_like")
public class Like extends AbstractEntity { public class MomentLike extends AbstractEntity {
@TableField("moment_id") @TableField("moment_id")
private Long momentId; private Long momentId;

View File

@@ -12,7 +12,7 @@ import java.util.List;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@TableName("user") @TableName(value = "user", autoResultMap = true)
public class User extends AbstractEntity { public class User extends AbstractEntity {
@TableField("username") @TableField("username")
private String username; private String username;

View File

@@ -1,9 +1,9 @@
package com.cxx.food.mapper; package com.cxx.food.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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; import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface LikeMapper extends BaseMapper<Like> { public interface MomentLikeMapper extends BaseMapper<MomentLike> {
} }

View File

@@ -15,4 +15,8 @@ public interface MomentService {
List<MomentDto> queryMoment(); List<MomentDto> queryMoment();
Boolean addComment(Long momentId, String content); Boolean addComment(Long momentId, String content);
Boolean addLike(Long momentId);
Boolean deleteLike(Long momentId);
} }

View File

@@ -1,12 +1,13 @@
package com.cxx.food.service.impl; 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.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cxx.food.dao.MomentDao; import com.cxx.food.dao.MomentDao;
import com.cxx.food.dto.MomentDto; import com.cxx.food.dto.MomentDto;
import com.cxx.food.entity.Comment; import com.cxx.food.entity.*;
import com.cxx.food.entity.Moment;
import com.cxx.food.entity.MomentImage;
import com.cxx.food.mapper.CommentMapper; import com.cxx.food.mapper.CommentMapper;
import com.cxx.food.mapper.MomentLikeMapper;
import com.cxx.food.mapper.MomentImageMapper; import com.cxx.food.mapper.MomentImageMapper;
import com.cxx.food.mapper.MomentMapper; import com.cxx.food.mapper.MomentMapper;
import com.cxx.food.service.MomentService; import com.cxx.food.service.MomentService;
@@ -28,6 +29,9 @@ public class MomentServiceImpl implements MomentService {
@Resource @Resource
private CommentMapper commentMapper; private CommentMapper commentMapper;
@Resource
private MomentLikeMapper momentLikeMapper;
@Resource @Resource
private MomentImageMapper momentImageMapper; private MomentImageMapper momentImageMapper;
@@ -83,6 +87,41 @@ public class MomentServiceImpl implements MomentService {
return commentMapper.insert(comment) == 1; return commentMapper.insert(comment) == 1;
} }
@Override
public Boolean addLike(Long momentId) {
LambdaQueryWrapper<MomentLike> 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<MomentLike> 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) { private void deleteMomentImage(Long id) {
momentImageMapper.delete(Wrappers.lambdaQuery(MomentImage.class).eq(MomentImage::getMomentId, id)); momentImageMapper.delete(Wrappers.lambdaQuery(MomentImage.class).eq(MomentImage::getMomentId, id));
} }

View File

@@ -10,6 +10,9 @@
<result property="date" column="date"/> <result property="date" column="date"/>
<collection property="imageList" ofType="java.lang.String" <collection property="imageList" ofType="java.lang.String"
column="id" select="queryMomentImage"/> column="id" select="queryMomentImage"/>
<collection property="likeList" ofType="long"
column="id" select="queryLike">
</collection>
<collection property="commentList" ofType="com.cxx.food.dto.CommentDto" <collection property="commentList" ofType="com.cxx.food.dto.CommentDto"
column="id" select="queryComment"> column="id" select="queryComment">
</collection> </collection>
@@ -23,6 +26,13 @@
<result property="date" column="date"/> <result property="date" column="date"/>
</resultMap> </resultMap>
<select id="queryLike" resultType="long">
SELECT a.create_by AS id
FROM moment_like AS a
WHERE moment_id = #{id}
AND a.is_delete = 0
</select>
<select id="queryComment" resultMap="commentResultMap"> <select id="queryComment" resultMap="commentResultMap">
SELECT a.id AS id, SELECT a.id AS id,
b.username AS username, b.username AS username,