diff --git a/src/main/java/com/bao/dating/controller/PostController.java b/src/main/java/com/bao/dating/controller/PostController.java index 5c8ce50..b4fb20b 100644 --- a/src/main/java/com/bao/dating/controller/PostController.java +++ b/src/main/java/com/bao/dating/controller/PostController.java @@ -61,7 +61,7 @@ public class PostController { @PostMapping("/deletePost") public Result deleteById(@RequestBody List postIds){ int deletedCount = postService.deletePostById(postIds); - return Result.success(ResultCode.SUCCESS_DELETE, deletedCount > 0 ? "成功删除" : "删除失败,该动态不存在", null); + return Result.success(ResultCode.SUCCESS_DELETE, "成功删除" + deletedCount + "条动态", null); } /** diff --git a/src/main/java/com/bao/dating/mapper/CommentsMapper.java b/src/main/java/com/bao/dating/mapper/CommentsMapper.java index 1de2c6d..78ca350 100644 --- a/src/main/java/com/bao/dating/mapper/CommentsMapper.java +++ b/src/main/java/com/bao/dating/mapper/CommentsMapper.java @@ -18,4 +18,11 @@ public interface CommentsMapper { // 根据动态ID查询评论列表 @Select("SELECT * FROM comments WHERE post_id = #{post_id} ORDER BY created_at DESC") List getCommentsByPostId(@Param("post_id") Long post_id); + + /** + * 根据动态ID批量删除评论 + * @param postIds + * @return + */ + int deleteCommentsByPostIds(@Param("postIds") List postIds); } diff --git a/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java b/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java index a0aa443..88f05e9 100644 --- a/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java +++ b/src/main/java/com/bao/dating/mapper/PostFavoriteMapper.java @@ -12,4 +12,12 @@ public interface PostFavoriteMapper { List selectUserIDByPostID(@Param("postId") Long postId); int addPostFavorite(PostFavorite postFavorite); int deletePostFavorite(@Param("postId") Long postId); + + /** + * 批量删除收藏 + * @param postIds + * @return + */ + int deleteFavoritesByPostIds(@Param("postIds") List postIds); + } diff --git a/src/main/java/com/bao/dating/mapper/PostLikeMapper.java b/src/main/java/com/bao/dating/mapper/PostLikeMapper.java index 41783e4..50e28be 100644 --- a/src/main/java/com/bao/dating/mapper/PostLikeMapper.java +++ b/src/main/java/com/bao/dating/mapper/PostLikeMapper.java @@ -4,6 +4,8 @@ import com.bao.dating.pojo.entity.PostLike; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + @Mapper public interface PostLikeMapper { /** @@ -31,4 +33,12 @@ public interface PostLikeMapper { * @return */ int deleteByPostIdAndUserId(@Param("postId") Long postId, @Param("userId") Long userId); + + /** + * 批量删除点赞记录 + * + * @param postIds + * @return + */ + int deleteLikesByPostIds(@Param("postIds") List postIds); } diff --git a/src/main/java/com/bao/dating/mapper/PostMapper.java b/src/main/java/com/bao/dating/mapper/PostMapper.java index 8380a2f..5a3ac72 100644 --- a/src/main/java/com/bao/dating/mapper/PostMapper.java +++ b/src/main/java/com/bao/dating/mapper/PostMapper.java @@ -21,11 +21,11 @@ public interface PostMapper { void insert(Post post); /** - * 根据ID删除动态 + * 根据ID修改动态状态 * * @param postIds 动态ID */ - int deletePostByIds(List postIds); + int updatePublicById(@Param("postIds") List postIds, @Param("userId") Long userId); /** * 根据ID查询动态 diff --git a/src/main/java/com/bao/dating/service/PostService.java b/src/main/java/com/bao/dating/service/PostService.java index 627fed6..b598daa 100644 --- a/src/main/java/com/bao/dating/service/PostService.java +++ b/src/main/java/com/bao/dating/service/PostService.java @@ -27,7 +27,7 @@ public interface PostService { Post createPost(PostRequestDTO postRequestDTO); /** - * 批量删除动态 + * 批量删除动态(将动态状态改为已删除) * @param postIds 动态ID * @return 删除的动态对象 */ diff --git a/src/main/java/com/bao/dating/service/impl/PostServiceImpl.java b/src/main/java/com/bao/dating/service/impl/PostServiceImpl.java index 5a430cd..2b47c9d 100644 --- a/src/main/java/com/bao/dating/service/impl/PostServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/PostServiceImpl.java @@ -4,17 +4,22 @@ import com.bao.dating.common.aliyun.GreenImageScan; import com.bao.dating.common.aliyun.GreenTextScan; import com.bao.dating.common.result.GreenAuditResult; import com.bao.dating.context.UserContext; +import com.bao.dating.mapper.CommentsMapper; +import com.bao.dating.mapper.PostFavoriteMapper; +import com.bao.dating.mapper.PostLikeMapper; import com.bao.dating.mapper.PostMapper; import com.bao.dating.pojo.dto.PostRequestDTO; import com.bao.dating.pojo.entity.Post; import com.bao.dating.pojo.vo.PostEditVO; import com.bao.dating.service.PostService; import com.bao.dating.common.aliyun.AliOssUtil; +import com.bao.dating.service.UserService; import com.bao.dating.util.FileUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -43,6 +48,15 @@ public class PostServiceImpl implements PostService { @Autowired private PostMapper postMapper; + @Autowired + private PostLikeMapper postLikeMapper; + + @Autowired + private PostFavoriteMapper postFavoriteMapper; + + @Autowired + private CommentsMapper commentsMapper; + /** * 上传媒体文件 * @param files 媒体文件数组 @@ -177,7 +191,7 @@ public class PostServiceImpl implements PostService { } /** - * 批量删除动态 + * 批量删除动态(将动态状态改为已删除) * * @param postIds 动态ID * @return 删除的动态对象 @@ -188,19 +202,21 @@ public class PostServiceImpl implements PostService { // 判断用户权限 Long userId = UserContext.getUserId(); - // 遍历所有要删除的帖子ID,验证权限 - for (Long postId : postIds) { - Post post = postMapper.selectById(postId); - if (post == null) { - throw new RuntimeException("动态不存在"); - } - // 验证用户权限 - if (post.getUserId() == null || !post.getUserId().equals(userId)) { - throw new RuntimeException("无权限删除此动态"); - } + if (CollectionUtils.isEmpty(postIds)) { + return 0; } - // 批量删除动态 - return postMapper.deletePostByIds(postIds); + int affected = postMapper.updatePublicById(postIds, userId); + + if (affected == 0) { + throw new RuntimeException("未删除任何动态,可能无权限或动态不存在"); + } + + // 删除动态下的评论、点赞、收藏 + commentsMapper.deleteCommentsByPostIds(postIds); + postLikeMapper.deleteLikesByPostIds(postIds); + postFavoriteMapper.deleteFavoritesByPostIds(postIds); + + return affected; } /** diff --git a/src/main/resources/com/bao/dating/mapper/CommentsMapper.xml b/src/main/resources/com/bao/dating/mapper/CommentsMapper.xml new file mode 100644 index 0000000..55f46c5 --- /dev/null +++ b/src/main/resources/com/bao/dating/mapper/CommentsMapper.xml @@ -0,0 +1,15 @@ + + + + + + + DELETE FROM comments + WHERE post_id IN + + #{postId} + + + + \ No newline at end of file diff --git a/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml b/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml index 41b5195..9467b9c 100644 --- a/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/PostFavoriteMapper.xml @@ -14,4 +14,14 @@ + + + + DELETE FROM post_favorite + WHERE post_id IN + + #{postId} + + + \ No newline at end of file diff --git a/src/main/resources/com/bao/dating/mapper/PostLikeMapper.xml b/src/main/resources/com/bao/dating/mapper/PostLikeMapper.xml index fe82536..9e26cd2 100644 --- a/src/main/resources/com/bao/dating/mapper/PostLikeMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/PostLikeMapper.xml @@ -14,4 +14,14 @@ delete from dating.post_like where post_id = #{postId} and user_id = #{userId} + + + + DELETE FROM post_like + WHERE post_id IN + + #{postId} + + + \ No newline at end of file diff --git a/src/main/resources/com/bao/dating/mapper/PostMapper.xml b/src/main/resources/com/bao/dating/mapper/PostMapper.xml index b1924e4..d3c96bd 100644 --- a/src/main/resources/com/bao/dating/mapper/PostMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/PostMapper.xml @@ -28,25 +28,19 @@ #{isPublic}, 0, 0, #{createdAt}, #{updatedAt}) - - - DELETE FROM post WHERE post_id IN + + + UPDATE post + + is_public = 3, + updated_at = NOW() + + WHERE post_id IN #{postId} - - - - DELETE FROM post_favorite WHERE post_id = #{postId} - - - - DELETE FROM post_like WHERE post_id = #{postId} - - - - DELETE FROM comments WHERE post_id = #{postId} - + AND user_id = #{userId} +