refactor: massive rename dap -> dat and fix scaffold syntax error
Some checks failed
Deploy to OCIWP / deploy (push) Failing after 14s

This commit is contained in:
jade
2026-08-20 10:41:37 +09:00
parent 64c422378f
commit 0085ec6919
765 changed files with 1151 additions and 1151 deletions

View File

@@ -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 설정 변경

View File

@@ -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"
```

View File

@@ -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 필드

View File

@@ -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`

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 목록이 조회된다.

View File

@@ -42,7 +42,7 @@ ins_insurance_processor
## 3. 업무 패키지 구조
```text
io.shinhanlife.dap.mcc
io.shinhanlife.dat.mcc
├─ biz.{category}
│ ├─ dto
│ ├─ converter

View File

@@ -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 컨테이너를 사용하는 연계 테스트에서만 실행한다.