From 4ed534b1d6b17474005322ca81de6b5221ebe066 Mon Sep 17 00:00:00 2001 From: jade Date: Fri, 24 Jul 2026 14:27:00 +0900 Subject: [PATCH] fix: restore Nginx 8080 port mapping for Apache and refactor MciCfpaClient --- .../dap/common/util/ToolScaffolder.java | 169 ++++++++++++++++-- .../mci/cfp/a/{io => }/MciCfpaClient.java | 4 +- .../service/impl/OnnbaMciToolServiceImpl.java | 2 +- docker-compose.yml | 2 +- 4 files changed, 155 insertions(+), 22 deletions(-) rename dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/{io => }/MciCfpaClient.java (95%) diff --git a/dap-tool-core/src/main/java/io/shinhanlife/dap/common/util/ToolScaffolder.java b/dap-tool-core/src/main/java/io/shinhanlife/dap/common/util/ToolScaffolder.java index 04362196..9fdb4dad 100644 --- a/dap-tool-core/src/main/java/io/shinhanlife/dap/common/util/ToolScaffolder.java +++ b/dap-tool-core/src/main/java/io/shinhanlife/dap/common/util/ToolScaffolder.java @@ -92,10 +92,18 @@ public class ToolScaffolder { Path legacyDtoDir = rootDir.resolve(Paths.get(moduleName, BASE_PACKAGE_PATH, "legacy")); Path converterDir = rootDir.resolve(Paths.get(moduleName, BASE_PACKAGE_PATH, "converter")); + boolean isMci = "MCI".equalsIgnoreCase(routingType); + String mciGroupPath = "infra/itrf/mci/" + group.toLowerCase(); + Path mciIoDir = rootDir.resolve(Paths.get(moduleName, BASE_PACKAGE_PATH, mciGroupPath, "io")); + Files.createDirectories(serviceDir); Files.createDirectories(serviceImplDir); Files.createDirectories(dtoDir); - Files.createDirectories(legacyDtoDir); + if (isMci) { + Files.createDirectories(mciIoDir); + } else { + Files.createDirectories(legacyDtoDir); + } Files.createDirectories(converterDir); StringBuilder log = new StringBuilder(); @@ -179,7 +187,6 @@ public class ToolScaffolder { Files.writeString(serviceDir.resolve(baseName + "Service.java"), serviceInterfaceContent); - boolean isMci = "MCI".equalsIgnoreCase(routingType); String serviceImplContent; if (isMci) { @@ -198,7 +205,7 @@ public class ToolScaffolder { import lombok.extern.slf4j.Slf4j; import java.util.Map; import %s.converter.%sLegacyConverter; - import %s.legacy.%sLegacyRequest; + import %s.infra.itrf.mci.%s.io.%s_I; /** * @package %s.service.impl @@ -241,12 +248,12 @@ public class ToolScaffolder { log.info("[MCI Tool] {} 요청 수신.", "%s"); try { // MapStruct를 이용한 자동 매핑 (AI DTO -> MCI DTO) - %sLegacyRequest legacyRequest = converter.toLegacyRequest(req); + %s_I mciReq = converter.toLegacyRequest(req); Transfer resTransfer = mci.callTo( "%s", null, - legacyRequest, + mciReq, Object.class ); return resTransfer.getBody() != null ? resTransfer.getBody() : Map.of("status", "SUCCESS"); @@ -264,7 +271,7 @@ public class ToolScaffolder { BASE_PACKAGE, baseName, BASE_PACKAGE, baseName, BASE_PACKAGE, baseName, - BASE_PACKAGE, baseName, + BASE_PACKAGE, group.toLowerCase(), interfaceId, BASE_PACKAGE, baseName, author, createDate, @@ -274,8 +281,7 @@ public class ToolScaffolder { baseName, baseName, toolName, description, description + " 해줘.", interfaceId, register, baseName, - baseName, - baseName, + interfaceId, interfaceId ); } else { @@ -357,7 +363,131 @@ public class ToolScaffolder { Files.writeString(serviceImplDir.resolve(baseName + "ServiceImpl.java"), serviceImplContent); - String legacyReqContent = """ + if (isMci) { + String mciReqContent = """ + package %s.infra.itrf.mci.%s.io; + + import lombok.Data; + + /** + * @package %s.infra.itrf.mci.%s.io + * @className %s_I + * @description AX HUB 시스템 처리 클래스 + * @author %s + * @create %s + *
+                 * ---------- 개정이력 ----------
+                 * 수정일      수정자    수정내용
+                 * ---------- -------- ---------------------------
+                 * %s  %s    최초생성
+                 * 
+                 * 
+ */ + @Data + public class %s_I { + /** + * EAI 시스템이 요구하는 수신자 번호 파라미터명 + */ + private String phone; + + /** + * EAI 시스템이 요구하는 메시지 내용 파라미터명 + */ + private String content; + } + """.formatted(BASE_PACKAGE, group.toLowerCase(), BASE_PACKAGE, group.toLowerCase(), interfaceId, author, createDate, createDate, author, interfaceId); + Files.writeString(mciIoDir.resolve(interfaceId + "_I.java"), mciReqContent); + + String mciResContent = """ + package %s.infra.itrf.mci.%s.io; + + import lombok.Data; + + /** + * @package %s.infra.itrf.mci.%s.io + * @className %s_O + * @description AX HUB 시스템 처리 클래스 + * @author %s + * @create %s + *
+                 * ---------- 개정이력 ----------
+                 * 수정일      수정자    수정내용
+                 * ---------- -------- ---------------------------
+                 * %s  %s    최초생성
+                 * 
+                 * 
+ */ + @Data + public class %s_O { + // TODO: Add response fields here + } + """.formatted(BASE_PACKAGE, group.toLowerCase(), BASE_PACKAGE, group.toLowerCase(), interfaceId, author, createDate, createDate, author, interfaceId); + Files.writeString(mciIoDir.resolve(interfaceId + "_O.java"), mciResContent); + + String converterContent = """ + package %s.converter; + + import %s.dto.%sRequest; + import %s.dto.%sResponse; + import %s.infra.itrf.mci.%s.io.%s_I; + import %s.infra.itrf.mci.%s.io.%s_O; + import org.mapstruct.Mapper; + import org.mapstruct.Mapping; + import org.mapstruct.factory.Mappers; + + /** + * @package %s.converter + * @className %sLegacyConverter + * @description AX HUB 시스템 처리 클래스 + * @author %s + * @create %s + *
+                 * ---------- 개정이력 ----------
+                 * 수정일      수정자    수정내용
+                 * ---------- -------- ---------------------------
+                 * %s  %s    최초생성
+                 * 
+                 * 
+ */ + @Mapper(componentModel = "spring") + public interface %sLegacyConverter { + + @Mapping(source = "phoneNumber", target = "phone") + @Mapping(source = "message", target = "content") + %s_I toLegacyRequest(%sRequest req); + + @Mapping(source = "phone", target = "phoneNumber") + @Mapping(source = "content", target = "message") + %sRequest toRequest(%s_I mciReq); + + // %sResponse toResponse(%s_O mciRes); + } + """.formatted( + BASE_PACKAGE, + BASE_PACKAGE, baseName, + BASE_PACKAGE, baseName, + BASE_PACKAGE, group.toLowerCase(), interfaceId, + BASE_PACKAGE, group.toLowerCase(), interfaceId, + BASE_PACKAGE, baseName, author, createDate, createDate, author, + baseName, interfaceId, baseName, + baseName, interfaceId, + baseName, interfaceId + ); + Files.writeString(converterDir.resolve(baseName + "LegacyConverter.java"), converterContent); + + log.append("\n=========================================\n"); + log.append(" Scaffolding Complete! (Routing: " + routingType + ")\n"); + 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("[Request DTO] ").append(dtoDir.resolve(baseName + "Request.java")).append("\n"); + log.append("[Response DTO] ").append(dtoDir.resolve(baseName + "Response.java")).append("\n"); + log.append("[MCI Request IO] ").append(mciIoDir.resolve(interfaceId + "_I.java")).append("\n"); + log.append("[MCI Response IO] ").append(mciIoDir.resolve(interfaceId + "_O.java")).append("\n"); + log.append("[MCI Converter] ").append(converterDir.resolve(baseName + "LegacyConverter.java")).append("\n"); + + } else { + String legacyReqContent = """ package %s.legacy; import lombok.Data; @@ -466,16 +596,17 @@ public class ToolScaffolder { ); Files.writeString(converterDir.resolve(baseName + "LegacyConverter.java"), converterContent); - log.append("\n=========================================\n"); - log.append(" Scaffolding Complete! (Routing: " + routingType + ")\n"); - 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("[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=========================================\n"); + log.append(" Scaffolding Complete! (Routing: " + routingType + ")\n"); + 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("[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"); return log.toString(); diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/MciCfpaClient.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/MciCfpaClient.java similarity index 95% rename from dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/MciCfpaClient.java rename to dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/MciCfpaClient.java index 66012339..ee407709 100644 --- a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/MciCfpaClient.java +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/MciCfpaClient.java @@ -1,5 +1,7 @@ -package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io; +package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a; +import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_I; +import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_O; import io.shinhanlife.dap.common.integration.mci.component.AxhubMciComponent; import io.shinhanlife.dap.mcc.dto.Onnba3011Request; import io.shinhanlife.glow.communication.dto.Transfer; diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/impl/OnnbaMciToolServiceImpl.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/impl/OnnbaMciToolServiceImpl.java index 8aede4e0..fe22a16b 100644 --- a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/impl/OnnbaMciToolServiceImpl.java +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/impl/OnnbaMciToolServiceImpl.java @@ -1,6 +1,6 @@ package io.shinhanlife.dap.mcc.service.impl; -import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.MciCfpaClient; +import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.MciCfpaClient; import io.shinhanlife.dap.mcc.annotation.McpFunction; import io.shinhanlife.dap.mcc.annotation.McpTool; import io.shinhanlife.dap.mcc.service.OnnbaMciToolService; diff --git a/docker-compose.yml b/docker-compose.yml index ce08f04d..a46a1d21 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -46,7 +46,7 @@ services: nginx: image: nginx:latest ports: - - "8281:8281" + - "8080:8281" - "8282:8282" - "8283:8283" - "8284:8284"