From 2c4504090cb58fb073e796f28a469bdb09cec7ff Mon Sep 17 00:00:00 2001 From: lanyangyang-yzx <15344130122@163.com> Date: Sat, 20 Dec 2025 11:27:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=94=B6=E8=97=8F=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PostFavoriteController.java | 34 +++++++++++ .../bao/dating/mapper/PostFavoriteMapper.java | 15 +++++ .../dating/service/PostFavoriteService.java | 10 +++ .../service/impl/PostFavoriteServiceImpl.java | 61 +++++++++++++++++++ .../bao/dating/mapper/PostFavoriteMapper.xml | 17 ++++++ 5 files changed, 137 insertions(+) create mode 100644 src/main/java/com/bao/dating/controller/PostFavoriteController.java create mode 100644 src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java create mode 100644 src/main/java/com/bao/dating/service/PostFavoriteService.java create mode 100644 src/main/java/com/bao/dating/service/impl/PostFavoriteServiceImpl.java create mode 100644 src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml diff --git a/src/main/java/com/bao/dating/controller/PostFavoriteController.java b/src/main/java/com/bao/dating/controller/PostFavoriteController.java new file mode 100644 index 0000000..fd44e56 --- /dev/null +++ b/src/main/java/com/bao/dating/controller/PostFavoriteController.java @@ -0,0 +1,34 @@ +package com.bao.dating.controller; + +import com.bao.dating.common.Result; +import com.bao.dating.common.ResultCode; +import com.bao.dating.pojo.entity.User; +import com.bao.dating.service.PostFavoriteService; +import com.bao.dating.service.PostService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/posts") +public class PostFavoriteController { + @Autowired + private PostFavoriteService postFavoriteService; + @PostMapping("/{post_id}/favorites") + public Result> addPostFavorite(@PathVariable("post_id")Long postId, User user){ + if (user == null){ + return Result.error(ResultCode.PARAM_ERROR); + } + Long userId = user.getUserId(); + return postFavoriteService.postFavorite(userId,postId); + } + @DeleteMapping("/{post_id}/favorites") + public Result deletePostFavorite(@PathVariable("post_id")Long postId, User user){ + if (user == null){ + return Result.error(ResultCode.PARAM_ERROR); + } + Long userId = user.getUserId(); + return postFavoriteService.deletePostFavorite(userId, postId); + } +} diff --git a/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java b/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java new file mode 100644 index 0000000..a0aa443 --- /dev/null +++ b/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java @@ -0,0 +1,15 @@ +package com.bao.dating.mapper; + +import com.bao.dating.pojo.entity.PostFavorite; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface PostFavoriteMapper { + //查询当前已收藏所有用户 + List selectUserIDByPostID(@Param("postId") Long postId); + int addPostFavorite(PostFavorite postFavorite); + int deletePostFavorite(@Param("postId") Long postId); +} diff --git a/src/main/java/com/bao/dating/service/PostFavoriteService.java b/src/main/java/com/bao/dating/service/PostFavoriteService.java new file mode 100644 index 0000000..32ded85 --- /dev/null +++ b/src/main/java/com/bao/dating/service/PostFavoriteService.java @@ -0,0 +1,10 @@ +package com.bao.dating.service; + +import com.bao.dating.common.Result; + +import java.util.Map; + +public interface PostFavoriteService { + Result> postFavorite(Long userid,Long postId); + Result deletePostFavorite(Long userid,Long postId); +} diff --git a/src/main/java/com/bao/dating/service/impl/PostFavoriteServiceImpl.java b/src/main/java/com/bao/dating/service/impl/PostFavoriteServiceImpl.java new file mode 100644 index 0000000..9424f11 --- /dev/null +++ b/src/main/java/com/bao/dating/service/impl/PostFavoriteServiceImpl.java @@ -0,0 +1,61 @@ +package com.bao.dating.service.impl; + +import com.bao.dating.common.Result; +import com.bao.dating.common.ResultCode; +import com.bao.dating.mapper.PostFavoriteMapper; +import com.bao.dating.mapper.PostMapper; +import com.bao.dating.pojo.entity.PostFavorite; +import com.bao.dating.service.PostFavoriteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class PostFavoriteServiceImpl implements PostFavoriteService { + @Autowired + private PostFavoriteMapper postFavoriteMapper; + @Autowired + private PostMapper postMapper; + @Override + @Transactional + public Result> postFavorite(Long userid, Long postId) { + Long userId = postMapper.selectUserIdByPostId(postId); + if (userid.equals(userId)){ + return Result.error(ResultCode.FORBIDDEN,"无法收藏自己发布动态"); + } + List allUserId = postFavoriteMapper.selectUserIDByPostID(postId); + if (allUserId.contains(userid)){ + return Result.error(ResultCode.FORBIDDEN,"已收藏"); + } + PostFavorite postFavorite = new PostFavorite(); + postFavorite.setPostId(postId); + postFavorite.setUserId(userid); + postFavorite.setCreatedAt(LocalDateTime.now()); + postFavoriteMapper.addPostFavorite(postFavorite); + postMapper.increaseFavoriteCount(postId); + Long count = (long) postMapper.selectFavoriteCount(postId); + Map data = new HashMap<>(); + data.put("favorite_id",postFavorite.getFavoriteId()); + data.put("post_id",postId); + data.put("user_id",userid); + data.put("current_favorites_count",count); + return Result.success(ResultCode.SUCCESS_REVIEW,"收藏成功",data); + } + + @Override + @Transactional + public Result deletePostFavorite(Long userid, Long postId) { + List allUserId = postFavoriteMapper.selectUserIDByPostID(postId); + if (! allUserId.contains(userid)){ + return Result.error(ResultCode.FORBIDDEN,"请先收藏"); + } + postFavoriteMapper.deletePostFavorite(postId); + postMapper.decreaseFavoriteCount(postId); + return null; + } +} diff --git a/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml b/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml new file mode 100644 index 0000000..41b5195 --- /dev/null +++ b/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml @@ -0,0 +1,17 @@ + + + + + + insert into post_favorite values (null,#{userId},#{postId},#{createdAt}) + + + + delete from post_favorite where post_id = #{postId} + + + + \ No newline at end of file