From bb041e74d0891a24c6f41673a2d99de22c10588a Mon Sep 17 00:00:00 2001 From: zichun Date: Wed, 29 Apr 2026 17:50:12 +0800 Subject: [PATCH] feat(mod): PUT /api/mod/modules/{id} controller REQ-MOD-002 --- backend/src/main/java/com/xly/erp/module/mod/controller/ModuleController.java | 10 ++++++++++ backend/src/test/java/com/xly/erp/module/mod/controller/ModuleControllerIT.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 0 deletions(-) diff --git a/backend/src/main/java/com/xly/erp/module/mod/controller/ModuleController.java b/backend/src/main/java/com/xly/erp/module/mod/controller/ModuleController.java index 4c073fa..2115328 100644 --- a/backend/src/main/java/com/xly/erp/module/mod/controller/ModuleController.java +++ b/backend/src/main/java/com/xly/erp/module/mod/controller/ModuleController.java @@ -2,9 +2,12 @@ package com.xly.erp.module.mod.controller; import com.xly.erp.common.response.Result; import com.xly.erp.module.mod.dto.CreateModuleDTO; +import com.xly.erp.module.mod.dto.UpdateModuleDTO; import com.xly.erp.module.mod.service.ModuleService; import jakarta.validation.Valid; +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; @@ -26,4 +29,11 @@ public class ModuleController { Integer id = moduleService.create(dto); return Result.ok(Map.of("iIncrement", id)); } + + @PutMapping("/modules/{id}") + public Result> update(@PathVariable Integer id, + @Valid @RequestBody UpdateModuleDTO dto) { + Integer updated = moduleService.update(id, dto); + return Result.ok(Map.of("iIncrement", updated)); + } } diff --git a/backend/src/test/java/com/xly/erp/module/mod/controller/ModuleControllerIT.java b/backend/src/test/java/com/xly/erp/module/mod/controller/ModuleControllerIT.java index e43ba64..b4f94d1 100644 --- a/backend/src/test/java/com/xly/erp/module/mod/controller/ModuleControllerIT.java +++ b/backend/src/test/java/com/xly/erp/module/mod/controller/ModuleControllerIT.java @@ -167,6 +167,56 @@ class ModuleControllerIT { assertThat(jb.get("code").asInt()).isEqualTo(20001); } + @Test + void putValidBody_with_jwt_returns200_andUpdatesEditableFields() throws Exception { + Integer id = insertOriginal("sp_test_put_orig", "原名", "ORIG_USER"); + String token = testJwtHelper.signFor("ADMIN001"); + HttpHeaders headers = jsonHeaders(); + headers.set("Authorization", "Bearer " + token); + Map body = updateBody(); + body.put("sModuleNameZh", "新名"); + body.put("sDisplayType", "前端业务"); + + ResponseEntity resp = rest.exchange( + idUrl(id), HttpMethod.PUT, new HttpEntity<>(body, headers), String.class); + + assertThat(resp.getStatusCode().value()).isEqualTo(200); + JsonNode jb = objectMapper.readTree(resp.getBody()); + assertThat(jb.get("code").asInt()).isZero(); + assertThat(jb.get("data").get("iIncrement").asInt()).isEqualTo(id); + + Map row = jdbcTemplate.queryForMap( + "SELECT sModuleNameZh, sDisplayType, sProcedureName, sCreatedBy FROM tModule WHERE iIncrement = ?", id); + assertThat(row.get("sModuleNameZh")).isEqualTo("新名"); + assertThat(row.get("sDisplayType")).isEqualTo("前端业务"); + assertThat(row.get("sProcedureName")).isEqualTo("sp_test_put_orig"); + assertThat(row.get("sCreatedBy")).isEqualTo("ORIG_USER"); + } + + private Integer insertOriginal(String procedureName, String nameZh, String createdBy) { + jdbcTemplate.update( + "INSERT INTO tModule (sBrandsId, sSubsidiaryId, tCreateDate, sDisplayType, sProcedureName, " + + "sModuleType, sManageDeptEn, bShowPermission, sModuleNameZh, iSortOrder, sCreatedBy, bDeleted) " + + "VALUES ('XLY','XLY', NOW(), '手机端', ?, '业务模块', 'IT', 0, ?, 0, ?, 0)", + procedureName, nameZh, createdBy); + return jdbcTemplate.queryForObject( + "SELECT iIncrement FROM tModule WHERE sProcedureName = ?", Integer.class, procedureName); + } + + private static Map updateBody() { + Map m = new HashMap<>(); + m.put("sDisplayType", "手机端"); + m.put("sModuleType", "业务模块"); + m.put("sManageDeptEn", "IT"); + m.put("bShowPermission", false); + m.put("sModuleNameZh", "更新后"); + return m; + } + + private String idUrl(Integer id) { + return "http://localhost:" + port + "/api/mod/modules/" + id; + } + private String url() { return "http://localhost:" + port + "/api/mod/modules"; } -- libgit2 0.22.2