diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/manifest/ToolManifestService.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/manifest/ToolManifestService.java index 812ef7384..44f0eeef8 100644 --- a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/manifest/ToolManifestService.java +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/manifest/ToolManifestService.java @@ -18,8 +18,8 @@ package io.shinhanlife.dap.lib.manifest; import com.fasterxml.jackson.databind.ObjectMapper; import io.shinhanlife.dap.lib.config.McpProperties; -import io.shinhanlife.dap.lib.dto.ToolMetadata; -import io.shinhanlife.dap.lib.usecase.LocalToolScanner; +import io.shinhanlife.dap.mcc.dto.ToolMetadata; +import io.shinhanlife.dap.lib.mcp.LocalToolScanner; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.Comparator; diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/usecase/LocalToolScanner.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/LocalToolScanner.java similarity index 98% rename from dap-was-lib/src/main/java/io/shinhanlife/dap/lib/usecase/LocalToolScanner.java rename to dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/LocalToolScanner.java index 4c3fefac4..183bd61c7 100644 --- a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/usecase/LocalToolScanner.java +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/LocalToolScanner.java @@ -1,4 +1,4 @@ -package io.shinhanlife.dap.lib.usecase; +package io.shinhanlife.dap.lib.mcp; /** @@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.shinhanlife.dap.lib.annotation.McpFunction; import io.shinhanlife.dap.lib.annotation.McpTool; import io.shinhanlife.dap.lib.config.McpProperties; -import io.shinhanlife.dap.lib.dto.ToolMetadata; +import io.shinhanlife.dap.mcc.dto.ToolMetadata; import io.shinhanlife.dap.lib.util.ToolSchemaResolver; import jakarta.annotation.PostConstruct; import java.lang.reflect.Method; diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/ToolPodMcpToolSynchronizer.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/ToolPodMcpToolSynchronizer.java index 74e5916e1..105337870 100644 --- a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/ToolPodMcpToolSynchronizer.java +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/ToolPodMcpToolSynchronizer.java @@ -20,9 +20,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.modelcontextprotocol.server.McpServerFeatures; import io.modelcontextprotocol.server.McpSyncServer; import io.modelcontextprotocol.spec.McpSchema; -import io.shinhanlife.dap.lib.dto.ToolMetadata; +import io.shinhanlife.dap.mcc.dto.ToolMetadata; import io.shinhanlife.dap.lib.presentation.BusinessToolController; -import io.shinhanlife.dap.lib.usecase.LocalToolScanner; +import io.shinhanlife.dap.lib.mcp.LocalToolScanner; import java.util.LinkedHashMap; import java.util.Map; import org.springframework.boot.context.event.ApplicationReadyEvent; diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/presentation/BusinessToolController.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/presentation/BusinessToolController.java index 964f5f825..4ca3f6d63 100644 --- a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/presentation/BusinessToolController.java +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/presentation/BusinessToolController.java @@ -21,8 +21,8 @@ import io.shinhanlife.dap.lib.validation.ToolArgumentSchemaValidator; import io.shinhanlife.dap.lib.annotation.McpFunction; import io.shinhanlife.dap.lib.annotation.McpTool; import io.shinhanlife.dap.lib.config.McpProperties; -import io.shinhanlife.dap.lib.dto.ToolMetadata; -import io.shinhanlife.dap.lib.usecase.LocalToolScanner; +import io.shinhanlife.dap.mcc.dto.ToolMetadata; +import io.shinhanlife.dap.lib.mcp.LocalToolScanner; import io.shinhanlife.dap.lib.util.ToolSchemaResolver; import java.lang.reflect.Method; import java.util.ArrayList; diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/dto/ToolMetadata.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/dto/ToolMetadata.java similarity index 98% rename from dap-was-lib/src/main/java/io/shinhanlife/dap/lib/dto/ToolMetadata.java rename to dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/dto/ToolMetadata.java index fb05ce61f..9ab099034 100644 --- a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/dto/ToolMetadata.java +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/dto/ToolMetadata.java @@ -1,4 +1,4 @@ -package io.shinhanlife.dap.lib.dto; +package io.shinhanlife.dap.mcc.dto; import lombok.Getter; import lombok.Setter; diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/presentation/BusinessToolController.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/presentation/BusinessToolController.java new file mode 100644 index 000000000..770415bbf --- /dev/null +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/presentation/BusinessToolController.java @@ -0,0 +1,244 @@ +package io.shinhanlife.dap.mcc.presentation; + + +/** + * @package io.shinhanlife.dap.mcc.presentation + * @className BusinessToolController + * @description AX HUB ??戮?츩??嶺뚳퐣瑗???????? + * @author 0986406 + * @create 2026.09.01 + *
+ * ---------- ?띠룇裕??????----------
+ * ??瑜곸젧??     ??瑜곸젧??   ??瑜곸젧??怨몃뮔
+ * ---------- -------- ---------------------------
+ * 2026.09.01  0986406    嶺뚣끉裕???諛댁뎽
+ * 
+ * 
+ */ +import com.fasterxml.jackson.databind.ObjectMapper; +import com.networknt.schema.Error; +import io.shinhanlife.dap.lib.validation.ToolArgumentSchemaValidator; +import io.shinhanlife.dap.lib.annotation.McpFunction; +import io.shinhanlife.dap.lib.annotation.McpTool; +import io.shinhanlife.dap.lib.config.McpProperties; +import io.shinhanlife.dap.mcc.dto.ToolMetadata; +import io.shinhanlife.dap.lib.mcp.LocalToolScanner; +import io.shinhanlife.dap.lib.util.ToolSchemaResolver; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.support.AopUtils; +import org.springframework.context.ApplicationContext; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.http.ResponseEntity; +import org.springframework.util.ClassUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/") +@RequiredArgsConstructor +public class BusinessToolController { + + private final ApplicationContext applicationContext; + private final ObjectMapper objectMapper; + private final McpProperties mcpProperties; + private final LocalToolScanner localToolScanner; + private final ToolArgumentSchemaValidator toolArgumentSchemaValidator; + + private final ToolSchemaResolver toolSchemaResolver; + // ???? ?브퀗?????β돦裕뉛쭚?Tool 嶺뚮ㅄ維뽨빳???븐뼔援????? + @GetMapping("/mcp/api/v1/tools/local") + public List getLocalTools() { + return localToolScanner.getAllScannedTools(); + } + + // ??戮?빢 REST ?リ옇?↑€????됱쓤 ??源녿뮡????븐뼔援????? + @PostMapping("/mcp/{name}") + public ResponseEntity executeDynamicTool( + @PathVariable("name") String functionName, + @RequestHeader(value = "X-Request-Id", required = false) String headerRequestId, + @RequestHeader(value = "trace-id", required = false) String traceId, + @RequestHeader(value = "request-id", required = false) String requestId, + @RequestHeader(value = "employee-id", required = false) String encryptedEmployeeId, + @RequestBody(required = false) Map arguments) { + + String finalRequestId = headerRequestId; + + log.info(" [Tool] IN - trace-id: {}, request-id: {}", traceId, requestId); + log.info(" [Tool] ???됱쓤 ?????덈뺄 ??븐슙????琉용뼁 (??貫?양춯?: {}", functionName); + if (arguments != null) { + try { + log.info(" [Tool] ?筌뤾쑵?????逾ф쾬?롮구?? {}", objectMapper.writeValueAsString(arguments)); + } catch (Exception e) { + log.info(" [Tool] ?筌뤾쑵?????逾ф쾬?롮구?? {}", arguments); + } + } + Object targetBean = null; + Method targetMethod = null; + McpFunction targetFunctionAnnotation = null; + + // McpTool ???????逾???リ옇?↑€??브퀗???뱀쾸? ?熬곣뫁夷????쒖굣?節놁뿉??熬곣뫁逾???????깅さ亦껋깢??? ?熬곣뫕??????????щ뤂????@McpFunction??嶺뚢돦堉????덈펲. + Map allBeans = applicationContext.getBeansOfType(Object.class); + outerLoop: + for (Object bean : allBeans.values()) { + Class targetClass = AopUtils.getTargetClass(bean); + for (Method targetMethodOfClass : targetClass.getDeclaredMethods()) { + McpFunction mcpFunc = AnnotationUtils.findAnnotation(targetMethodOfClass, McpFunction.class); + if (mcpFunc != null) { + String baseName = mcpFunc.name(); + String expectedName = mcpProperties.getNamespace() != null && !mcpProperties.getNamespace().isEmpty() + ? mcpProperties.getNamespace() + "_" + baseName + : baseName; + + if (expectedName.equals(functionName) || baseName.equals(functionName)) { + targetBean = bean; + try { + targetMethod = bean.getClass().getMethod(targetMethodOfClass.getName(), targetMethodOfClass.getParameterTypes()); + } catch (NoSuchMethodException e) { + targetMethod = targetMethodOfClass; + } + targetFunctionAnnotation = mcpFunc; + break outerLoop; + } + } + } + } + + if (targetBean == null || targetMethod == null) { + List availableFunctions = new ArrayList<>(); + for (Object bean : allBeans.values()) { + Class targetCls = AopUtils.getTargetClass(bean); + for (Method m : targetCls.getDeclaredMethods()) { + McpFunction func = AnnotationUtils.findAnnotation(m, McpFunction.class); + if (func != null) { + String baseName = func.name(); + String expName = mcpProperties.getNamespace() != null && !mcpProperties.getNamespace().isEmpty() + ? mcpProperties.getNamespace() + "_" + baseName : baseName; + availableFunctions.add(expName + " (in " + targetCls.getSimpleName() + ")"); + } + } + } + log.error("[Tool] ???덈뺄????貫??Method)??嶺뚢돦堉??????怨룸????덈펲: {}. ?熬곣뫗?????노뼌????嶺뚮∥?꾥땻??嶺뚮ㅄ維뽨빳? {}", functionName, availableFunctions); + Map errorDetails = new HashMap<>(); + errorDetails.put("status", "404"); + Map errorBody = new HashMap<>(); + errorBody.put("code", "TOOL_NOT_FOUND"); + errorBody.put("message", "???덈뺄????貫???嶺뚢돦堉??????怨룸????덈펲: " + functionName); + errorBody.put("details", errorDetails); + if (finalRequestId != null) errorBody.put("request_id", finalRequestId); + + return ResponseEntity.status(404).body(errorBody); + } + // (?リ옇???嶺뚢뼰維€???β돦裕뉐퐲???蹂ㅽ깴?? + + // 2. ???逾ф쾬?롮구????ル쪇????롪틵?嶺?(JSON Schema) + if (targetMethod.getParameterCount() > 0) { + Class paramType = targetMethod.getParameterTypes()[0]; + if (!Map.class.isAssignableFrom(paramType)) { + try { + Map inputSchema = toolSchemaResolver.resolve(targetFunctionAnnotation, paramType); + List errors = toolArgumentSchemaValidator.validate(inputSchema, arguments); + if (!errors.isEmpty()) { + log.error("[Tool] ???逾ф쾬?롮구????ル쪇????롪틵?嶺????덉넮: {}", errors); + List errorMessages = new ArrayList<>(); + for (Error validationError : errors) { + errorMessages.add(validationError.getMessage()); + } + Map errorDetails = new HashMap<>(); + errorDetails.put("status", "422"); + Map errorBody = new HashMap<>(); + errorBody.put("code", "INVALID_PARAM"); + errorBody.put("message", "???逾ф쾬?롮구????ル쪇????롪틵?嶺????덉넮"); + errorBody.put("details", errorDetails); + if (finalRequestId != null) errorBody.put("request_id", finalRequestId); + + return ResponseEntity.status(422).body(errorBody); + } + } catch (Exception e) { + log.error("[Tool] ???꾪뀞嶺??롪틵?嶺?繞????댁쾼 ?꾩룇裕뉑틦? {}", e.getMessage()); + } + } + } + + log.info("[Tool] ?洹먮뿫???源끒€?嶺뚯쉳??????덈뺄 -> Method: {}", targetMethod.getName()); + + try { + // 3. DTO ???逾ф쾬?롮구?????吏?嶺뚮씞?뗩뇡?(Map -> DTO) + Object invokeArgument = arguments; + if (targetMethod.getParameterCount() > 0 && arguments != null) { + Class paramType = targetMethod.getParameterTypes()[0]; + if (!Map.class.isAssignableFrom(paramType)) { + invokeArgument = objectMapper.convertValue(arguments, paramType); + log.info("[Tool] DTO ???吏?嶺뚮씞?뗩뇡??繹먭퍓沅? {}", paramType.getSimpleName()); + } + } + + long startTime = System.currentTimeMillis(); + Object methodResult = null; + if (targetMethod.getParameterCount() == 0) { + methodResult = targetMethod.invoke(targetBean); + } else { + methodResult = targetMethod.invoke(targetBean, invokeArgument); + } + + Map outputSchema = toolSchemaResolver.resolveOutput(targetFunctionAnnotation, targetMethod.getReturnType()); + if (!outputSchema.isEmpty()) { + List outputErrors = toolArgumentSchemaValidator.validateValue(outputSchema, methodResult); + if (!outputErrors.isEmpty()) { + log.error("[Tool] Output schema validation failed. tool={}, errors={}", + functionName, outputErrors); + Map errorBody = new HashMap<>(); + errorBody.put("code", "INVALID_TOOL_RESPONSE"); + errorBody.put("message", "Tool response does not match its output schema"); + if (finalRequestId != null) { + errorBody.put("request_id", finalRequestId); + } + return ResponseEntity.internalServerError().body(errorBody); + } + } + + long elapsed = System.currentTimeMillis() - startTime; + + // 5. ?롪퍒????꾩룇瑗??(??戮?빢 REST ??얜Ŧ堉? + try { + log.info("[Tool Execution] Output Schema Result: {}", objectMapper.writeValueAsString(methodResult)); + } catch (Exception e) { + log.info("[Tool Execution] Output Schema Result: {}", methodResult); + } + + log.info(" [Tool] OUT - trace-id: {}, request-id: {}", traceId, requestId); + + ResponseEntity.BodyBuilder responseBuilder = ResponseEntity.ok(); + if (traceId != null) responseBuilder.header("trace-id", traceId); + if (requestId != null) responseBuilder.header("request-id", requestId); + + return responseBuilder.body(methodResult); + + } catch (Exception e) { + log.error("[Tool] ?洹먮뿫???源끒€????덈뺄 繞????깅뇶 ?꾩룇裕뉑틦? {}", e.getMessage()); + Map errorDetails = new HashMap<>(); + errorDetails.put("status", "500"); + Map errorBody = new HashMap<>(); + errorBody.put("code", "TOOL_ERROR"); + errorBody.put("message", "Tool execution failed"); + errorDetails.clear(); // Hide details for upstream errors + errorBody.put("details", errorDetails); + if (finalRequestId != null) errorBody.put("request_id", finalRequestId); + + return ResponseEntity.status(502).body(errorBody); + } + } +} diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/presentation/ToolManifestController.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/presentation/ToolManifestController.java new file mode 100644 index 000000000..3fed10f27 --- /dev/null +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/presentation/ToolManifestController.java @@ -0,0 +1,48 @@ +package io.shinhanlife.dap.mcc.presentation; + +/** + * @package io.shinhanlife.dap.mcc.presentation + * @className ToolManifestController + * @description AX HUB ?쒖뒪??泥섎━ ?대옒?? + * @author 0986406 + * @create 2026.09.01 + *
+ * ---------- 媛쒖젙?대젰 ----------
+ * ?섏젙??     ?섏젙??   ?섏젙?댁슜
+ * ---------- -------- ---------------------------
+ * 2026.09.01  0986406    理쒖큹?앹꽦
+ * 
+ * 
+ */ + + +import io.shinhanlife.dap.lib.manifest.ToolManifestResponse; +import io.shinhanlife.dap.lib.manifest.ToolManifestService; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; + +/** Read-only Tool Service manifest endpoint for MCP background discovery. */ +@RestController +public class ToolManifestController { + + private final ToolManifestService toolManifestService; + + public ToolManifestController(ToolManifestService toolManifestService) { + this.toolManifestService = toolManifestService; + } + + @GetMapping(value = "/tool-manifest", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getManifest( + @RequestHeader(value = HttpHeaders.IF_NONE_MATCH, required = false) String ifNoneMatch) { + ToolManifestResponse manifest = toolManifestService.currentManifest(); + String eTag = '"' + manifest.revision() + '"'; + if (eTag.equals(ifNoneMatch)) { + return ResponseEntity.status(304).eTag(eTag).build(); + } + return ResponseEntity.ok().eTag(eTag).body(manifest); + } +} diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/usecase/AbstractMcpToolUseCase.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/usecase/AbstractMcpToolUseCase.java similarity index 98% rename from dap-was-lib/src/main/java/io/shinhanlife/dap/lib/usecase/AbstractMcpToolUseCase.java rename to dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/usecase/AbstractMcpToolUseCase.java index 8dbb82102..a8729653b 100644 --- a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/usecase/AbstractMcpToolUseCase.java +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/usecase/AbstractMcpToolUseCase.java @@ -1,4 +1,4 @@ -package io.shinhanlife.dap.lib.usecase; +package io.shinhanlife.dap.mcc.usecase; import io.shinhanlife.dap.lib.adapter.connector.LegacyEimsConnector; import io.shinhanlife.dap.lib.adapter.util.PiiMaskingUtils; diff --git a/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/manifest/ToolManifestServiceTest.java b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/manifest/ToolManifestServiceTest.java index d3629553a..f2f6daf59 100644 --- a/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/manifest/ToolManifestServiceTest.java +++ b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/manifest/ToolManifestServiceTest.java @@ -22,7 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import com.fasterxml.jackson.databind.ObjectMapper; import io.shinhanlife.dap.lib.config.McpProperties; -import io.shinhanlife.dap.lib.dto.ToolMetadata; +import io.shinhanlife.dap.mcc.dto.ToolMetadata; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; diff --git a/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/McpRequestHeaderFilterTest.java b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/McpRequestHeaderFilterTest.java index da6436605..dffd2d178 100644 --- a/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/McpRequestHeaderFilterTest.java +++ b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/McpRequestHeaderFilterTest.java @@ -27,7 +27,7 @@ import static org.mockito.Mockito.when; import com.fasterxml.jackson.databind.ObjectMapper; import io.modelcontextprotocol.server.McpSyncServer; import io.shinhanlife.dap.lib.presentation.BusinessToolController; -import io.shinhanlife.dap.lib.usecase.LocalToolScanner; +import io.shinhanlife.dap.lib.mcp.LocalToolScanner; import java.lang.reflect.Method; import java.util.Map; import org.junit.jupiter.api.Test; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BalanceUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BalanceUseCaseImpl.java index 7e9e0c465..0c49a90af 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BalanceUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BalanceUseCaseImpl.java @@ -16,7 +16,7 @@ package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl; * */ import io.shinhanlife.dap.mcc.biz.cmm.usecase.BalanceUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import io.shinhanlife.dap.mcc.biz.cmm.dto.BalanceRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BillingProcessUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BillingProcessUseCaseImpl.java index 890c07bc9..bf81db59e 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BillingProcessUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BillingProcessUseCaseImpl.java @@ -3,7 +3,7 @@ package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import io.shinhanlife.dap.mcc.biz.cmm.usecase.BillingProcessUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import org.springframework.stereotype.Service; import io.shinhanlife.dap.mcc.biz.cmm.dto.BillingProcessRequest; import io.shinhanlife.dap.mcc.biz.cmm.dto.BillingStatusRequest; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BondIssueUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BondIssueUseCaseImpl.java index 2d74f8e6a..9851714bd 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BondIssueUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/BondIssueUseCaseImpl.java @@ -1,7 +1,7 @@ package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl; import io.shinhanlife.dap.mcc.biz.cmm.usecase.BondIssueUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import org.springframework.stereotype.Service; import io.shinhanlife.dap.mcc.biz.cmm.dto.BondCheckRequest; import io.shinhanlife.dap.mcc.biz.cmm.dto.BondIssueRequest; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/CommonUtilityUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/CommonUtilityUseCaseImpl.java index aad892a7c..56a600a31 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/CommonUtilityUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/CommonUtilityUseCaseImpl.java @@ -1,7 +1,7 @@ package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl; import io.shinhanlife.dap.mcc.biz.cmm.usecase.CommonUtilityUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import org.springframework.stereotype.Service; import io.shinhanlife.dap.mcc.biz.cmm.dto.LeaveCountRequest; import io.shinhanlife.dap.mcc.biz.cmm.dto.VacationRegisterRequest; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/ContractInquiryUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/ContractInquiryUseCaseImpl.java index 17b858a32..403f1556c 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/ContractInquiryUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/ContractInquiryUseCaseImpl.java @@ -1,7 +1,7 @@ package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl; import io.shinhanlife.dap.mcc.biz.cmm.usecase.ContractInquiryUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import org.springframework.stereotype.Service; import io.shinhanlife.dap.mcc.biz.cmm.dto.ContractDetailRequest; import io.shinhanlife.dap.mcc.biz.cmm.dto.ContractStatusRequest; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/CustomerInfoUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/CustomerInfoUseCaseImpl.java index f5cc9a440..cb06f6238 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/CustomerInfoUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/CustomerInfoUseCaseImpl.java @@ -1,7 +1,7 @@ package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl; import io.shinhanlife.dap.mcc.biz.cmm.usecase.CustomerInfoUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import org.springframework.stereotype.Service; import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerDetailRequest; import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGradeRequest; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/TemplateUtilityUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/TemplateUtilityUseCaseImpl.java index 13594d634..42a9505b2 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/TemplateUtilityUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/TemplateUtilityUseCaseImpl.java @@ -1,7 +1,7 @@ package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl; import io.shinhanlife.dap.mcc.biz.cmm.usecase.TemplateUtilityUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import io.shinhanlife.dap.mcc.biz.cmm.dto.TemplateDownloadRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/DailyQuoteToolUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/DailyQuoteToolUseCaseImpl.java index a65f537b6..36059326c 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/DailyQuoteToolUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/DailyQuoteToolUseCaseImpl.java @@ -3,7 +3,7 @@ package io.shinhanlife.dap.mcc.biz.smp.usecase.impl; import io.shinhanlife.dap.mcc.biz.smp.dto.DailyQuoteRequest; import io.shinhanlife.dap.mcc.biz.smp.dto.DailyQuoteResponse; import io.shinhanlife.dap.mcc.biz.smp.usecase.DailyQuoteToolUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/ExchangeRateToolUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/ExchangeRateToolUseCaseImpl.java index d7ac0421f..10853b02d 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/ExchangeRateToolUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/ExchangeRateToolUseCaseImpl.java @@ -3,7 +3,7 @@ package io.shinhanlife.dap.mcc.biz.smp.usecase.impl; import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateRequest; import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateResponse; import io.shinhanlife.dap.mcc.biz.smp.usecase.ExchangeRateToolUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClient; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/TeamMemberUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/TeamMemberUseCaseImpl.java index a6f79be19..19d1e25fd 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/TeamMemberUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/TeamMemberUseCaseImpl.java @@ -3,7 +3,7 @@ package io.shinhanlife.dap.mcc.biz.smp.usecase.impl; import io.shinhanlife.dap.mcc.biz.smp.dto.TeamMemberRequest; import io.shinhanlife.dap.mcc.biz.smp.dto.TeamMemberResponse; import io.shinhanlife.dap.mcc.biz.smp.usecase.TeamMemberUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/WeatherToolUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/WeatherToolUseCaseImpl.java index 05c387279..b581199cf 100644 --- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/WeatherToolUseCaseImpl.java +++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/WeatherToolUseCaseImpl.java @@ -3,7 +3,7 @@ package io.shinhanlife.dap.mcc.biz.smp.usecase.impl; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.shinhanlife.dap.mcc.biz.smp.usecase.WeatherToolUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import io.shinhanlife.dap.mcc.biz.smp.dto.WeatherRequest; import io.shinhanlife.dap.mcc.biz.smp.dto.WeatherResponse; import lombok.extern.slf4j.Slf4j; diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/usecase/impl/SmsToolUseCaseImpl.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/usecase/impl/SmsToolUseCaseImpl.java index 35708843d..385856874 100644 --- a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/usecase/impl/SmsToolUseCaseImpl.java +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/usecase/impl/SmsToolUseCaseImpl.java @@ -1,7 +1,7 @@ package io.shinhanlife.dap.mcc.biz.sms.usecase.impl; import io.shinhanlife.dap.mcc.biz.sms.usecase.SmsToolUseCase; -import io.shinhanlife.dap.lib.usecase.AbstractMcpToolUseCase; +import io.shinhanlife.dap.mcc.usecase.AbstractMcpToolUseCase; import org.springframework.stereotype.Service; import io.shinhanlife.dap.mcc.biz.sms.converter.SmsLegacyConverter; import io.shinhanlife.dap.mcc.biz.sms.dto.SmsSendRequest;