4.6 KiB
CISD Init Request Schema DTO Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Replace placeholder init preview request with a production-ready CISD initialization request DTO and server-side rule validation based on preset product type.
Architecture: Keep the current single-module Spring Boot structure. Introduce strong-typed nested DTOs for init request payload, centralize preset version/product-type sourcing in configuration properties (as current phase baseline), and enforce cross-field conditional rules in InitService before preview generation. Surface preset product type in /api/v1/device/info for frontend auto-rendering.
Tech Stack: JDK 17, Spring Boot 3.5, Jakarta Bean Validation, JUnit 5.
Task 1: Add failing tests for init request rule validation
Files:
- Create:
src/test/java/com/cisd/tms/modules/init/service/InitServiceTest.java
Step 1: Write failing tests
- Add tests for:
- missing preset product type should reject init preview.
- enterprise + TLQ should require
tlqLicenseFileId. - direct +
RABBITMQ_CFMQshould requirecfmqConfigFileId,cfgZipFileId, and sign server fields. - valid enterprise request should pass and generate summary.
Step 2: Run targeted tests to verify red
- Run:
mvn -q -Dtest=InitServiceTest test - Expected: FAIL because
InitServicestill uses old DTO and has no rule engine.
Task 2: Implement strong-typed init request DTO model
Files:
- Modify:
src/main/java/com/cisd/tms/modules/init/dto/InitPreviewRequest.java
Step 1: Replace old placeholder fields
- Remove
version/nodeCount. - Add nested models for:
- basic institution fields
- deploy mode + nodes
- mq settings
- licenses
- sign server
Step 2: Add validation annotations
- Add required constraints for common fields (
orgCodeType,orgCode,orgNameCn,deployMode,node01Ip,mqType,channelUsername,channelPassword,receiverLicenseFileId).
Step 3: Keep model minimal and serializable
- Use static inner classes with getters/setters only.
Task 3: Add preset product type source and expose in device info
Files:
- Create:
src/main/java/com/cisd/tms/common/config/properties/CisdPresetProperties.java - Modify:
src/main/java/com/cisd/tms/modules/device/dto/DeviceInfoResponse.java - Modify:
src/main/java/com/cisd/tms/modules/device/service/DeviceService.java - Modify:
src/main/resources/application.yml
Step 1: Add configuration properties bean
- Prefix:
tms.cisd.preset - Fields:
productType,version,source.
Step 2: Extend device status response
- Add
presetProductType,presetVersion,presetSource.
Step 3: Populate response from preset config
- Inject
CisdPresetPropertiesintoDeviceServiceand map values.
Task 4: Implement rule validation in InitService
Files:
- Modify:
src/main/java/com/cisd/tms/modules/init/service/InitService.java - Modify:
src/main/java/com/cisd/tms/modules/init/dto/InitPreviewResponse.java - Modify:
src/main/java/com/cisd/tms/modules/init/dto/InitPlanTemplateResponse.java
Step 1: Add preset guard
- If preset product type missing/invalid, throw
BizExceptionand block preview/template.
Step 2: Add product-type conditional validation
- Enterprise/Indirect:
- deploy mode only
SINGLE/DUAL - mq type only
RABBITMQ/TLQ - TLQ requires
tlqLicenseFileId - DUAL requires
node02Ip
- deploy mode only
- Direct:
- deploy mode
SINGLE/DUAL/QUAD - mq type
RABBITMQ_TLQ/RABBITMQ_CFMQ cfgZipFileIdrequired- sign server fields required
- TLQ requires
tlqLicenseFileId - CFMQ requires
cfmqConfigFileId - DUAL/QUAD require
node02Ip; QUAD requirenode03Ip/node04Ip
- deploy mode
Step 3: Produce meaningful preview summary
- Set response fields: resolved product type, step count estimate, and concise summary.
Task 5: Add developer-facing validation spec doc
Files:
- Create:
docs/plans/2026-03-02-cisd-init-request-schema-spec.md
Step 1: Document payload JSON schema shape
- Include common object structure and conditional fields by product type.
Step 2: Document prefilled vs user-input fields
- Explicitly list DB creds and RabbitMQ admin creds as prefilled-only.
Task 6: Verify and stabilize
Files:
- N/A
Step 1: Run targeted tests
mvn -q -Dtest=InitServiceTest test
Step 2: Run compile check
mvn -q -DskipTests compile
Step 3: Run full test suite if stable
mvn -q test
Step 4: Record results in response
- Include changed files, command outputs summary, remaining risks.