refactor: apply MSA naming standard for DTOs and Scaffold template (Req->Request, Res->Response)
Some checks failed
Deploy to OCIWP / deploy (push) Failing after 30s

This commit is contained in:
jade
2026-07-24 10:07:50 +09:00
parent 438c190447
commit fc8c3da666
63 changed files with 205 additions and 171 deletions

View File

@@ -77,7 +77,7 @@ public class MockEimsHttpServer {
log.info(" [가짜 ESB 서버] MCI String 요청 수신 완료!");
log.info(" 수신된 String 전문: {}", payload);
// MciSampleStringRes 에 맞게 고정 길이 응답 생성
// MciSampleStringResponse 에 맞게 고정 길이 응답 생성
// name (10), age (3), joinDate (8), statusCode (2)
// targetList (30) -> MciSampleTargetDto (itemCode 5, itemValue 5) x 3
return "홍길동 03020260901OKA0001B0001A0002B0002A0003B0003";

View File

@@ -74,7 +74,7 @@ public class AxhubEaiComponent {
}
/**
* EAI 호출 (Res body class와 rcvSvcId 없는 경우)
* EAI 호출 (Response body class와 rcvSvcId 없는 경우)
*/
public <O, I> Transfer<O> call(String itrfId, I inputDTO) throws Exception {
String className = inputDTO.getClass().getSimpleName();

View File

@@ -137,7 +137,7 @@ public class AxhubMciComponent {
}
/**
* 대내 mci 호출 (Res body class와 rcvSvcId 없는 경우)
* 대내 mci 호출 (Response body class와 rcvSvcId 없는 경우)
* @param itrfName 인터페이스Id
* @param inputDTO 수신서비스Id (클래스명 대체)
* @return Transfer

View File

@@ -100,7 +100,7 @@ public class ToolScaffolder {
StringBuilder log = new StringBuilder();
// Generate Req DTO
// Generate Request DTO
String reqContent = """
package %s.dto;
@@ -110,7 +110,7 @@ public class ToolScaffolder {
/**
* @package %s.dto
* @className %sReq
* @className %sRequest
* @description AX HUB 시스템 처리 클래스
* @author %s
* @create %s
@@ -124,7 +124,7 @@ public class ToolScaffolder {
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class %sReq {
public class %sRequest {
@McpParameter(description = "수신자 전화번호", required = true)
private String phoneNumber;
@@ -132,9 +132,9 @@ public class ToolScaffolder {
private String message;
}
""".formatted(BASE_PACKAGE, BASE_PACKAGE, BASE_PACKAGE, baseName, author, createDate, createDate, author, baseName);
Files.writeString(dtoDir.resolve(baseName + "Req.java"), reqContent);
Files.writeString(dtoDir.resolve(baseName + "Request.java"), reqContent);
// Generate Res DTO
// Generate Response DTO
String resContent = """
package %s.dto;
@@ -143,7 +143,7 @@ public class ToolScaffolder {
/**
* @package %s.dto
* @className %sRes
* @className %sResponse
* @description AX HUB 시스템 처리 클래스
* @author %s
* @create %s
@@ -157,23 +157,23 @@ public class ToolScaffolder {
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class %sRes {
public class %sResponse {
private String status;
private String message;
// TODO: Add response fields here
}
""".formatted(BASE_PACKAGE, BASE_PACKAGE, baseName, author, createDate, createDate, author, baseName);
Files.writeString(dtoDir.resolve(baseName + "Res.java"), resContent);
Files.writeString(dtoDir.resolve(baseName + "Response.java"), resContent);
String toolName = baseName.isEmpty() ? baseName : Character.toLowerCase(baseName.charAt(0)) + baseName.substring(1);
String serviceInterfaceContent = """
package %s.service;
import %s.dto.%sReq;
import %s.dto.%sRequest;
public interface %sService {
Object execute(%sReq req);
Object execute(%sRequest req);
}
""".formatted(BASE_PACKAGE, BASE_PACKAGE, baseName, baseName, baseName);
@@ -188,8 +188,8 @@ public class ToolScaffolder {
import %s.annotation.McpFunction;
import %s.annotation.McpTool;
import %s.dto.%sReq;
import %s.dto.%sRes;
import %s.dto.%sRequest;
import %s.dto.%sResponse;
import %s.service.%sService;
import io.shinhanlife.dap.common.integration.mci.component.AxhubMciComponent;
import io.shinhanlife.glow.communication.dto.Transfer;
@@ -198,7 +198,7 @@ public class ToolScaffolder {
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import %s.converter.%sLegacyConverter;
import %s.legacy.%sLegacyReq;
import %s.legacy.%sLegacyRequest;
/**
* @package %s.service.impl
@@ -237,16 +237,16 @@ public class ToolScaffolder {
requiresApproval = false,
openWorldHint = true
)
public Object execute(%sReq req) {
public Object execute(%sRequest req) {
log.info("[MCI Tool] {} 요청 수신.", "%s");
try {
// MapStruct를 이용한 자동 매핑 (AI DTO -> MCI DTO)
%sLegacyReq legacyReq = converter.toLegacyReq(req);
%sLegacyRequest legacyRequest = converter.toLegacyRequest(req);
Transfer<Object> resTransfer = mci.callTo(
"%s",
null,
legacyReq,
legacyRequest,
Object.class
);
return resTransfer.getBody() != null ? resTransfer.getBody() : Map.of("status", "SUCCESS");
@@ -284,8 +284,8 @@ public class ToolScaffolder {
import %s.annotation.McpFunction;
import %s.annotation.McpTool;
import %s.dto.%sReq;
import %s.dto.%sRes;
import %s.dto.%sRequest;
import %s.dto.%sResponse;
import %s.service.%sService;
import %s.service.AbstractMcpToolService;
import %s.converter.%sLegacyConverter;
@@ -328,9 +328,9 @@ public class ToolScaffolder {
register = %s,
requiresApproval = false
)
public Object execute(%sReq req) {
// %sLegacyReq legacyReq = converter.toLegacyReq(req);
return executeLegacy("%s", "%s", req); // Or pass legacyReq
public Object execute(%sRequest req) {
// %sLegacyRequest legacyRequest = converter.toLegacyRequest(req);
return executeLegacy("%s", "%s", req); // Or pass legacyRequest
}
}
""".formatted(
@@ -364,7 +364,7 @@ public class ToolScaffolder {
/**
* @package %s.legacy
* @className %sLegacyReq
* @className %sLegacyRequest
* @description AX HUB 시스템 처리 클래스
* @author %s
* @create %s
@@ -377,7 +377,7 @@ public class ToolScaffolder {
* </pre>
*/
@Data
public class %sLegacyReq {
public class %sLegacyRequest {
/**
* EAI 시스템이 요구하는 수신자 번호 파라미터명
*/
@@ -389,7 +389,7 @@ public class ToolScaffolder {
private String content;
}
""".formatted(BASE_PACKAGE, BASE_PACKAGE, baseName, author, createDate, createDate, author, baseName);
Files.writeString(legacyDtoDir.resolve(baseName + "LegacyReq.java"), legacyReqContent);
Files.writeString(legacyDtoDir.resolve(baseName + "LegacyRequest.java"), legacyReqContent);
String legacyResContent = """
package %s.legacy;
@@ -398,7 +398,7 @@ public class ToolScaffolder {
/**
* @package %s.legacy
* @className %sLegacyRes
* @className %sLegacyResponse
* @description AX HUB 시스템 처리 클래스
* @author %s
* @create %s
@@ -411,19 +411,19 @@ public class ToolScaffolder {
* </pre>
*/
@Data
public class %sLegacyRes {
public class %sLegacyResponse {
// TODO: Add legacy response fields here
}
""".formatted(BASE_PACKAGE, BASE_PACKAGE, baseName, author, createDate, createDate, author, baseName);
Files.writeString(legacyDtoDir.resolve(baseName + "LegacyRes.java"), legacyResContent);
Files.writeString(legacyDtoDir.resolve(baseName + "LegacyResponse.java"), legacyResContent);
String converterContent = """
package %s.converter;
import %s.dto.%sReq;
import %s.dto.%sRes;
import %s.legacy.%sLegacyReq;
import %s.legacy.%sLegacyRes;
import %s.dto.%sRequest;
import %s.dto.%sResponse;
import %s.legacy.%sLegacyRequest;
import %s.legacy.%sLegacyResponse;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@@ -447,13 +447,13 @@ public class ToolScaffolder {
@Mapping(source = "phoneNumber", target = "phone")
@Mapping(source = "message", target = "content")
%sLegacyReq toLegacyReq(%sReq req);
%sLegacyRequest toLegacyRequest(%sRequest req);
@Mapping(source = "phone", target = "phoneNumber")
@Mapping(source = "content", target = "message")
%sReq toReq(%sLegacyReq legacyReq);
%sRequest toRequest(%sLegacyRequest legacyRequest);
// %sRes toRes(%sLegacyRes legacyRes);
// %sResponse toResponse(%sLegacyResponse legacyResponse);
}
""".formatted(
BASE_PACKAGE,
@@ -471,10 +471,10 @@ public class ToolScaffolder {
log.append("=========================================\n");
log.append("[Service Interface] ").append(serviceDir.resolve(baseName + "Service.java")).append("\n");
log.append("[Service Impl] ").append(serviceImplDir.resolve(baseName + "ServiceImpl.java")).append("\n");
log.append("[Req DTO] ").append(dtoDir.resolve(baseName + "Req.java")).append("\n");
log.append("[Res DTO] ").append(dtoDir.resolve(baseName + "Res.java")).append("\n");
log.append("[Legacy Req DTO] ").append(legacyDtoDir.resolve(baseName + "LegacyReq.java")).append("\n");
log.append("[Legacy Res DTO] ").append(legacyDtoDir.resolve(baseName + "LegacyRes.java")).append("\n");
log.append("[Request DTO] ").append(dtoDir.resolve(baseName + "Request.java")).append("\n");
log.append("[Response DTO] ").append(dtoDir.resolve(baseName + "Response.java")).append("\n");
log.append("[Legacy Request DTO] ").append(legacyDtoDir.resolve(baseName + "LegacyRequest.java")).append("\n");
log.append("[Legacy Response DTO] ").append(legacyDtoDir.resolve(baseName + "LegacyResponse.java")).append("\n");
log.append("[Legacy Converter] ").append(converterDir.resolve(baseName + "LegacyConverter.java")).append("\n");
log.append("\n Tip: ").append(interfaceId).append(" 목업 데이터를 mock-responses.json에 추가하세요.\n");

View File

@@ -34,5 +34,5 @@ public interface SampleLegacyConverter {
@Mapping(source = "userId", target = "customerId")
@Mapping(source = "actionType", target = "interfaceId")
@Mapping(source = "extraInfo", target = "requestDetails")
SampleLegacyReqDto toLegacyReq(SampleAiReqDto aiReq);
SampleLegacyReqDto toLegacyRequest(SampleAiReqDto aiRequest);
}

View File

@@ -39,7 +39,7 @@ public class SampleLegacyConverterTest {
.build();
// when: MapStruct 자동 생성 매퍼를 통해 1줄로 변환
SampleLegacyReqDto mciDto = sampleLegacyConverter.toLegacyReq(aiDto);
SampleLegacyReqDto mciDto = sampleLegacyConverter.toLegacyRequest(aiDto);
// then: 콘솔에 결과 출력 및 값 검증
System.out.println("====== MapStruct 변환 테스트 결과 ======");