Преглед изворни кода

feat(family): 管理端家庭信息查看接口 overview/tasks

Xiaogang Liao пре 1 недеља
родитељ
комит
8e7b44d312

+ 42 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminFamilyOverviewController.java

@@ -0,0 +1,42 @@
+package com.etotem.cfc.controller.admin;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.dto.FamilyOverviewDTO;
+import com.etotem.cfc.dto.TaskItemVO;
+import com.etotem.cfc.service.FamilyAdminOverviewService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import java.util.Map;
+
+@Tag(name = "管理端-家庭信息查看", description = "家庭报告/方案/任务概览")
+@RestController
+@RequestMapping("/api/admin")
+public class AdminFamilyOverviewController {
+    @Resource private FamilyAdminOverviewService service;
+
+    @Operation(summary = "家庭信息概览")
+    @PostMapping("/families/{id}/overview")
+    public Result<FamilyOverviewDTO> getOverview(@PathVariable Long id,
+                                                 @RequestAttribute("role") String role) {
+        if (!"admin".equals(role)) return Result.error("无权限");
+        try {
+            return Result.success(service.buildOverview(id));
+        } catch (RuntimeException e) {
+            return Result.error(e.getMessage());
+        }
+    }
+
+    @Operation(summary = "家庭任务分页")
+    @PostMapping("/families/{id}/tasks")
+    public Result<Page<TaskItemVO>> getTasks(@PathVariable Long id,
+                                             @RequestBody(required = false) Map<String, Object> params,
+                                             @RequestAttribute("role") String role) {
+        if (!"admin".equals(role)) return Result.error("无权限");
+        long page = params != null && params.get("page") != null ? ((Number) params.get("page")).longValue() : 1L;
+        long size = params != null && params.get("size") != null ? ((Number) params.get("size")).longValue() : 20L;
+        return Result.success(service.pageTasks(id, page, size));
+    }
+}

+ 45 - 0
cfc-backend/src/test/java/com/etotem/cfc/integration/controller/AdminFamilyOverviewControllerTest.java

@@ -0,0 +1,45 @@
+package com.etotem.cfc.integration.controller;
+
+import com.etotem.cfc.common.Result;
+import com.etotem.cfc.controller.admin.AdminFamilyOverviewController;
+import com.etotem.cfc.dto.FamilyOverviewDTO;
+import com.etotem.cfc.service.FamilyAdminOverviewService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import javax.annotation.Resource;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.when;
+
+/**
+ * 管理端家庭信息查看接口测试。
+ * 注意:@SpringBootTest 需显式指定 datasource URL(生产库 192.168.16.251 不可达),
+ * 使用本机 MariaDB(127.0.0.1:3306/zxyj)——与 Task 2/4 预批准覆盖一致。
+ */
+@SpringBootTest(properties = {
+    "spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zxyj?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true",
+    "spring.datasource.username=zxyj",
+    "spring.datasource.password=zxyj@123"
+})
+public class AdminFamilyOverviewControllerTest {
+    @Resource private AdminFamilyOverviewController ctrl;
+    @MockBean private FamilyAdminOverviewService svc;
+
+    @Test void overview_非admin拒绝() {
+        Result<FamilyOverviewDTO> r = ctrl.getOverview(7L, "parent");
+        assertTrue(r.getCode() != 200);
+    }
+    @Test void overview_成功() {
+        when(svc.buildOverview(7L)).thenReturn(new FamilyOverviewDTO());
+        Result<FamilyOverviewDTO> r = ctrl.getOverview(7L, "admin");
+        assertEquals(200, r.getCode());
+        assertNotNull(r.getData());
+    }
+    @Test void tasks_分页() {
+        when(svc.pageTasks(eq(7L), anyLong(), anyLong())).thenReturn(new Page<>());
+        Result<Page<com.etotem.cfc.dto.TaskItemVO>> r = ctrl.getTasks(7L, null, "admin");
+        assertEquals(200, r.getCode());
+    }
+}