From 29012a940872360dadc2087694457a1a58b3c5a9 Mon Sep 17 00:00:00 2001 From: zwq <2907551361@qq.com> Date: Mon, 8 Dec 2025 18:13:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AF=EF=BC=9AFriendRequestControl?= =?UTF-8?q?ler.save=20=E5=A2=9E=E5=8A=A0=20try/catch=20=E5=8F=8B=E5=A5=BD?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=EF=BC=9BFriendRequestServi?= =?UTF-8?q?ceImpl.save=20=E8=A1=A5=E5=85=85=E6=A0=A1=E9=AA=8C=E5=B9=B6?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E2=80=9C=E5=B7=B2=E7=BB=8F=E6=98=AF=E5=A5=BD?= =?UTF-8?q?=E5=8F=8B=EF=BC=8C=E6=97=A0=E9=9C=80=E6=B7=BB=E5=8A=A0/?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=B7=B1=E2=80=9D?= =?UTF-8?q?=E3=80=82=20=E5=89=8D=E7=AB=AF=EF=BC=9A=E5=A5=BD=E5=8F=8B?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=8F=91=E9=80=81=E5=A4=84=20(FriendsPageWit?= =?UTF-8?q?hRealAPI.tsx,=20FriendsPageWithAPI.tsx)=20=E6=8D=95=E8=8E=B7?= =?UTF-8?q?=E5=B9=B6=E5=B1=95=E7=A4=BA=E5=90=8E=E7=AB=AF=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=9A=84=E5=85=B7=E4=BD=93=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=8C=E4=BE=BF=E4=BA=8E=E7=94=A8=E6=88=B7=E7=9C=8B=E5=88=B0?= =?UTF-8?q?=E2=80=9C=E5=B7=B2=E7=BB=8F=E6=98=AF=E5=A5=BD=E5=8F=8B=EF=BC=8C?= =?UTF-8?q?=E6=97=A0=E9=9C=80=E6=B7=BB=E5=8A=A0=E2=80=9D=EF=BC=9B=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=B0=83=E8=AF=95=E6=97=A5=E5=BF=97=E4=BE=BF=E4=BA=8E?= =?UTF-8?q?=E6=8E=92=E6=9F=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/FriendsPageWithAPI.tsx | 4 ++- .../components/FriendsPageWithRealAPI.tsx | 10 +++++- .../controller/FriendRequestController.java | 33 +++++++++++++------ .../impl/FriendRelationServiceImpl.java | 31 +++++++++++++++-- .../impl/FriendRequestServiceImpl.java | 14 ++++++++ 5 files changed, 77 insertions(+), 15 deletions(-) diff --git a/src/test/frontend/components/FriendsPageWithAPI.tsx b/src/test/frontend/components/FriendsPageWithAPI.tsx index 3bf494bf..b337235d 100644 --- a/src/test/frontend/components/FriendsPageWithAPI.tsx +++ b/src/test/frontend/components/FriendsPageWithAPI.tsx @@ -301,7 +301,9 @@ export const FriendsPageWithAPI: React.FC = ({ setEmailSearch(''); } catch (error) { console.error('发送好友请求失败:', error); - alert('发送失败,请稍后重试'); + // 显示后端返回的具体错误消息 + const errorMessage = error instanceof Error ? error.message : '发送失败,请稍后重试'; + alert(errorMessage); } }; diff --git a/src/test/frontend/components/FriendsPageWithRealAPI.tsx b/src/test/frontend/components/FriendsPageWithRealAPI.tsx index 34a67032..e97134bc 100644 --- a/src/test/frontend/components/FriendsPageWithRealAPI.tsx +++ b/src/test/frontend/components/FriendsPageWithRealAPI.tsx @@ -389,7 +389,15 @@ export const FriendsPageWithRealAPI: React.FC = ({ setSearchResult(null); } catch (error) { console.error('发送好友请求失败:', error); - alert('发送好友请求失败'); + console.log('错误类型:', typeof error); + console.log('是否为 Error 实例:', error instanceof Error); + if (error instanceof Error) { + console.log('错误消息:', error.message); + } + // 显示后端返回的具体错误消息 + const errorMessage = error instanceof Error ? error.message : '发送好友请求失败'; + console.log('最终显示的错误消息:', errorMessage); + alert(errorMessage); } }; diff --git a/src/test/src/main/java/com/example/springboot_demo/controller/FriendRequestController.java b/src/test/src/main/java/com/example/springboot_demo/controller/FriendRequestController.java index 5ca38743..a422bb12 100644 --- a/src/test/src/main/java/com/example/springboot_demo/controller/FriendRequestController.java +++ b/src/test/src/main/java/com/example/springboot_demo/controller/FriendRequestController.java @@ -1,13 +1,21 @@ package com.example.springboot_demo.controller; +import java.time.LocalDateTime; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import com.example.springboot_demo.common.Result; import com.example.springboot_demo.entity.mysql.FriendRequest; import com.example.springboot_demo.service.FriendRequestService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.time.LocalDateTime; -import java.util.List; @RestController @RequestMapping("/friend-request") @@ -33,12 +41,17 @@ public class FriendRequestController { @PostMapping public Result save(@RequestBody FriendRequest friendRequest) { - friendRequest.setCreateTime(LocalDateTime.now()); - if (friendRequest.getStatus() == null) { - friendRequest.setStatus(0); + try { + friendRequest.setCreateTime(LocalDateTime.now()); + if (friendRequest.getStatus() == null) { + friendRequest.setStatus(0); + } + friendRequestService.save(friendRequest); + return Result.success(friendRequest); + } catch (RuntimeException e) { + System.out.println("发送好友请求失败: " + e.getMessage()); + return Result.error(e.getMessage()); } - friendRequestService.save(friendRequest); - return Result.success(friendRequest); } @PutMapping diff --git a/src/test/src/main/java/com/example/springboot_demo/service/impl/FriendRelationServiceImpl.java b/src/test/src/main/java/com/example/springboot_demo/service/impl/FriendRelationServiceImpl.java index 3613d4cc..e28fc536 100644 --- a/src/test/src/main/java/com/example/springboot_demo/service/impl/FriendRelationServiceImpl.java +++ b/src/test/src/main/java/com/example/springboot_demo/service/impl/FriendRelationServiceImpl.java @@ -2,7 +2,9 @@ package com.example.springboot_demo.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.example.springboot_demo.entity.mysql.FriendRelation; +import com.example.springboot_demo.entity.mysql.FriendRequest; import com.example.springboot_demo.mapper.FriendRelationMapper; +import com.example.springboot_demo.mapper.FriendRequestMapper; import com.example.springboot_demo.service.FriendRelationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -15,6 +17,9 @@ public class FriendRelationServiceImpl implements FriendRelationService { @Autowired private FriendRelationMapper friendRelationMapper; + @Autowired + private FriendRequestMapper friendRequestMapper; + @Override public List listByUserId(Long userId) { QueryWrapper wrapper = new QueryWrapper<>(); @@ -46,9 +51,29 @@ public class FriendRelationServiceImpl implements FriendRelationService { @Override public boolean removeByUserIdAndFriendId(Long userId, Long friendId) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("user_id", userId).eq("friend_id", friendId); - return friendRelationMapper.delete(wrapper) > 0; + // 删除双向好友关系 + // 1. 删除 userId -> friendId + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("user_id", userId).eq("friend_id", friendId); + friendRelationMapper.delete(wrapper1); + + // 2. 删除 friendId -> userId + QueryWrapper wrapper2 = new QueryWrapper<>(); + wrapper2.eq("user_id", friendId).eq("friend_id", userId); + friendRelationMapper.delete(wrapper2); + + // 3. 删除所有相关的好友请求记录(双向) + // 删除 userId -> friendId 的请求 + QueryWrapper requestWrapper1 = new QueryWrapper<>(); + requestWrapper1.eq("applicant_id", userId).eq("recipient_id", friendId); + friendRequestMapper.delete(requestWrapper1); + + // 删除 friendId -> userId 的请求 + QueryWrapper requestWrapper2 = new QueryWrapper<>(); + requestWrapper2.eq("applicant_id", friendId).eq("recipient_id", userId); + friendRequestMapper.delete(requestWrapper2); + + return true; } } diff --git a/src/test/src/main/java/com/example/springboot_demo/service/impl/FriendRequestServiceImpl.java b/src/test/src/main/java/com/example/springboot_demo/service/impl/FriendRequestServiceImpl.java index e298e2d3..38b7e818 100644 --- a/src/test/src/main/java/com/example/springboot_demo/service/impl/FriendRequestServiceImpl.java +++ b/src/test/src/main/java/com/example/springboot_demo/service/impl/FriendRequestServiceImpl.java @@ -49,6 +49,20 @@ public class FriendRequestServiceImpl implements FriendRequestService { @Override public boolean save(FriendRequest friendRequest) { + // 1. 检查是否给自己发送好友请求 + if (friendRequest.getApplicantId().equals(friendRequest.getRecipientId())) { + throw new RuntimeException("不能添加自己为好友"); + } + + // 2. 检查是否已经是好友关系 + FriendRelation existingRelation = friendRelationService.getByUserIdAndFriendId( + friendRequest.getApplicantId(), + friendRequest.getRecipientId() + ); + if (existingRelation != null) { + throw new RuntimeException("已经是好友,无需添加"); + } + return friendRequestMapper.insert(friendRequest) > 0; } -- 2.34.1