refactor: massive rename dap -> dat and fix scaffold syntax error
Some checks failed
Deploy to OCIWP / deploy (push) Failing after 14s
Some checks failed
Deploy to OCIWP / deploy (push) Failing after 14s
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
# 신한라이프 내부망 Tool Pod 이관 준비 체크리스트
|
||||
|
||||
> 범위: `dap-was-lib`, `dap-was-cus`, `dap-was-sal`, `dap-was-pro`, `dap-was-sys` Tool Pod 이관
|
||||
> 범위: `dat-was-lib`, `dat-was-cus`, `dat-was-sal`, `dat-was-pro`, `dat-was-sys` Tool Pod 이관
|
||||
>
|
||||
|
||||
## 1. 소스 및 형상관리
|
||||
|
||||
- [ ] 내부 Git 저장소 생성
|
||||
- [ ] 대상 모듈 이관: `dap-was-lib`, `dap-was-cus`, `dap-was-sal`, `dap-was-pro`, `dap-was-sys`
|
||||
- [ ] 대상 모듈 이관: `dat-was-lib`, `dat-was-cus`, `dat-was-sal`, `dat-was-pro`, `dat-was-sys`
|
||||
- [ ] `main` 브랜치 및 필요한 커밋 이력 이관
|
||||
- [ ] API Key, 비밀번호, 인증서, 개인 설정 파일은 Git에서 제외
|
||||
- [ ] 내부 Git URL 기준으로 README와 CI/CD 설정 변경
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
### Task 1: Define grouped Tool and structured-field models
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java:43-61`
|
||||
- Modify: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/util/ToolScaffolder.java:43-61`
|
||||
- Modify: `dat-was-lib/src/test/java/io/shinhanlife/dat/lib/util/ToolScaffolderTest.java`
|
||||
|
||||
**Interfaces:**
|
||||
- Produces `FieldDefinition(name, type, description, example, required, enumValues, itemType, itemFields)`.
|
||||
@@ -42,7 +42,7 @@ assertTrue(implementation.contains("private final CustomerGuidanceClient custome
|
||||
|
||||
- [ ] **Step 2: Run the focused test and confirm it fails**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolScaffolderTest.generatesOneUseCaseWithTwoMcpToolMethodsAndDistinctClients"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolScaffolderTest.generatesOneUseCaseWithTwoMcpToolMethodsAndDistinctClients"`
|
||||
|
||||
Expected: FAIL because `scaffoldUseCase` is absent.
|
||||
|
||||
@@ -59,20 +59,20 @@ Reject blank names and duplicate MCP Tool or Java method names before writing fi
|
||||
|
||||
- [ ] **Step 4: Run the focused test again and commit**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolScaffolderTest.generatesOneUseCaseWithTwoMcpToolMethodsAndDistinctClients"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolScaffolderTest.generatesOneUseCaseWithTwoMcpToolMethodsAndDistinctClients"`
|
||||
|
||||
Expected: still FAIL only because source-generation code is absent.
|
||||
|
||||
```bash
|
||||
git add dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java
|
||||
git add dat-was-lib/src/main/java/io/shinhanlife/dat/lib/util/ToolScaffolder.java dat-was-lib/src/test/java/io/shinhanlife/dat/lib/util/ToolScaffolderTest.java
|
||||
git commit -m "feat: define grouped tool scaffold model"
|
||||
```
|
||||
|
||||
### Task 2: Generate multi-Tool UseCase and typed Client integration
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java:145-1110`
|
||||
- Modify: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/util/ToolScaffolder.java:145-1110`
|
||||
- Modify: `dat-was-lib/src/test/java/io/shinhanlife/dat/lib/util/ToolScaffolderTest.java`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes `ToolMethodDefinition` and `FieldDefinition` from Task 1.
|
||||
@@ -88,7 +88,7 @@ assertTrue(implementation.contains("return converter.toCustomerGuidanceResponse(
|
||||
|
||||
- [ ] **Step 2: Run the test and confirm it fails**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolScaffolderTest.generatesOneUseCaseWithTwoMcpToolMethodsAndDistinctClients"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolScaffolderTest.generatesOneUseCaseWithTwoMcpToolMethodsAndDistinctClients"`
|
||||
|
||||
Expected: FAIL because generated source has only `execute(...)`.
|
||||
|
||||
@@ -122,20 +122,20 @@ for (ToolMethodDefinition tool : tools) {
|
||||
|
||||
- [ ] **Step 5: Run all generator tests and commit**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolScaffolderTest"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolScaffolderTest"`
|
||||
|
||||
Expected: PASS.
|
||||
|
||||
```bash
|
||||
git add dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java
|
||||
git add dat-was-lib/src/main/java/io/shinhanlife/dat/lib/util/ToolScaffolder.java dat-was-lib/src/test/java/io/shinhanlife/dat/lib/util/ToolScaffolderTest.java
|
||||
git commit -m "feat: generate multi-tool usecases with typed clients"
|
||||
```
|
||||
|
||||
### Task 3: Generate enum and list DTO/schema shapes
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java:1144-1420`
|
||||
- Modify: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/util/ToolScaffolder.java:1144-1420`
|
||||
- Modify: `dat-was-lib/src/test/java/io/shinhanlife/dat/lib/util/ToolScaffolderTest.java`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes structured `FieldDefinition` from Task 1.
|
||||
@@ -153,7 +153,7 @@ assertTrue(Files.readString(definition).contains("type: array"));
|
||||
|
||||
- [ ] **Step 2: Run the test and confirm it fails**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolScaffolderTest.generatesEnumAndListFields"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolScaffolderTest.generatesEnumAndListFields"`
|
||||
|
||||
Expected: FAIL because `Enum` and `List` are unsupported types.
|
||||
|
||||
@@ -187,24 +187,24 @@ For object lists, mocks contain a one-element object array using declared item e
|
||||
|
||||
- [ ] **Step 5: Run all generator tests and commit**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolScaffolderTest"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolScaffolderTest"`
|
||||
|
||||
Expected: PASS.
|
||||
|
||||
```bash
|
||||
git add dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java
|
||||
git add dat-was-lib/src/main/java/io/shinhanlife/dat/lib/util/ToolScaffolder.java dat-was-lib/src/test/java/io/shinhanlife/dat/lib/util/ToolScaffolderTest.java
|
||||
git commit -m "feat: generate enum and list scaffold fields"
|
||||
```
|
||||
|
||||
### Task 4: Expose grouped generation in the API and Scaffold UI
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-gateway/src/main/java/io/shinhanlife/dap/mcg/presentation/ScaffoldingController.java:77-260`
|
||||
- Modify: `dap-gateway/src/test/java/io/shinhanlife/dap/mcg/presentation/ScaffoldingControllerToolDraftTest.java`
|
||||
- Modify: `dap-gateway/src/main/resources/static/admin/scaffold.html:880-1750`
|
||||
- Modify: `dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java:77-260`
|
||||
- Modify: `dat-gateway/src/test/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingControllerToolDraftTest.java`
|
||||
- Modify: `dat-gateway/src/main/resources/static/admin/scaffold.html:880-1750`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes `{ "useCaseName": "Customer", "moduleName": "dap-was-oth", "tools": [ ... ] }`.
|
||||
- Consumes `{ "useCaseName": "Customer", "moduleName": "dat-was-oth", "tools": [ ... ] }`.
|
||||
- Produces `POST /api/v1/scaffold/tool-group` and keeps `POST /api/v1/scaffold/tool` unchanged.
|
||||
|
||||
- [ ] **Step 1: Write the failing controller test**
|
||||
@@ -218,7 +218,7 @@ mockMvc.perform(post("/api/v1/scaffold/tool-group")
|
||||
|
||||
- [ ] **Step 2: Run the controller test and confirm it fails**
|
||||
|
||||
Run: `./gradlew.bat :dap-gateway:test --tests "*ScaffoldingControllerToolDraftTest.groupedToolRequest"`
|
||||
Run: `./gradlew.bat :dat-gateway:test --tests "*ScaffoldingControllerToolDraftTest.groupedToolRequest"`
|
||||
|
||||
Expected: FAIL with 404 because `/tool-group` is absent.
|
||||
|
||||
@@ -242,12 +242,12 @@ Add a UseCase name and an “Add Tool” card list. Each card owns its Tool name
|
||||
|
||||
- [ ] **Step 5: Run focused gateway and library tests, then commit**
|
||||
|
||||
Run: `./gradlew.bat :dap-gateway:test --tests "*ScaffoldingControllerToolDraftTest"; ./gradlew.bat :dap-was-lib:test --tests "*ToolScaffolderTest"`
|
||||
Run: `./gradlew.bat :dat-gateway:test --tests "*ScaffoldingControllerToolDraftTest"; ./gradlew.bat :dat-was-lib:test --tests "*ToolScaffolderTest"`
|
||||
|
||||
Expected: PASS.
|
||||
|
||||
```bash
|
||||
git add dap-gateway/src/main/java/io/shinhanlife/dap/mcg/presentation/ScaffoldingController.java dap-gateway/src/test/java/io/shinhanlife/dap/mcg/presentation/ScaffoldingControllerToolDraftTest.java dap-gateway/src/main/resources/static/admin/scaffold.html
|
||||
git add dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java dat-gateway/src/test/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingControllerToolDraftTest.java dat-gateway/src/main/resources/static/admin/scaffold.html
|
||||
git commit -m "feat: add grouped tool scaffold UI"
|
||||
```
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
### Task 1: AI Tool Draft 서버 계약 확장
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-gateway/src/test/java/io/shinhanlife/dap/mcg/presentation/ScaffoldingControllerToolDraftTest.java`
|
||||
- Modify: `dap-gateway/src/main/java/io/shinhanlife/dap/mcg/presentation/ScaffoldingController.java`
|
||||
- Modify: `dat-gateway/src/test/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingControllerToolDraftTest.java`
|
||||
- Modify: `dat-gateway/src/main/java/io/shinhanlife/dat/mcg/presentation/ScaffoldingController.java`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: AI가 반환한 JSON Tool 초안
|
||||
@@ -34,7 +34,7 @@
|
||||
### Task 2: Scaffold 화면 자동 매핑
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-gateway/src/main/resources/static/admin/scaffold.html`
|
||||
- Modify: `dat-gateway/src/main/resources/static/admin/scaffold.html`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: Task 1의 V17 Metadata JSON 필드
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
### Task 1: V17 Tool Definition 모델과 로더
|
||||
|
||||
**Files:**
|
||||
- Create: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/metadata/ToolDescription.java`
|
||||
- Create: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/metadata/ToolDefinition.java`
|
||||
- Create: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/metadata/ToolDefinitionRepository.java`
|
||||
- Create: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/metadata/ToolDefinitionRepositoryTest.java`
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/dto/ToolMetadata.java`
|
||||
- Create: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/metadata/ToolDescription.java`
|
||||
- Create: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/metadata/ToolDefinition.java`
|
||||
- Create: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/metadata/ToolDefinitionRepository.java`
|
||||
- Create: `dat-was-lib/src/test/java/io/shinhanlife/dat/lib/metadata/ToolDefinitionRepositoryTest.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/mcc/dto/ToolMetadata.java`
|
||||
|
||||
**Interfaces:**
|
||||
- Produces: `Optional<ToolDefinition> findByName(String name)` 및 `ToolMetadata`의 V17 필드 접근자.
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
- [ ] **Step 2: Run tests and verify RED**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolDefinitionRepositoryTest"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolDefinitionRepositoryTest"`
|
||||
Expected: FAIL because V17 model/repository does not exist.
|
||||
|
||||
- [ ] **Step 3: Implement minimal immutable models and classpath loader**
|
||||
@@ -49,18 +49,18 @@
|
||||
|
||||
- [ ] **Step 4: Run tests and verify GREEN**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolDefinitionRepositoryTest"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolDefinitionRepositoryTest"`
|
||||
Expected: PASS.
|
||||
|
||||
### Task 2: Registry 수집과 Manifest 표준 매핑
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/ToolRegistryHeartbeatSender.java`
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/manifest/ToolManifestItem.java`
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/manifest/ToolManifestMeta.java`
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/manifest/ToolManifestService.java`
|
||||
- Modify: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/ToolRegistryHeartbeatSenderTest.java`
|
||||
- Modify: `dap-was-lib/src/test/java/io/shinhanlife/dap/mcc/manifest/ToolManifestServiceTest.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/mcp/ToolRegistryHeartbeatSender.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/manifest/ToolManifestItem.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/manifest/ToolManifestMeta.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/manifest/ToolManifestService.java`
|
||||
- Modify: `dat-was-lib/src/test/java/io/shinhanlife/dat/lib/mcp/ToolRegistryHeartbeatSenderTest.java`
|
||||
- Modify: `dat-was-lib/src/test/java/io/shinhanlife/dat/mcc/manifest/ToolManifestServiceTest.java`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: `ToolDefinitionRepository.findByName`.
|
||||
@@ -69,7 +69,7 @@
|
||||
- [ ] **Step 1: Add failing enrichment and manifest mapping tests**
|
||||
- [ ] **Step 2: Run targeted tests and verify RED**
|
||||
|
||||
Run: `./gradlew.bat :dap-was-lib:test --tests "*ToolRegistryHeartbeatSenderTest" --tests "*ToolManifestServiceTest"`
|
||||
Run: `./gradlew.bat :dat-was-lib:test --tests "*ToolRegistryHeartbeatSenderTest" --tests "*ToolManifestServiceTest"`
|
||||
|
||||
- [ ] **Step 3: Merge annotation runtime data with definition YAML**
|
||||
|
||||
@@ -81,10 +81,10 @@
|
||||
### Task 3: MCP Tool 직접 노출과 Gateway 동기화
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/mcp/ToolPodMcpToolSynchronizer.java`
|
||||
- Create or Modify: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/ToolPodMcpToolSynchronizerTest.java`
|
||||
- Modify: `dap-gateway/src/main/java/io/shinhanlife/dap/mcg/sync/RegistryMcpToolSpecificationFactory.java`
|
||||
- Modify: `dap-gateway/src/test/java/io/shinhanlife/dap/biz/mcp/gateway/sync/RegistryMcpToolSpecificationFactoryTest.java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/mcp/ToolPodMcpToolSynchronizer.java`
|
||||
- Create or Modify: `dat-was-lib/src/test/java/io/shinhanlife/dat/lib/mcp/ToolPodMcpToolSynchronizerTest.java`
|
||||
- Modify: `dat-gateway/src/main/java/io/shinhanlife/dat/mcg/sync/RegistryMcpToolSpecificationFactory.java`
|
||||
- Modify: `dat-gateway/src/test/java/io/shinhanlife/dat/biz/mcp/gateway/sync/RegistryMcpToolSpecificationFactoryTest.java`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: enriched `ToolMetadata`.
|
||||
@@ -98,10 +98,10 @@
|
||||
### Task 4: 기존 Tool 전체 정의와 이름 정규화
|
||||
|
||||
**Files:**
|
||||
- Create: `dap-was-sms/src/main/resources/tool-definitions/**/*.yml`
|
||||
- Create: `dap-was-oth/src/main/resources/tool-definitions/**/*.yml`
|
||||
- Modify: all `dap-was-sms/src/main/java/**/*UseCase*.java` containing `@McpTool`
|
||||
- Modify: all `dap-was-oth/src/main/java/**/*UseCase*.java` containing `@McpTool`
|
||||
- Create: `dat-was-sms/src/main/resources/tool-definitions/**/*.yml`
|
||||
- Create: `dat-was-oth/src/main/resources/tool-definitions/**/*.yml`
|
||||
- Modify: all `dat-was-sms/src/main/java/**/*UseCase*.java` containing `@McpTool`
|
||||
- Modify: all `dat-was-oth/src/main/java/**/*UseCase*.java` containing `@McpTool`
|
||||
- Modify: matching tests and mock fixture keys
|
||||
|
||||
**Interfaces:**
|
||||
@@ -122,10 +122,10 @@
|
||||
### Task 5: Scaffold V17 생성 지원
|
||||
|
||||
**Files:**
|
||||
- Modify: `dap-gateway/src/main/resources/static/admin/scaffold.html`
|
||||
- Modify: Scaffold request DTO/controller files discovered under `dap-gateway/src/main/java`
|
||||
- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java`
|
||||
- Modify: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java`
|
||||
- Modify: `dat-gateway/src/main/resources/static/admin/scaffold.html`
|
||||
- Modify: Scaffold request DTO/controller files discovered under `dat-gateway/src/main/java`
|
||||
- Modify: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/util/ToolScaffolder.java`
|
||||
- Modify: `dat-was-lib/src/test/java/io/shinhanlife/dat/lib/util/ToolScaffolderTest.java`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: 입력한 function/when-to-use/when-not-to-use/io-limits/display-description/examples/owner/tags/hints.
|
||||
@@ -139,8 +139,8 @@
|
||||
### Task 6: Gradle 품질 게이트와 문서
|
||||
|
||||
**Files:**
|
||||
- Create: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/validation/ToolSchemaV17ValidationRunner.java`
|
||||
- Create: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/validation/ToolSchemaV17ValidationRunnerTest.java`
|
||||
- Create: `dat-was-lib/src/main/java/io/shinhanlife/dat/lib/validation/ToolSchemaV17ValidationRunner.java`
|
||||
- Create: `dat-was-lib/src/test/java/io/shinhanlife/dat/lib/validation/ToolSchemaV17ValidationRunnerTest.java`
|
||||
- Modify: `build.gradle`
|
||||
- Modify: `README.md`
|
||||
|
||||
@@ -154,8 +154,8 @@
|
||||
- [ ] **Step 5: Run targeted and full verification**
|
||||
|
||||
Run:
|
||||
- `./gradlew.bat :dap-was-lib:test`
|
||||
- `./gradlew.bat :dap-was-sms:test :dap-was-oth:test :dap-gateway:test`
|
||||
- `./gradlew.bat :dat-was-lib:test`
|
||||
- `./gradlew.bat :dat-was-sms:test :dat-was-oth:test :dat-gateway:test`
|
||||
- `./gradlew.bat validateMcpToolNames validateToolSchemaV17`
|
||||
- `./gradlew.bat clean build`
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# dap-was-sys Executable Mock Tools Implementation Plan
|
||||
# dat-was-sys Executable Mock Tools Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
@@ -20,11 +20,11 @@
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/status/dto/SystemStatusRequest.java`
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/status/dto/SystemStatusResponse.java`
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/status/usecase/SystemStatusUseCase.java`
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/status/usecase/impl/SystemStatusUseCaseImpl.java`
|
||||
- Test: `dap-was-sys/src/test/java/io/shinhanlife/dap/mcc/sys/status/usecase/impl/SystemStatusUseCaseImplTest.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/status/dto/SystemStatusRequest.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/status/dto/SystemStatusResponse.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/status/usecase/SystemStatusUseCase.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/status/usecase/impl/SystemStatusUseCaseImpl.java`
|
||||
- Test: `dat-was-sys/src/test/java/io/shinhanlife/dat/mcc/sys/status/usecase/impl/SystemStatusUseCaseImplTest.java`
|
||||
|
||||
- [ ] Write a test expecting default `development`, `AX Hub System`, `HEALTHY`, and a nonblank ISO timestamp; run it and observe compilation failure because the types do not exist.
|
||||
- [ ] Implement request/response DTOs, MCP-annotated `getSystemStatus(SystemStatusRequest)`, and the service returning those literal mock values; rerun the focused test and expect pass.
|
||||
@@ -33,11 +33,11 @@
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/notice/dto/SystemNoticeRequest.java`
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/notice/dto/SystemNoticeResponse.java`
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/notice/usecase/SystemNoticeUseCase.java`
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/notice/usecase/impl/SystemNoticeUseCaseImpl.java`
|
||||
- Test: `dap-was-sys/src/test/java/io/shinhanlife/dap/mcc/sys/notice/usecase/impl/SystemNoticeUseCaseImplTest.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/notice/dto/SystemNoticeRequest.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/notice/dto/SystemNoticeResponse.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/notice/usecase/SystemNoticeUseCase.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/notice/usecase/impl/SystemNoticeUseCaseImpl.java`
|
||||
- Test: `dat-was-sys/src/test/java/io/shinhanlife/dat/mcc/sys/notice/usecase/impl/SystemNoticeUseCaseImplTest.java`
|
||||
|
||||
- [ ] Write a test expecting at least two notices with title, priority, and published date; run it and observe compilation failure because the types do not exist.
|
||||
- [ ] Implement the DTOs, MCP-annotated `getSystemNotices(SystemNoticeRequest)`, and service returning deterministic notices; rerun the focused test and expect pass.
|
||||
@@ -46,11 +46,11 @@
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `dap-was-sys/src/main/java/io/shinhanlife/dap/mcc/sys/presentation/SystemMockToolController.java`
|
||||
- Test: `dap-was-sys/src/test/java/io/shinhanlife/dap/mcc/sys/presentation/SystemMockToolControllerTest.java`
|
||||
- Create: `dat-was-sys/src/main/java/io/shinhanlife/dat/mcc/sys/presentation/SystemMockToolController.java`
|
||||
- Test: `dat-was-sys/src/test/java/io/shinhanlife/dat/mcc/sys/presentation/SystemMockToolControllerTest.java`
|
||||
|
||||
- [ ] Write MockMvc tests for both GET endpoints using optional query parameters and asserting response fields; run and observe compilation failure because the controller does not exist.
|
||||
- [ ] Implement a controller that constructs request DTOs, delegates to the UseCases, and returns response DTOs; run `./gradlew.bat :dap-was-sys:test` and expect pass.
|
||||
- [ ] Implement a controller that constructs request DTOs, delegates to the UseCases, and returns response DTOs; run `./gradlew.bat :dat-was-sys:test` and expect pass.
|
||||
|
||||
## Plan Self-Review
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# dap-was-sys Mock Tools Implementation Plan
|
||||
# dat-was-sys Mock Tools Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Add two read-only system mock tools to `dap-was-sys`, with MCP YAML definitions and deterministic mock JSON responses.
|
||||
**Goal:** Add two read-only system mock tools to `dat-was-sys`, with MCP YAML definitions and deterministic mock JSON responses.
|
||||
|
||||
**Architecture:** YAML definitions under `tool-definitions/sys` describe the tools. Their paired `mock-responses` files provide synthetic data. A resource-based JUnit test verifies the tool names, immutable safety flags, and valid response shape.
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
|
||||
## Global Constraints
|
||||
|
||||
- Create tool resources only in `dap-was-sys`.
|
||||
- Create tool resources only in `dat-was-sys`.
|
||||
- Both tools must be `read_only: true`, `destructive: false`, and `idempotent: true`.
|
||||
- Do not include personal, customer, credential, or secret data.
|
||||
- Follow the field layout in `dap-was-cus/src/main/resources/tool-definitions/smp/smp_team_list.yml`.
|
||||
- Follow the field layout in `dat-was-cus/src/main/resources/tool-definitions/smp/smp_team_list.yml`.
|
||||
|
||||
---
|
||||
|
||||
@@ -21,33 +21,33 @@
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `dap-was-sys/src/main/resources/tool-definitions/sys/sys_system_status.yml`
|
||||
- Create: `dap-was-sys/src/main/resources/mock-responses/sys_system_status.json`
|
||||
- Create: `dap-was-sys/src/test/java/io/shinhanlife/dap/mcc/sys/SystemMockToolResourcesTest.java`
|
||||
- Create: `dat-was-sys/src/main/resources/tool-definitions/sys/sys_system_status.yml`
|
||||
- Create: `dat-was-sys/src/main/resources/mock-responses/sys_system_status.json`
|
||||
- Create: `dat-was-sys/src/test/java/io/shinhanlife/dat/mcc/sys/SystemMockToolResourcesTest.java`
|
||||
|
||||
**Interfaces:** Accepts optional `environment: string`; returns mock `systemName`, `environment`, `status`, and `checkedAt` values.
|
||||
|
||||
- [ ] Write a JUnit test that loads the two classpath resources; asserts tool name `sys_system_status`, `read_only: true`, `destructive: false`, optional `environment`, `resultCode` `SUCCESS`, and all four response fields.
|
||||
- [ ] Run `./gradlew.bat :dap-was-sys:test --tests io.shinhanlife.dap.mcc.sys.SystemMockToolResourcesTest.systemStatusDefinitionIsReadOnlyAndHasValidMockResponse`; expect failure because both resources are absent.
|
||||
- [ ] Run `./gradlew.bat :dat-was-sys:test --tests io.shinhanlife.dat.mcc.sys.SystemMockToolResourcesTest.systemStatusDefinitionIsReadOnlyAndHasValidMockResponse`; expect failure because both resources are absent.
|
||||
- [ ] Create the definition with `category_key: sys`, no required environment keys, `additionalProperties: false`, and read-only safety fields. Create a `SUCCESS` mock JSON response whose stringified `data` contains only synthetic status data.
|
||||
- [ ] Re-run the focused test; expect pass.
|
||||
- [ ] Commit the task: `git add dap-was-sys/src/main/resources/tool-definitions/sys/sys_system_status.yml dap-was-sys/src/main/resources/mock-responses/sys_system_status.json dap-was-sys/src/test/java/io/shinhanlife/dap/mcc/sys/SystemMockToolResourcesTest.java && git commit -m "feat: add system status mock tool"`.
|
||||
- [ ] Commit the task: `git add dat-was-sys/src/main/resources/tool-definitions/sys/sys_system_status.yml dat-was-sys/src/main/resources/mock-responses/sys_system_status.json dat-was-sys/src/test/java/io/shinhanlife/dat/mcc/sys/SystemMockToolResourcesTest.java && git commit -m "feat: add system status mock tool"`.
|
||||
|
||||
### Task 2: System notices mock tool
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `dap-was-sys/src/main/resources/tool-definitions/sys/sys_notice_list.yml`
|
||||
- Create: `dap-was-sys/src/main/resources/mock-responses/sys_notice_list.json`
|
||||
- Modify: `dap-was-sys/src/test/java/io/shinhanlife/dap/mcc/sys/SystemMockToolResourcesTest.java`
|
||||
- Create: `dat-was-sys/src/main/resources/tool-definitions/sys/sys_notice_list.yml`
|
||||
- Create: `dat-was-sys/src/main/resources/mock-responses/sys_notice_list.json`
|
||||
- Modify: `dat-was-sys/src/test/java/io/shinhanlife/dat/mcc/sys/SystemMockToolResourcesTest.java`
|
||||
|
||||
**Interfaces:** Accepts optional `category: string`; returns a mock array containing notices with `title`, `priority`, and `publishedDate`.
|
||||
|
||||
- [ ] Add a JUnit test that loads both resources; asserts tool name `sys_notice_list`, `read_only: true`, `destructive: false`, optional `category`, `resultCode` `SUCCESS`, and at least one mock notice with all three fields.
|
||||
- [ ] Run `./gradlew.bat :dap-was-sys:test --tests io.shinhanlife.dap.mcc.sys.SystemMockToolResourcesTest.noticeListDefinitionIsReadOnlyAndHasValidMockResponse`; expect failure because both resources are absent.
|
||||
- [ ] Run `./gradlew.bat :dat-was-sys:test --tests io.shinhanlife.dat.mcc.sys.SystemMockToolResourcesTest.noticeListDefinitionIsReadOnlyAndHasValidMockResponse`; expect failure because both resources are absent.
|
||||
- [ ] Create the definition with `category_key: sys`, no required environment keys, `additionalProperties: false`, and read-only safety fields. Create a `SUCCESS` mock JSON response containing only synthetic system notices.
|
||||
- [ ] Run `./gradlew.bat :dap-was-sys:test`; expect pass.
|
||||
- [ ] Commit the task: `git add dap-was-sys/src/main/resources/tool-definitions/sys/sys_notice_list.yml dap-was-sys/src/main/resources/mock-responses/sys_notice_list.json dap-was-sys/src/test/java/io/shinhanlife/dap/mcc/sys/SystemMockToolResourcesTest.java && git commit -m "feat: add system notice mock tool"`.
|
||||
- [ ] Run `./gradlew.bat :dat-was-sys:test`; expect pass.
|
||||
- [ ] Commit the task: `git add dat-was-sys/src/main/resources/tool-definitions/sys/sys_notice_list.yml dat-was-sys/src/main/resources/mock-responses/sys_notice_list.json dat-was-sys/src/test/java/io/shinhanlife/dat/mcc/sys/SystemMockToolResourcesTest.java && git commit -m "feat: add system notice mock tool"`.
|
||||
|
||||
## Plan Self-Review
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# dap-was-sys Executable Mock Tools Design
|
||||
# dat-was-sys Executable Mock Tools Design
|
||||
|
||||
## Scope
|
||||
|
||||
Implement `sys_system_status` and `sys_notice_list` as executable, read-only MCP tools and REST endpoints in `dap-was-sys`.
|
||||
Implement `sys_system_status` and `sys_notice_list` as executable, read-only MCP tools and REST endpoints in `dat-was-sys`.
|
||||
|
||||
## Architecture
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# dap-was-sys Mock Tool Design
|
||||
# dat-was-sys Mock Tool Design
|
||||
|
||||
## Scope
|
||||
|
||||
Add two read-only system mock tools to `dap-was-sys`, following the metadata shape of `smp_team_list`.
|
||||
Add two read-only system mock tools to `dat-was-sys`, following the metadata shape of `smp_team_list`.
|
||||
|
||||
## Tools
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
이 문서는 AX HUB의 **Tool Pod 개발자**가 로컬 PC와 신한라이프 내부망에서 동일한 방식으로 소스를 빌드하고 실행하기 위한 기준을 정리한다.
|
||||
|
||||
이 문서의 범위는 `dap-was-lib`와 Tool Pod(`dap-was-cus`, `dap-was-sal`, `dap-was-pro`, `dap-was-sys`)이다. 외부 라우팅 계층의 구성과 운영 방법은 다루지 않는다.
|
||||
이 문서의 범위는 `dat-was-lib`와 Tool Pod(`dat-was-cus`, `dat-was-sal`, `dat-was-pro`, `dat-was-sys`)이다. 외부 라우팅 계층의 구성과 운영 방법은 다루지 않는다.
|
||||
|
||||
## 2. 기준 기술 환경
|
||||
|
||||
@@ -26,23 +26,23 @@
|
||||
|
||||
| 모듈 | 기본 포트 | 역할 |
|
||||
|---|---:|---|
|
||||
| `dap-was-lib` | 해당 없음 | MCP 서버 설정, Tool 탐색·실행, Schema, V17 메타데이터, MCI·HTTP 연동, 공통 로그·헤더 처리 |
|
||||
| `dap-was-cus` | 8084 | 고객 관련 Tool Pod |
|
||||
| `dap-was-sal` | 8082 | 영업 관련 Tool Pod |
|
||||
| `dap-was-pro` | 8085 | 상품 관련 Tool Pod |
|
||||
| `dap-was-sys` | 8086 | 시스템 관련 Tool Pod |
|
||||
| `dat-was-lib` | 해당 없음 | MCP 서버 설정, Tool 탐색·실행, Schema, V17 메타데이터, MCI·HTTP 연동, 공통 로그·헤더 처리 |
|
||||
| `dat-was-cus` | 8084 | 고객 관련 Tool Pod |
|
||||
| `dat-was-sal` | 8082 | 영업 관련 Tool Pod |
|
||||
| `dat-was-pro` | 8085 | 상품 관련 Tool Pod |
|
||||
| `dat-was-sys` | 8086 | 시스템 관련 Tool Pod |
|
||||
|
||||
각 실행 모듈은 `dap-was-lib`를 의존하고 다음 패키지를 스캔한다.
|
||||
각 실행 모듈은 `dat-was-lib`를 의존하고 다음 패키지를 스캔한다.
|
||||
|
||||
```java
|
||||
@SpringBootApplication(scanBasePackages = {
|
||||
"io.shinhanlife.dap.mcc",
|
||||
"io.shinhanlife.dap.lib"
|
||||
"io.shinhanlife.dat.mcc",
|
||||
"io.shinhanlife.dat.lib"
|
||||
})
|
||||
@Import(ToolMcpServerConfiguration.class)
|
||||
```
|
||||
|
||||
따라서 업무 Tool은 `io.shinhanlife.dap.mcc` 아래에, 공통 기능은 `io.shinhanlife.dap.lib` 아래에 둔다.
|
||||
따라서 업무 Tool은 `io.shinhanlife.dat.mcc` 아래에, 공통 기능은 `io.shinhanlife.dat.lib` 아래에 둔다.
|
||||
|
||||
## 4. 개발 PC 준비
|
||||
|
||||
@@ -102,7 +102,7 @@ spring:
|
||||
|
||||
```powershell
|
||||
$env:SPRING_PROFILES_ACTIVE = "local"
|
||||
.\gradlew.bat :dap-was-cus:bootRun
|
||||
.\gradlew.bat :dat-was-cus:bootRun
|
||||
```
|
||||
|
||||
또는 IntelliJ Run Configuration의 `Active profiles`에 `local`을 입력한다.
|
||||
@@ -128,22 +128,22 @@ $env:SPRING_PROFILES_ACTIVE = "local"
|
||||
### 7.1 공통 라이브러리 검증
|
||||
|
||||
```powershell
|
||||
.\gradlew.bat :dap-was-lib:clean :dap-was-lib:test
|
||||
.\gradlew.bat :dat-was-lib:clean :dat-was-lib:test
|
||||
```
|
||||
|
||||
### 7.2 Tool Pod 컴파일
|
||||
|
||||
```powershell
|
||||
.\gradlew.bat :dap-was-cus:compileJava
|
||||
.\gradlew.bat :dap-was-sal:compileJava
|
||||
.\gradlew.bat :dap-was-pro:compileJava
|
||||
.\gradlew.bat :dap-was-sys:compileJava
|
||||
.\gradlew.bat :dat-was-cus:compileJava
|
||||
.\gradlew.bat :dat-was-sal:compileJava
|
||||
.\gradlew.bat :dat-was-pro:compileJava
|
||||
.\gradlew.bat :dat-was-sys:compileJava
|
||||
```
|
||||
|
||||
### 7.3 Tool Pod 실행
|
||||
|
||||
```powershell
|
||||
.\gradlew.bat :dap-was-cus:bootRun
|
||||
.\gradlew.bat :dat-was-cus:bootRun
|
||||
```
|
||||
|
||||
실행 후 확인할 Tool Pod 자체 주소는 다음과 같다.
|
||||
@@ -186,7 +186,7 @@ $env:SPRING_PROFILES_ACTIVE = "local"
|
||||
- [ ] `java -version`이 21이다.
|
||||
- [ ] Gradle JVM이 JDK 21이다.
|
||||
- [ ] `gradlew.bat --version`이 정상 실행된다.
|
||||
- [ ] `:dap-was-lib:test`가 성공한다.
|
||||
- [ ] `:dat-was-lib:test`가 성공한다.
|
||||
- [ ] 대상 Tool Pod의 `compileJava`가 성공한다.
|
||||
- [ ] local 프로파일로 Tool Pod가 기동된다.
|
||||
- [ ] `/tool-manifest`에서 Tool 목록이 조회된다.
|
||||
|
||||
@@ -42,7 +42,7 @@ ins_insurance_processor
|
||||
## 3. 업무 패키지 구조
|
||||
|
||||
```text
|
||||
io.shinhanlife.dap.mcc
|
||||
io.shinhanlife.dat.mcc
|
||||
├─ biz.{category}
|
||||
│ ├─ dto
|
||||
│ ├─ converter
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
|
||||
대상은 다음 Tool 모듈이다.
|
||||
|
||||
- `dap-was-cus`
|
||||
- `dap-was-sal`
|
||||
- `dap-was-pro`
|
||||
- `dap-was-sys`
|
||||
- 공통 기능이 필요한 경우 `dap-was-lib`
|
||||
- `dat-was-cus`
|
||||
- `dat-was-sal`
|
||||
- `dat-was-pro`
|
||||
- `dat-was-sys`
|
||||
- 공통 기능이 필요한 경우 `dat-was-lib`
|
||||
|
||||
## 2. 개발 전 준비 자료
|
||||
|
||||
@@ -52,7 +52,7 @@ Scaffold 입력 시 최소한 다음 값을 정확히 지정한다.
|
||||
|
||||
| 항목 | 예시 | 설명 |
|
||||
|---|---|---|
|
||||
| Target Module | `dap-was-sal` | 소스가 생성될 Tool Pod |
|
||||
| Target Module | `dat-was-sal` | 소스가 생성될 Tool Pod |
|
||||
| Domain Category | `cmm` | 업무 패키지 및 Schema 경로 |
|
||||
| Base Name | `ClaimSearch` | Java 클래스명 기준 |
|
||||
| Tool Name | `cmm_claim_search` | MCP Tool 식별자 |
|
||||
@@ -265,10 +265,10 @@ http://localhost:{podPort}/tool-test-console.html
|
||||
|
||||
```powershell
|
||||
# 공통 단위 테스트
|
||||
.\gradlew.bat :dap-was-lib:test
|
||||
.\gradlew.bat :dat-was-lib:test
|
||||
|
||||
# 대상 Pod 테스트
|
||||
.\gradlew.bat :dap-was-cus:test
|
||||
.\gradlew.bat :dat-was-cus:test
|
||||
|
||||
# Tool명 중복
|
||||
.\gradlew.bat validateMcpToolNames
|
||||
@@ -277,7 +277,7 @@ http://localhost:{podPort}/tool-test-console.html
|
||||
.\gradlew.bat validateToolSchemaV17
|
||||
|
||||
# 배포 산출물 생성: 위 두 검증이 자동 선행됨
|
||||
.\gradlew.bat :dap-was-cus:bootJar
|
||||
.\gradlew.bat :dat-was-cus:bootJar
|
||||
```
|
||||
|
||||
Docker는 컴파일과 일반 단위 테스트에 필요하지 않다. 실제 HTTP/MCI Mock 컨테이너를 사용하는 연계 테스트에서만 실행한다.
|
||||
|
||||
Reference in New Issue
Block a user