diff --git a/dap-gateway/src/main/resources/static/admin/scaffold.html b/dap-gateway/src/main/resources/static/admin/scaffold.html index ef8ca667..67ff9208 100644 --- a/dap-gateway/src/main/resources/static/admin/scaffold.html +++ b/dap-gateway/src/main/resources/static/admin/scaffold.html @@ -477,7 +477,6 @@ - @@ -497,8 +496,7 @@
Controls dynamic routing exposure.
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 0e0530c8..f19caf2a 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 @@ -86,12 +86,14 @@ public class ToolScaffolder { Path rootDir = envSourceDir != null ? Paths.get(envSourceDir) : Paths.get("."); Path serviceDir = rootDir.resolve(Paths.get(moduleName, BASE_PACKAGE_PATH, "service")); + Path serviceImplDir = serviceDir.resolve("impl"); Path dtoDir = rootDir.resolve(Paths.get(moduleName, BASE_PACKAGE_PATH, "dto")); Path legacyDtoDir = rootDir.resolve(Paths.get(moduleName, BASE_PACKAGE_PATH, "legacy")); Path converterDir = rootDir.resolve(Paths.get(moduleName, BASE_PACKAGE_PATH, "converter")); Files.createDirectories(serviceDir); + Files.createDirectories(serviceImplDir); Files.createDirectories(dtoDir); Files.createDirectories(legacyDtoDir); Files.createDirectories(converterDir); @@ -165,17 +167,30 @@ public class ToolScaffolder { String toolName = baseName.isEmpty() ? baseName : Character.toLowerCase(baseName.charAt(0)) + baseName.substring(1); + String serviceInterfaceContent = """ + package %s.service; + + import %s.dto.%sReq; + + public interface %sService { + Object execute(%sReq req); + } + """.formatted(BASE_PACKAGE, BASE_PACKAGE, baseName, baseName, baseName); + + Files.writeString(serviceDir.resolve(baseName + "Service.java"), serviceInterfaceContent); + boolean isMci = "MCI".equalsIgnoreCase(routingType); - String serviceContent; + String serviceImplContent; if (isMci) { - serviceContent = """ - package %s.service; + serviceImplContent = """ + package %s.service.impl; import %s.annotation.McpFunction; import %s.annotation.McpTool; import %s.dto.%sReq; import %s.dto.%sRes; + import %s.service.%sService; import io.shinhanlife.dap.common.integration.mci.component.AxhubMciComponent; import io.shinhanlife.glow.communication.dto.Transfer; import org.springframework.stereotype.Service; @@ -186,8 +201,8 @@ public class ToolScaffolder { import %s.legacy.%sLegacyReq; /** - * @package %s.service - * @className %sService + * @package %s.service.impl + * @className %sServiceImpl * @description AX HUB 시스템 처리 클래스 * @author %s * @create %s @@ -206,11 +221,12 @@ public class ToolScaffolder { routingType = "%s", categoryKey = "%s" ) - public class %sService { + public class %sServiceImpl implements %sService { private final AxhubMciComponent mci; private final %sLegacyConverter converter; + @Override @McpFunction( displayName = "%s 툴", name = "%s", @@ -249,11 +265,12 @@ public class ToolScaffolder { BASE_PACKAGE, baseName, BASE_PACKAGE, baseName, BASE_PACKAGE, baseName, + BASE_PACKAGE, baseName, author, createDate, createDate, author, routingType, group.toLowerCase(), - baseName, + baseName, baseName, baseName, baseName, toolName, description, description + " 해줘.", interfaceId, register, baseName, @@ -262,19 +279,23 @@ public class ToolScaffolder { interfaceId ); } else { - serviceContent = """ - package %s.service; + serviceImplContent = """ + package %s.service.impl; import %s.annotation.McpFunction; import %s.annotation.McpTool; import %s.dto.%sReq; import %s.dto.%sRes; + import %s.service.%sService; + import %s.service.AbstractMcpToolService; import %s.converter.%sLegacyConverter; import org.springframework.stereotype.Service; + import lombok.RequiredArgsConstructor; + import lombok.extern.slf4j.Slf4j; /** - * @package %s.service - * @className %sService + * @package %s.service.impl + * @className %sServiceImpl * @description AX HUB 시스템 처리 클래스 * @author %s * @create %s @@ -286,16 +307,18 @@ public class ToolScaffolder { * * */ + @Slf4j @Service + @RequiredArgsConstructor @McpTool( routingType = "%s", categoryKey = "%s" ) - @RequiredArgsConstructor - public class %sService extends AbstractMcpToolService { + public class %sServiceImpl extends AbstractMcpToolService implements %sService { private final %sLegacyConverter converter; + @Override @McpFunction( displayName = "%s 툴", name = "%s", @@ -317,12 +340,13 @@ public class ToolScaffolder { BASE_PACKAGE, baseName, BASE_PACKAGE, baseName, BASE_PACKAGE, baseName, + BASE_PACKAGE, BASE_PACKAGE, baseName, author, createDate, createDate, author, routingType, group.toLowerCase(), - baseName, + baseName, baseName, baseName, baseName, toolName, description, description + " 해줘.", interfaceId, register, baseName, @@ -331,7 +355,7 @@ public class ToolScaffolder { ); } - Files.writeString(serviceDir.resolve(baseName + "Service.java"), serviceContent); + Files.writeString(serviceImplDir.resolve(baseName + "ServiceImpl.java"), serviceImplContent); String legacyReqContent = """ package %s.legacy; @@ -445,7 +469,8 @@ public class ToolScaffolder { log.append("\n=========================================\n"); log.append(" Scaffolding Complete! (Routing: " + routingType + ")\n"); log.append("=========================================\n"); - log.append("[Service] ").append(serviceDir.resolve(baseName + "Service.java")).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"); diff --git a/docker-compose.yml b/docker-compose.yml index 1ab3c096..599c50a9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,7 +35,7 @@ services: mci-mock: image: wiremock/wiremock:latest ports: - - "8089:8080" + - "18089:8080" volumes: - ./mci-mock:/home/wiremock