Преглед на файлове

test(integration): dev/test profile 联调入口 INTPTestController

新增 com.malk.test.INTPTestController,仅 dev/test profile 暴露 5 端点(/test/intp/token + users CRUD),凭据落 application-*.yml 的 integration.{baseUrl,clientId,clientSecret},access_token 内部缓存不出参。生产 profile 自动不暴露。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
malk преди 1 седмица
родител
ревизия
3027e67a71
променени са 1 файла, в които са добавени 79 реда и са изтрити 0 реда
  1. 79 0
      mjava/src/main/java/com/malk/test/INTPTestController.java

+ 79 - 0
mjava/src/main/java/com/malk/test/INTPTestController.java

@@ -0,0 +1,79 @@
+package com.malk.test;
+
+import com.malk.server.common.McR;
+import com.malk.service.integration.INTPClient_User;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 集成平台(IAM)联调入口
+ * <p>
+ * 仅 dev/test profile 暴露,生产无此端点。凭据通过 {@code application-*.yml} 的
+ * {@code integration.baseUrl / clientId / clientSecret} 注入;首调用前需保证
+ * 环境变量 {@code INTP_BASE_URL / INTP_CLIENT_ID / INTP_CLIENT_SECRET} 已设置。
+ * <p>
+ * access_token 由 {@link INTPClient_User#getAccessToken()} 内部缓存,业务端点不要求传入。
+ * <p>
+ * 端点清单:
+ * <ul>
+ *   <li>GET  {@code /test/intp/token}                — 取 token(缓存命中返回同值)</li>
+ *   <li>POST {@code /test/intp/users}                — 创建用户,body: {username, password, body_ext?}</li>
+ *   <li>PATCH {@code /test/intp/users/{username}}    — 修改用户,body: 字段 Map</li>
+ *   <li>POST {@code /test/intp/users/delete}         — 批量删除,body: {usernames: [...]}</li>
+ *   <li>GET  {@code /test/intp/users}                — 列表查询,query param 透传</li>
+ * </ul>
+ */
+@Slf4j
+@Profile({"dev", "test"})
+@RestController
+@RequestMapping("/test/intp")
+public class INTPTestController {
+
+    @Autowired
+    private INTPClient_User intpClientUser;
+
+    @GetMapping("token")
+    McR<String> token() {
+        String token = intpClientUser.getAccessToken();
+        log.info("intp token len={}", token == null ? 0 : token.length());
+        return McR.success(token);
+    }
+
+    @PostMapping("users")
+    McR<Map> createUser(@RequestBody Map<String, Object> body) {
+        String token = intpClientUser.getAccessToken();
+        String username = (String) body.get("username");
+        String password = (String) body.get("password");
+        Map bodyExt = (Map) body.get("body_ext");
+        Map data = intpClientUser.createUser(token, username, password, bodyExt);
+        return McR.success(data);
+    }
+
+    @PatchMapping("users/{username}")
+    McR<Boolean> updateUser(@PathVariable("username") String username,
+                            @RequestBody Map<String, Object> bodyExt) {
+        String token = intpClientUser.getAccessToken();
+        Boolean ok = intpClientUser.updateUser(token, username, bodyExt);
+        return McR.success(ok);
+    }
+
+    @PostMapping("users/delete")
+    McR<Boolean> deleteUsers(@RequestBody Map<String, Object> body) {
+        String token = intpClientUser.getAccessToken();
+        List<String> usernames = (List<String>) body.get("usernames");
+        Boolean ok = intpClientUser.deleteUsers(token, usernames);
+        return McR.success(ok);
+    }
+
+    @GetMapping("users")
+    McR<Map> queryUsers(@RequestParam Map<String, Object> query) {
+        String token = intpClientUser.getAccessToken();
+        Map data = intpClientUser.queryUsers(token, query);
+        return McR.success(data);
+    }
+}