fix: generate schema based tool request DTOs
All checks were successful
Deploy to OCIWP / deploy (push) Successful in 1m36s
All checks were successful
Deploy to OCIWP / deploy (push) Successful in 1m36s
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package io.shinhanlife.dap.lib.util;
|
package io.shinhanlife.dap.lib.util;
|
||||||
|
|
||||||
|
|
||||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
@@ -179,6 +178,13 @@ public class ToolScaffolder {
|
|||||||
private String message;
|
private String message;
|
||||||
}
|
}
|
||||||
""".formatted(bizPackage, bizPackage, baseName, author, createDate, createDate, author, baseName);
|
""".formatted(bizPackage, bizPackage, baseName, author, createDate, createDate, author, baseName);
|
||||||
|
reqContent = reqContent
|
||||||
|
.replace("import com.fasterxml.jackson.annotation.JsonInclude;",
|
||||||
|
"import com.fasterxml.jackson.annotation.JsonInclude;\nimport io.swagger.v3.oas.annotations.media.Schema;")
|
||||||
|
.replaceAll("(?m)^\\s*@McpToolParam\\([^\\r\\n]*\\)\\R", "")
|
||||||
|
.replaceAll("(?m)^\\s*-\\(\\?:[^\\r\\n]*\\R", "")
|
||||||
|
.replace("private String phoneNumber;", "@Schema(example = \"01012345678\")\n private String phoneNumber;")
|
||||||
|
.replace("private String message;", "@Schema(example = \"테스트 메시지입니다.\")\n private String message;");
|
||||||
Files.writeString(dtoDir.resolve(baseName + "Request.java"), reqContent);
|
Files.writeString(dtoDir.resolve(baseName + "Request.java"), reqContent);
|
||||||
|
|
||||||
// Generate Response DTO
|
// Generate Response DTO
|
||||||
@@ -308,7 +314,7 @@ public class ToolScaffolder {
|
|||||||
private final %sConverter converter;
|
private final %sConverter converter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object execute(%sRequest req) {
|
public %sResponse execute(%sRequest req) {
|
||||||
log.info("[MCI Tool] {} 요청 수신.", "%s");
|
log.info("[MCI Tool] {} 요청 수신.", "%s");
|
||||||
try {
|
try {
|
||||||
// MapStruct를 이용한 자동 매핑 (AI DTO -> MCI DTO)
|
// MapStruct를 이용한 자동 매핑 (AI DTO -> MCI DTO)
|
||||||
@@ -320,10 +326,18 @@ public class ToolScaffolder {
|
|||||||
mciReq,
|
mciReq,
|
||||||
Object.class
|
Object.class
|
||||||
);
|
);
|
||||||
return resTransfer.getBody() != null ? resTransfer.getBody() : Map.of("status", "SUCCESS");
|
%sResponse response = new %sResponse();
|
||||||
|
response.setResultCode("SUCCESS");
|
||||||
|
response.setResultMessage(resTransfer.getBody() != null
|
||||||
|
? "MCI call completed."
|
||||||
|
: "MCI call completed without a response body.");
|
||||||
|
return response;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("[MCI Tool] 연동 중 오류 발생: {}", e.getMessage(), e);
|
log.error("[MCI Tool] 연동 중 오류 발생: {}", e.getMessage(), e);
|
||||||
return Map.of("status", "ERROR", "message", e.getMessage() != null ? e.getMessage() : "Unknown error");
|
%sResponse response = new %sResponse();
|
||||||
|
response.setResultCode("ERROR");
|
||||||
|
response.setResultMessage(e.getMessage() != null ? e.getMessage() : "Unknown error");
|
||||||
|
return response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -345,9 +359,14 @@ public class ToolScaffolder {
|
|||||||
(clientPrefixCap.isEmpty() ? "private final AxhubMciComponent mci;" : "private final Mci" + clientPrefixCap + "Client mci;"),
|
(clientPrefixCap.isEmpty() ? "private final AxhubMciComponent mci;" : "private final Mci" + clientPrefixCap + "Client mci;"),
|
||||||
baseName,
|
baseName,
|
||||||
baseName,
|
baseName,
|
||||||
|
baseName,
|
||||||
toolName,
|
toolName,
|
||||||
interfaceId,
|
interfaceId,
|
||||||
interfaceId
|
interfaceId,
|
||||||
|
baseName,
|
||||||
|
baseName,
|
||||||
|
baseName,
|
||||||
|
baseName
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
serviceImplContent = """
|
serviceImplContent = """
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package io.shinhanlife.dap.lib.util;
|
package io.shinhanlife.dap.lib.util;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@@ -56,4 +57,25 @@ class ToolScaffolderTest {
|
|||||||
assertTrue(Files.exists(schemas.resolve("claim-search-resource-input-schema.json")));
|
assertTrue(Files.exists(schemas.resolve("claim-search-resource-input-schema.json")));
|
||||||
assertTrue(Files.exists(schemas.resolve("claim-search-resource-output-schema.json")));
|
assertTrue(Files.exists(schemas.resolve("claim-search-resource-output-schema.json")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void generatesRequestDtoWithSwaggerSchemaInsteadOfMcpToolParam() throws Exception {
|
||||||
|
String moduleName = root.resolve("dap-was-pay").toString();
|
||||||
|
|
||||||
|
ToolScaffolder.scaffold("search hr", "SHEARCH_01", "HR 조회", "pay", "MCI", moduleName,
|
||||||
|
"tester", "2026.08.09", true, "DFAG");
|
||||||
|
|
||||||
|
Path requestPath = root.resolve("dap-was-pay/src/main/java/io/shinhanlife/dap/mcc/biz/pay/dto/SearchHrRequest.java");
|
||||||
|
String request = Files.readString(requestPath);
|
||||||
|
|
||||||
|
assertTrue(request.contains("import io.swagger.v3.oas.annotations.media.Schema;"));
|
||||||
|
assertTrue(request.contains("@Schema(example = \"01012345678\")"));
|
||||||
|
assertTrue(request.contains("@Schema(example = \"테스트 메시지입니다.\")"));
|
||||||
|
assertFalse(request.contains("McpToolParam"));
|
||||||
|
|
||||||
|
Path implementationPath = root.resolve("dap-was-pay/src/main/java/io/shinhanlife/dap/mcc/biz/pay/usecase/impl/SearchHrUseCaseImpl.java");
|
||||||
|
String implementation = Files.readString(implementationPath);
|
||||||
|
assertTrue(implementation.contains("public SearchHrResponse execute(SearchHrRequest req)"));
|
||||||
|
assertTrue(implementation.contains("response.setResultCode(\"SUCCESS\")"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user