Browse Source

feat(family): 新增 POST /api/family/member/rename-family 接口

Agnes Agent 1 week ago
parent
commit
0846c7a9e6

+ 18 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyMembersController.java

@@ -215,6 +215,24 @@ public Result<FamilyMemberVO> updateMember(@RequestBody Map<String, Object> body
  }
  }
 }
 }
 
 
+@Operation(summary = "修改家庭名称(仅家庭管理员)")
+@PostMapping("/rename-family")
+public Result<String> renameFamily(@RequestBody Map<String, Object> body,
+ @RequestAttribute("userId") Long userId) {
+ if (userId == null || userId <= 0) {
+  return Result.error(401, "请先登录");
+ }
+ String name = body != null && body.get("name") != null ? body.get("name").toString() : null;
+ try {
+  String newName = familyMemberService.renameFamily(userId, name);
+  return Result.success(newName);
+ } catch (IllegalArgumentException e) {
+  return Result.error(e.getMessage());
+ } catch (RuntimeException e) {
+  return Result.error(e.getMessage());
+ }
+}
+
 @Operation(summary = "检查成员是否可编辑")
 @Operation(summary = "检查成员是否可编辑")
 @PostMapping("/editable")
 @PostMapping("/editable")
 public Result<Boolean> checkEditable(@RequestBody Map<String, Long> body,
 public Result<Boolean> checkEditable(@RequestBody Map<String, Long> body,

+ 69 - 0
cfc-backend/src/test/java/com/etotem/cfc/controller/family/FamilyMembersControllerRenameFamilyTest.java

@@ -0,0 +1,69 @@
+package com.etotem.cfc.controller.family;
+
+import com.etotem.cfc.mapper.UserMapper;
+import com.etotem.cfc.service.FamilyMemberService;
+import com.etotem.cfc.service.UnlockGateService;
+import com.etotem.cfc.service.UserService;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.http.MediaType;
+import org.springframework.test.util.ReflectionTestUtils;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+public class FamilyMembersControllerRenameFamilyTest {
+
+    @Mock private FamilyMemberService familyMemberService;
+    @Mock private UserService userService;
+    @Mock private UnlockGateService unlockGateService;
+    @Mock private UserMapper userMapper;
+
+    private MockMvc mockMvc;
+
+    @BeforeEach
+    public void setUp() {
+        MockitoAnnotations.openMocks(this);
+        FamilyMembersController controller = new FamilyMembersController();
+        ReflectionTestUtils.setField(controller, "familyMemberService", familyMemberService);
+        ReflectionTestUtils.setField(controller, "unlockGateService", unlockGateService);
+        ReflectionTestUtils.setField(controller, "userService", userService);
+        ReflectionTestUtils.setField(controller, "userMapper", userMapper);
+        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
+    }
+
+    @Test
+    public void renameFamily_success() throws Exception {
+        when(familyMemberService.renameFamily(1L, "新家庭")).thenReturn("新家庭");
+
+        mockMvc.perform(post("/api/family/member/rename-family")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content("{\"name\":\"新家庭\"}")
+                        .requestAttr("userId", 1L))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.code").value(200))
+                .andExpect(jsonPath("$.data").value("新家庭"));
+
+        verify(familyMemberService).renameFamily(1L, "新家庭");
+    }
+
+    @Test
+    public void renameFamily_notAdmin_returnsError() throws Exception {
+        when(familyMemberService.renameFamily(1L, "新家庭"))
+                .thenThrow(new IllegalArgumentException("仅家庭管理员可修改家庭名称"));
+
+        mockMvc.perform(post("/api/family/member/rename-family")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content("{\"name\":\"新家庭\"}")
+                        .requestAttr("userId", 1L))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.code").value(500))
+                .andExpect(jsonPath("$.message").value("仅家庭管理员可修改家庭名称"));
+    }
+}