create-yss-spec 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +2 -2
- package/src/cli.js +1 -1
- package/template/.agents/skills/cross-repo-implementation-routing/SKILL.md +4 -3
- package/template/.agents/skills/implementation-repo-onboarding/SKILL.md +4 -2
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +28 -0
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +9 -0
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +2 -0
- package/template/.agents/skills/yss-router/SKILL.md +4 -0
- package/template/.agents/skills/yss-router/references/router-contract.yaml +48 -2
- package/template/.agents/skills/yss-router/references/slice-implementation-contract.md +2 -0
- package/template/.agents/skills/yss-router/references/yss-skill-execution-result.md +1 -1
- package/template/.claude/skills/cross-repo-implementation-routing/SKILL.md +4 -3
- package/template/.claude/skills/implementation-repo-onboarding/SKILL.md +4 -2
- package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
- package/template/.claude/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.claude/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
- package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
- package/template/.claude/skills/yss-product-lifecycle/SKILL.md +28 -0
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +9 -0
- package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +2 -0
- package/template/.claude/skills/yss-router/SKILL.md +4 -0
- package/template/.claude/skills/yss-router/references/router-contract.yaml +48 -2
- package/template/.claude/skills/yss-router/references/slice-implementation-contract.md +2 -0
- package/template/.claude/skills/yss-router/references/yss-skill-execution-result.md +1 -1
- package/template/.codex/skills/cross-repo-implementation-routing/SKILL.md +4 -3
- package/template/.codex/skills/implementation-repo-onboarding/SKILL.md +4 -2
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +28 -0
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +9 -0
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +2 -0
- package/template/.codex/skills/yss-router/SKILL.md +4 -0
- package/template/.codex/skills/yss-router/references/router-contract.yaml +48 -2
- package/template/.codex/skills/yss-router/references/slice-implementation-contract.md +2 -0
- package/template/.codex/skills/yss-router/references/yss-skill-execution-result.md +1 -1
- package/template/.hermes/skills/cross-repo-implementation-routing/SKILL.md +4 -3
- package/template/.hermes/skills/implementation-repo-onboarding/SKILL.md +4 -2
- package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
- package/template/.hermes/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.hermes/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
- package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
- package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
- package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
- package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +28 -0
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +9 -0
- package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +2 -0
- package/template/.hermes/skills/yss-router/SKILL.md +4 -0
- package/template/.hermes/skills/yss-router/references/router-contract.yaml +48 -2
- package/template/.hermes/skills/yss-router/references/slice-implementation-contract.md +2 -0
- package/template/.hermes/skills/yss-router/references/yss-skill-execution-result.md +1 -1
- package/template/.pi/skills/cross-repo-implementation-routing/SKILL.md +4 -3
- package/template/.pi/skills/implementation-repo-onboarding/SKILL.md +4 -2
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +28 -0
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +9 -0
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +2 -0
- package/template/.pi/skills/yss-router/SKILL.md +4 -0
- package/template/.pi/skills/yss-router/references/router-contract.yaml +48 -2
- package/template/.pi/skills/yss-router/references/slice-implementation-contract.md +2 -0
- package/template/.pi/skills/yss-router/references/yss-skill-execution-result.md +1 -1
- package/template/.qoder/skills/cross-repo-implementation-routing/SKILL.md +4 -3
- package/template/.qoder/skills/implementation-repo-onboarding/SKILL.md +4 -2
- package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
- package/template/.qoder/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.qoder/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
- package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
- package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +28 -0
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +9 -0
- package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +2 -0
- package/template/.qoder/skills/yss-router/SKILL.md +4 -0
- package/template/.qoder/skills/yss-router/references/router-contract.yaml +48 -2
- package/template/.qoder/skills/yss-router/references/slice-implementation-contract.md +2 -0
- package/template/.qoder/skills/yss-router/references/yss-skill-execution-result.md +1 -1
- package/template/.trae/skills/cross-repo-implementation-routing/SKILL.md +4 -3
- package/template/.trae/skills/implementation-repo-onboarding/SKILL.md +4 -2
- package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
- package/template/.trae/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.trae/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
- package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
- package/template/.trae/skills/yss-product-lifecycle/SKILL.md +28 -0
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +9 -0
- package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +2 -0
- package/template/.trae/skills/yss-router/SKILL.md +4 -0
- package/template/.trae/skills/yss-router/references/router-contract.yaml +48 -2
- package/template/.trae/skills/yss-router/references/slice-implementation-contract.md +2 -0
- package/template/.trae/skills/yss-router/references/yss-skill-execution-result.md +1 -1
- package/template/AGENTS.md +12 -8
- package/template/docs/architecture/templates/engineering-baseline-review-template.md +14 -0
- package/template/docs/process/implementation-repo-integration.md +17 -0
- package/template/docs/process/lifecycle-artifact-map.md +3 -3
- package/template/docs/templates/build-architecture-checklist-template.md +7 -1
- package/template/docs/templates/cross-repo-slice-template.md +2 -0
- package/template/docs/templates/implementation-repo-registry-template.md +14 -0
- package/template/docs/templates/implementation-routing-template.md +35 -6
- package/template/docs/user-guide//344/272/247/345/223/201/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201.md +4 -3
- package/template/docs/user-guide//347/224/237/345/221/275/345/221/250/346/234/237/346/234/200/344/275/263/345/256/236/350/267/265.md +10 -2
- package/template/scripts/implementation-path-policy.rb +50 -0
- package/template/scripts/sync-skills +5 -0
- package/template/scripts/update-skill-lock +7 -1
- package/template/scripts/verify-implementation-path-scenarios +43 -0
- package/template/scripts/verify-lifecycle-scenarios +18 -0
- package/template/scripts/verify-matt-yss-integration-scenarios +1 -1
- package/template/scripts/verify-prototype-backend-scaffold-scenarios +239 -0
- package/template/scripts/verify-scaffold-generator-scenarios +438 -0
- package/template/scripts/verify-template +11 -0
- package/template/scripts/verify-yss-router-scenarios +76 -23
- package/template/skills-lock.json +6 -6
- package/template.snapshot.json +4 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
|
@@ -6,6 +6,7 @@ require "rexml/document"
|
|
|
6
6
|
require "rexml/xpath"
|
|
7
7
|
require "time"
|
|
8
8
|
require "yaml"
|
|
9
|
+
require_relative "implementation-path-policy"
|
|
9
10
|
|
|
10
11
|
ROOT = Pathname.new(__dir__).join("..").realpath
|
|
11
12
|
CONTRACT = YAML.safe_load(
|
|
@@ -137,6 +138,10 @@ def path_allowed_by?(path, allowed_paths)
|
|
|
137
138
|
end
|
|
138
139
|
end
|
|
139
140
|
|
|
141
|
+
def implementation_path_policy_valid?(path, policy = "harness-apps-multi-project")
|
|
142
|
+
YssImplementationPathPolicy.valid?(path, enforce_harness: policy == "harness-apps-multi-project")
|
|
143
|
+
end
|
|
144
|
+
|
|
140
145
|
def dependency_closure(contract, primary_skills, conditions)
|
|
141
146
|
result = primary_skills.dup
|
|
142
147
|
loop do
|
|
@@ -192,6 +197,8 @@ def work_unit_violations(contract, fixture)
|
|
|
192
197
|
violations << "#{prefix}.#{field}" unless value.is_a?(Array) && !value.empty?
|
|
193
198
|
end
|
|
194
199
|
work_unit.fetch("allowed_write_paths", []).each do |path|
|
|
200
|
+
policy = fixture.dig("common", "implementation_path_policy")
|
|
201
|
+
violations << "#{prefix}.allowed_write_paths.path-policy" unless implementation_path_policy_valid?(path, policy)
|
|
195
202
|
violations << "#{prefix}.allowed_write_paths" unless path_scopes.all? { |scope| path_allowed_by?(path, scope) }
|
|
196
203
|
end
|
|
197
204
|
work_unit.fetch("expected_evidence", []).each do |evidence|
|
|
@@ -217,6 +224,29 @@ end
|
|
|
217
224
|
def slice_contract_decision_violations(contract, input, available, fixture, expected_required_skills)
|
|
218
225
|
violations = []
|
|
219
226
|
flags = input.fetch("impact_flags")
|
|
227
|
+
implementation_path_policy = fixture.dig("common", "implementation_path_policy")
|
|
228
|
+
unless %w[harness-apps-multi-project external-repository-native].include?(implementation_path_policy)
|
|
229
|
+
violations << "common.implementation_path_policy"
|
|
230
|
+
end
|
|
231
|
+
project_roots = fixture.dig("common", "project_roots")
|
|
232
|
+
if !project_roots.is_a?(Array) || project_roots.empty?
|
|
233
|
+
violations << "common.project_roots"
|
|
234
|
+
elsif implementation_path_policy == "harness-apps-multi-project"
|
|
235
|
+
project_roots.each do |path|
|
|
236
|
+
violations << "common.project_roots.path-policy" unless implementation_path_policy_valid?(path)
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
{
|
|
240
|
+
"common" => fixture.dig("common", "allowed_write_paths"),
|
|
241
|
+
"frontend" => fixture.dig("frontend", "allowed_write_paths"),
|
|
242
|
+
"backend" => fixture.dig("backend", "allowed_write_paths")
|
|
243
|
+
}.each do |section, paths|
|
|
244
|
+
next unless paths.is_a?(Array)
|
|
245
|
+
|
|
246
|
+
paths.each do |path|
|
|
247
|
+
violations << "#{section}.allowed_write_paths.path-policy" unless implementation_path_policy_valid?(path, implementation_path_policy)
|
|
248
|
+
end
|
|
249
|
+
end
|
|
220
250
|
missing_readiness = readiness_missing(contract, active_impacts(input), available)
|
|
221
251
|
blockers = fixture.dig("readiness", "blockers")
|
|
222
252
|
stale_inputs = fixture.dig("readiness", "stale_inputs")
|
|
@@ -327,15 +357,17 @@ complete_slice["frontend"].merge!(
|
|
|
327
357
|
"required_skills" => ["yss-page-module-development"],
|
|
328
358
|
"approved_prototype_ref" => "docs/prototypes/order-create.html",
|
|
329
359
|
"state_matrix_ref" => "docs/design/order-create-state-matrix.md",
|
|
330
|
-
"allowed_write_paths" => ["apps/frontend/src/pages/order-create/"],
|
|
360
|
+
"allowed_write_paths" => ["apps/frontend/project1/src/pages/order-create/"],
|
|
331
361
|
"component_test_seams" => ["order-create-form"],
|
|
332
362
|
"e2e_paths" => ["create-order"]
|
|
333
363
|
)
|
|
334
364
|
complete_slice["backend"]["status"] = "not-applicable"
|
|
335
365
|
complete_slice["common"].merge!(
|
|
366
|
+
"implementation_path_policy" => "harness-apps-multi-project",
|
|
367
|
+
"project_roots" => ["apps/frontend/project1/"],
|
|
336
368
|
"required_skills" => ["yss-page-module-development"],
|
|
337
|
-
"allowed_write_paths" => ["apps/frontend/src/pages/order-create/"],
|
|
338
|
-
"expected_evidence_files" => ["apps/frontend/src/pages/order-create/OrderCreate.test.tsx"],
|
|
369
|
+
"allowed_write_paths" => ["apps/frontend/project1/src/pages/order-create/"],
|
|
370
|
+
"expected_evidence_files" => ["apps/frontend/project1/src/pages/order-create/OrderCreate.test.tsx"],
|
|
339
371
|
"verification_commands" => ["pnpm test order-create"]
|
|
340
372
|
)
|
|
341
373
|
complete_slice["contract"].merge!(
|
|
@@ -351,8 +383,8 @@ end
|
|
|
351
383
|
complete_slice["work_units"] = [{
|
|
352
384
|
"id" => "render-order-create", "behavior" => "用户提交新订单", "primary_skill" => "yss-page-module-development",
|
|
353
385
|
"supporting_skills" => [], "tdd_mode" => "behavior-tdd",
|
|
354
|
-
"allowed_write_paths" => ["apps/frontend/src/pages/order-create/"],
|
|
355
|
-
"expected_evidence" => ["apps/frontend/src/pages/order-create/OrderCreate.test.tsx"],
|
|
386
|
+
"allowed_write_paths" => ["apps/frontend/project1/src/pages/order-create/"],
|
|
387
|
+
"expected_evidence" => ["apps/frontend/project1/src/pages/order-create/OrderCreate.test.tsx"],
|
|
356
388
|
"verification_commands" => ["pnpm test order-create"], "controlled_generation" => {}
|
|
357
389
|
}]
|
|
358
390
|
ui_expected_skills = ["yss-page-module-development"]
|
|
@@ -361,6 +393,20 @@ unless ui_violations.empty?
|
|
|
361
393
|
failures << "Ready UI/API Slice Contract was rejected: #{ui_violations.join(', ')}"
|
|
362
394
|
end
|
|
363
395
|
|
|
396
|
+
external_slice = Marshal.load(Marshal.dump(complete_slice))
|
|
397
|
+
external_slice["common"].merge!(
|
|
398
|
+
"implementation_path_policy" => "external-repository-native",
|
|
399
|
+
"project_roots" => ["app/frontend/src/"]
|
|
400
|
+
)
|
|
401
|
+
external_slice["common"]["allowed_write_paths"] = ["app/frontend/src/pages/order-create/"]
|
|
402
|
+
external_slice["frontend"]["allowed_write_paths"] = ["app/frontend/src/pages/order-create/"]
|
|
403
|
+
external_slice["work_units"][0]["allowed_write_paths"] = ["app/frontend/src/pages/order-create/"]
|
|
404
|
+
external_slice["work_units"][0]["expected_evidence"] = ["app/frontend/src/pages/order-create/OrderCreate.test.tsx"]
|
|
405
|
+
external_slice["common"]["expected_evidence_files"] = ["app/frontend/src/pages/order-create/OrderCreate.test.tsx"]
|
|
406
|
+
failures << "External native project path was incorrectly blocked" unless slice_contract_decision_violations(
|
|
407
|
+
CONTRACT, base_input, ui_evidence, external_slice, ui_expected_skills
|
|
408
|
+
).empty?
|
|
409
|
+
|
|
364
410
|
decision_mutations = {
|
|
365
411
|
"status-with-blockers" => [base_input, ui_evidence, {"readiness" => {"blockers" => ["review"], "stale_inputs" => [], "not_applicable" => []}}, "status"],
|
|
366
412
|
"status-with-stale" => [base_input, ui_evidence, {"readiness" => {"blockers" => [], "stale_inputs" => ["spec"], "not_applicable" => []}}, "status"],
|
|
@@ -371,6 +417,8 @@ decision_mutations = {
|
|
|
371
417
|
"frontend-prototype" => [base_input, ui_evidence, {"frontend" => {"approved_prototype_ref" => nil}}, "frontend.approved_prototype_ref"],
|
|
372
418
|
"frontend-state-matrix" => [base_input, ui_evidence, {"frontend" => {"state_matrix_ref" => nil}}, "frontend.state_matrix_ref"],
|
|
373
419
|
"frontend-paths" => [base_input, ui_evidence, {"frontend" => {"allowed_write_paths" => []}}, "frontend.allowed_write_paths"],
|
|
420
|
+
"frontend-singular-path-policy" => [base_input, ui_evidence, {"frontend" => {"allowed_write_paths" => ["app/frontend/project1/"]}}, "frontend.allowed_write_paths.path-policy"],
|
|
421
|
+
"frontend-container-path-policy" => [base_input, ui_evidence, {"frontend" => {"allowed_write_paths" => ["apps/frontend/"]}}, "frontend.allowed_write_paths.path-policy"],
|
|
374
422
|
"frontend-seams" => [base_input, ui_evidence, {"frontend" => {"component_test_seams" => []}}, "frontend.component_test_seams"],
|
|
375
423
|
"frontend-e2e" => [base_input, ui_evidence, {"frontend" => {"e2e_paths" => []}}, "frontend.e2e_paths"],
|
|
376
424
|
"api-impact" => [base_input, ui_evidence, {"contract" => {"api_impact" => false}}, "contract.api_impact"],
|
|
@@ -380,6 +428,7 @@ decision_mutations = {
|
|
|
380
428
|
"work-units-empty" => [base_input, ui_evidence, {"work_units" => []}, "work_units"],
|
|
381
429
|
"work-unit-behavior" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("behavior" => nil)]}, "work_units[0].behavior"],
|
|
382
430
|
"work-unit-paths" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("allowed_write_paths" => [])]}, "work_units[0].allowed_write_paths"],
|
|
431
|
+
"work-unit-singular-path-policy" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("allowed_write_paths" => ["app/frontend/project1/"])]}, "work_units[0].allowed_write_paths.path-policy"],
|
|
383
432
|
"work-unit-tdd-mode" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("tdd_mode" => "unknown")]}, "work_units[0].tdd_mode"],
|
|
384
433
|
"work-unit-primary-skill" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("primary_skill" => "undeclared-skill")]}, "work_units[0].primary_skill"],
|
|
385
434
|
"work-unit-supporting-skills" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("supporting_skills" => ["undeclared-skill"])]}, "work_units[0].supporting_skills"],
|
|
@@ -413,15 +462,17 @@ backend_slice["backend"].merge!(
|
|
|
413
462
|
"component_impacts" => [],
|
|
414
463
|
"required_skills" => backend_expected_skills,
|
|
415
464
|
"application_boundary" => "CreateOrderUseCase", "transaction_boundary" => "CreateOrderUseCase.execute",
|
|
416
|
-
"persistence_strategy" => "OrderGateway via MyBatis", "allowed_write_paths" => ["apps/backend/
|
|
417
|
-
"forbidden_patterns" => ["Controller -> Repository"], "expected_evidence_files" => ["apps/backend/
|
|
418
|
-
"verification_commands" => ["./mvnw -pl
|
|
465
|
+
"persistence_strategy" => "OrderGateway via MyBatis", "allowed_write_paths" => ["apps/backend/project1/"],
|
|
466
|
+
"forbidden_patterns" => ["Controller -> Repository"], "expected_evidence_files" => ["apps/backend/project1/OrderTest.java"],
|
|
467
|
+
"verification_commands" => ["./mvnw -pl project1 -am test"]
|
|
419
468
|
)
|
|
420
469
|
backend_slice["common"]["required_skills"] = backend_expected_skills
|
|
421
470
|
backend_slice["common"].merge!(
|
|
422
|
-
"
|
|
423
|
-
"
|
|
424
|
-
"
|
|
471
|
+
"implementation_path_policy" => "harness-apps-multi-project",
|
|
472
|
+
"project_roots" => ["apps/backend/project1/"],
|
|
473
|
+
"allowed_write_paths" => ["apps/backend/project1/"],
|
|
474
|
+
"expected_evidence_files" => ["apps/backend/project1/OrderTest.java"],
|
|
475
|
+
"verification_commands" => ["./mvnw -pl project1 -am test"]
|
|
425
476
|
)
|
|
426
477
|
backend_slice["contract"].merge!("api_impact" => false, "freeze_ref" => nil, "no_api_impact_ref" => "docs/contracts/order-create-no-api.md", "contract_tests" => [])
|
|
427
478
|
CONTRACT.fetch("lifecycle_ref_by_readiness").each do |readiness_key, ref_field|
|
|
@@ -430,8 +481,8 @@ end
|
|
|
430
481
|
backend_slice["work_units"] = [{
|
|
431
482
|
"id" => "create-order", "behavior" => "创建订单事务", "primary_skill" => "yss-backend-scaffold-application",
|
|
432
483
|
"supporting_skills" => backend_expected_skills - ["yss-backend-scaffold-application"], "tdd_mode" => "behavior-tdd",
|
|
433
|
-
"allowed_write_paths" => ["apps/backend/
|
|
434
|
-
"verification_commands" => ["./mvnw -pl
|
|
484
|
+
"allowed_write_paths" => ["apps/backend/project1/"], "expected_evidence" => ["apps/backend/project1/OrderTest.java"],
|
|
485
|
+
"verification_commands" => ["./mvnw -pl project1 -am test"], "controlled_generation" => {}
|
|
435
486
|
}]
|
|
436
487
|
backend_violations = slice_contract_decision_violations(CONTRACT, backend_input, backend_evidence, backend_slice, backend_expected_skills)
|
|
437
488
|
unless backend_violations.empty?
|
|
@@ -575,7 +626,8 @@ def execution_violations(contract, result, allowed_paths, expected_evidence, exp
|
|
|
575
626
|
path = item.is_a?(Hash) ? item["path"] : item
|
|
576
627
|
valid_item = item.is_a?(Hash) && %w[common frontend backend contract cross_repo].include?(item["contract_area"])
|
|
577
628
|
within_both = path && allowed_paths.all? { |scope_paths| path_within_contract?(path, scope_paths) }
|
|
578
|
-
|
|
629
|
+
within_path_policy = path && implementation_path_policy_valid?(path, expected_contract["implementation_path_policy"])
|
|
630
|
+
violations << "path-outside-contract" unless valid_item && within_both && within_path_policy
|
|
579
631
|
end
|
|
580
632
|
evidence_paths = result.fetch("evidence_files", []).each_with_object([]) do |item, paths|
|
|
581
633
|
next unless item.is_a?(Hash) && %w[code test generated review verification].include?(item["evidence_type"]) &&
|
|
@@ -624,10 +676,11 @@ def execution_violations(contract, result, allowed_paths, expected_evidence, exp
|
|
|
624
676
|
violations & contract.fetch("execution_blockers")
|
|
625
677
|
end
|
|
626
678
|
|
|
627
|
-
expected_contract = {"contract_ref" => "docs/contracts/order-create-v2.yaml", "contract_id" => "order-create", "contract_version" => 2
|
|
679
|
+
expected_contract = {"contract_ref" => "docs/contracts/order-create-v2.yaml", "contract_id" => "order-create", "contract_version" => 2,
|
|
680
|
+
"implementation_path_policy" => "harness-apps-multi-project"}
|
|
628
681
|
expected_identity = {"skill" => "yss-domain", "slice_id" => "order-create", "work_unit_id" => "create-order"}
|
|
629
|
-
evidence_path = "apps/backend/
|
|
630
|
-
expected_command = "./mvnw -pl
|
|
682
|
+
evidence_path = "apps/backend/project1/OrderTest.java"
|
|
683
|
+
expected_command = "./mvnw -pl project1 -am test"
|
|
631
684
|
valid_result = {
|
|
632
685
|
"schema_version" => 1,
|
|
633
686
|
"skill" => "yss-domain",
|
|
@@ -635,7 +688,7 @@ valid_result = {
|
|
|
635
688
|
"work_unit_id" => "create-order",
|
|
636
689
|
"status" => "implemented",
|
|
637
690
|
"consumed_contract" => expected_contract,
|
|
638
|
-
"changed_files" => [{"path" => "apps/backend/
|
|
691
|
+
"changed_files" => [{"path" => "apps/backend/project1/Order.java", "contract_area" => "backend"}],
|
|
639
692
|
"evidence_files" => [{"path" => evidence_path, "evidence_type" => "test", "behavior_ref" => "create-order"}],
|
|
640
693
|
"verification_results" => [{"command" => expected_command, "result" => "passed", "executed_at" => "2026-07-21T12:00:00+08:00"}],
|
|
641
694
|
"constraint_results" => [{"constraint" => "no-controller-repository", "status" => "passed", "evidence_ref" => evidence_path}],
|
|
@@ -645,8 +698,8 @@ valid_result = {
|
|
|
645
698
|
"not_applicable_reason" => nil
|
|
646
699
|
}
|
|
647
700
|
valid_args = [[
|
|
648
|
-
["apps/backend/"],
|
|
649
|
-
["apps/backend/
|
|
701
|
+
["apps/backend/project1/"],
|
|
702
|
+
["apps/backend/project1/"]
|
|
650
703
|
], [evidence_path], expected_contract, [expected_command], ["no-controller-repository"], [evidence_path]]
|
|
651
704
|
valid_args.insert(3, expected_identity)
|
|
652
705
|
unless execution_violations(CONTRACT, valid_result, *valid_args).empty?
|
|
@@ -654,8 +707,8 @@ unless execution_violations(CONTRACT, valid_result, *valid_args).empty?
|
|
|
654
707
|
end
|
|
655
708
|
|
|
656
709
|
mutations = {
|
|
657
|
-
"path-outside-contract" => valid_result.merge("changed_files" => [{"path" => "apps/backend/
|
|
658
|
-
"path-outside-contract-work-unit" => valid_result.merge("changed_files" => [{"path" => "apps/backend/
|
|
710
|
+
"path-outside-contract" => valid_result.merge("changed_files" => [{"path" => "apps/backend/project1-escape/Evil.java", "contract_area" => "backend"}]),
|
|
711
|
+
"path-outside-contract-work-unit" => valid_result.merge("changed_files" => [{"path" => "apps/backend/project2/Other.java", "contract_area" => "backend"}]),
|
|
659
712
|
"missing-evidence" => valid_result.merge("evidence_files" => []),
|
|
660
713
|
"verification-not-executed-empty" => valid_result.merge("verification_results" => []),
|
|
661
714
|
"verification-not-executed-command" => valid_result.merge("verification_results" => [{"result" => "passed", "executed_at" => "2026-07-21T12:00:00+08:00"}]),
|
|
@@ -663,7 +716,7 @@ mutations = {
|
|
|
663
716
|
"verification-command-mismatch" => valid_result.merge("verification_results" => [{"command" => "true", "result" => "passed", "executed_at" => "2026-07-21T12:00:00+08:00"}]),
|
|
664
717
|
"violation-contract-version" => valid_result.merge("consumed_contract" => expected_contract.merge("contract_version" => 1)),
|
|
665
718
|
"violation-identity" => valid_result.merge("work_unit_id" => "other-work-unit"),
|
|
666
|
-
"path-outside-contract-area" => valid_result.merge("changed_files" => [{"path" => "apps/backend/
|
|
719
|
+
"path-outside-contract-area" => valid_result.merge("changed_files" => [{"path" => "apps/backend/project1/Order.java", "contract_area" => "nonsense"}]),
|
|
667
720
|
"seam-deferred-without-owner" => valid_result.merge("seam_deferred" => [{"risk" => "temporary adapter"}]),
|
|
668
721
|
"seam-deferred-without-owner-empty" => valid_result.merge("status" => "seam-deferred", "seam_deferred" => []),
|
|
669
722
|
"violation-implemented-with-seam" => valid_result.merge("seam_deferred" => [{"risk" => "temporary", "owner" => "team", "follow_up_ticket" => "T-2", "verification_plan" => "test"}]),
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"source": "project",
|
|
142
142
|
"sourceType": "local",
|
|
143
143
|
"skillPath": ".agents/skills/cross-repo-implementation-routing/SKILL.md",
|
|
144
|
-
"effectiveHash": "
|
|
144
|
+
"effectiveHash": "3207a3f6b51ba07835b56f7c0b2c5e55ca7fdd30a038b0b6ba8ec00228506a4b",
|
|
145
145
|
"targets": [
|
|
146
146
|
".agents/skills",
|
|
147
147
|
".claude/skills",
|
|
@@ -359,7 +359,7 @@
|
|
|
359
359
|
"source": "project",
|
|
360
360
|
"sourceType": "local",
|
|
361
361
|
"skillPath": ".agents/skills/implementation-repo-onboarding/SKILL.md",
|
|
362
|
-
"effectiveHash": "
|
|
362
|
+
"effectiveHash": "e3166bbc93388996d0593803a1d6fb675c0cf596783b3171c035b78293b0c3cd",
|
|
363
363
|
"targets": [
|
|
364
364
|
".agents/skills",
|
|
365
365
|
".claude/skills",
|
|
@@ -1029,7 +1029,7 @@
|
|
|
1029
1029
|
"source": "project",
|
|
1030
1030
|
"sourceType": "local",
|
|
1031
1031
|
"skillPath": ".agents/skills/yss-ddd-scaffold-generator/SKILL.md",
|
|
1032
|
-
"effectiveHash": "
|
|
1032
|
+
"effectiveHash": "2dc2ac84fac2d4a3a1da433dcb863bd8f8c77dc559c584b688876ab2ff8fac05",
|
|
1033
1033
|
"targets": [
|
|
1034
1034
|
".agents/skills",
|
|
1035
1035
|
".claude/skills",
|
|
@@ -1179,7 +1179,7 @@
|
|
|
1179
1179
|
"source": "project",
|
|
1180
1180
|
"sourceType": "local",
|
|
1181
1181
|
"skillPath": ".agents/skills/yss-frontend-scaffold-generator/SKILL.md",
|
|
1182
|
-
"effectiveHash": "
|
|
1182
|
+
"effectiveHash": "b61aa0fdbcd1026757efade8054b84a4f260f1bdf3b1f4d9b6a0315a4a933979",
|
|
1183
1183
|
"targets": [
|
|
1184
1184
|
".agents/skills",
|
|
1185
1185
|
".claude/skills",
|
|
@@ -1329,7 +1329,7 @@
|
|
|
1329
1329
|
"source": "project",
|
|
1330
1330
|
"sourceType": "local",
|
|
1331
1331
|
"skillPath": ".agents/skills/yss-product-lifecycle/SKILL.md",
|
|
1332
|
-
"effectiveHash": "
|
|
1332
|
+
"effectiveHash": "199a9f9422cdbb9e31d7517fa4ee9738e41e53a67188aeff9a0130d4f154f93a",
|
|
1333
1333
|
"targets": [
|
|
1334
1334
|
".agents/skills",
|
|
1335
1335
|
".claude/skills",
|
|
@@ -1374,7 +1374,7 @@
|
|
|
1374
1374
|
"source": "project",
|
|
1375
1375
|
"sourceType": "local",
|
|
1376
1376
|
"skillPath": ".agents/skills/yss-router/SKILL.md",
|
|
1377
|
-
"effectiveHash": "
|
|
1377
|
+
"effectiveHash": "5f19ae24070a93bae92fcd8731857e9a57027c27970106eb82498484f8524008",
|
|
1378
1378
|
"targets": [
|
|
1379
1379
|
".agents/skills",
|
|
1380
1380
|
".claude/skills",
|
package/template.snapshot.json
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"templateName": "yss-spec-project-template",
|
|
4
4
|
"templateSource": "github:iloveZzz/yss-spec-project-template",
|
|
5
5
|
"templateRepository": "https://github.com/iloveZzz/yss-spec-project-template.git",
|
|
6
|
-
"requestedRef": "
|
|
7
|
-
"templateCommit": "
|
|
6
|
+
"requestedRef": "b61c5668d717822c2a69a8e8327fc45b1891b29b",
|
|
7
|
+
"templateCommit": "b61c5668d717822c2a69a8e8327fc45b1891b29b",
|
|
8
8
|
"encodedPaths": {
|
|
9
9
|
".agents/skills/beautiful-article/assets/scaffold-template/.npmrc": ".agents/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc",
|
|
10
10
|
".agents/skills/drawio-academic-skills/.gitignore": ".agents/skills/drawio-academic-skills/__yss_dotfile__.gitignore",
|
|
@@ -32,6 +32,6 @@
|
|
|
32
32
|
".trae/skills/drawio-academic-skills/.gitignore": ".trae/skills/drawio-academic-skills/__yss_dotfile__.gitignore",
|
|
33
33
|
".trae/skills/excalidraw-diagram-generator/scripts/.gitignore": ".trae/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore"
|
|
34
34
|
},
|
|
35
|
-
"snapshotHash": "
|
|
36
|
-
"generatedAt": "2026-08-
|
|
35
|
+
"snapshotHash": "9f1c896eb5a1856954b3358b7208bd1e2627d4c888cf061dc9f207e2eb2bbeae",
|
|
36
|
+
"generatedAt": "2026-08-13T05:09:40.431Z"
|
|
37
37
|
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
package {{base_package}}.rest;
|
|
2
|
-
|
|
3
|
-
import com.yss.cloud.dto.result.PageResult;
|
|
4
|
-
import com.yss.cloud.dto.result.SingleResult;
|
|
5
|
-
import {{base_package}}.client.dto.cmd.UserAddCmd;
|
|
6
|
-
import {{base_package}}.client.dto.cmd.UserUpdateCmd;
|
|
7
|
-
import {{base_package}}.client.dto.query.UserPageQuery;
|
|
8
|
-
import {{base_package}}.client.vo.UserVO;
|
|
9
|
-
import {{base_package}}.core.service.UserService;
|
|
10
|
-
import lombok.RequiredArgsConstructor;
|
|
11
|
-
import org.springframework.web.bind.annotation.*;
|
|
12
|
-
|
|
13
|
-
import javax.validation.Valid;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* 用户管理控制器
|
|
17
|
-
*
|
|
18
|
-
* @author {{author}}
|
|
19
|
-
* @date {{date}}
|
|
20
|
-
*/
|
|
21
|
-
@RestController
|
|
22
|
-
@RequestMapping("/api/users")
|
|
23
|
-
@RequiredArgsConstructor
|
|
24
|
-
public class UserController {
|
|
25
|
-
|
|
26
|
-
private final UserService userService;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* 分页查询用户
|
|
30
|
-
*
|
|
31
|
-
* @param query 查询条件
|
|
32
|
-
* @return 分页结果
|
|
33
|
-
*/
|
|
34
|
-
@PostMapping("/page")
|
|
35
|
-
public PageResult<UserVO> page(@Valid @RequestBody UserPageQuery query) {
|
|
36
|
-
return userService.pageUser(query);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 根据ID查询用户详情
|
|
41
|
-
*
|
|
42
|
-
* @param id 用户ID
|
|
43
|
-
* @return 用户详情
|
|
44
|
-
*/
|
|
45
|
-
@GetMapping("/{id}")
|
|
46
|
-
public SingleResult<UserVO> getById(@PathVariable Long id) {
|
|
47
|
-
return SingleResult.of(userService.getUserById(id));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* 新增用户
|
|
52
|
-
*
|
|
53
|
-
* @param cmd 新增命令
|
|
54
|
-
* @return 用户ID
|
|
55
|
-
*/
|
|
56
|
-
@PostMapping
|
|
57
|
-
public SingleResult<Long> add(@Valid @RequestBody UserAddCmd cmd) {
|
|
58
|
-
return SingleResult.of(userService.addUser(cmd));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* 更新用户
|
|
63
|
-
*
|
|
64
|
-
* @param cmd 更新命令
|
|
65
|
-
* @return 更新结果
|
|
66
|
-
*/
|
|
67
|
-
@PutMapping
|
|
68
|
-
public SingleResult<Boolean> update(@Valid @RequestBody UserUpdateCmd cmd) {
|
|
69
|
-
userService.updateUser(cmd);
|
|
70
|
-
return SingleResult.of(true);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* 删除用户
|
|
75
|
-
*
|
|
76
|
-
* @param id 用户ID
|
|
77
|
-
* @return 删除结果
|
|
78
|
-
*/
|
|
79
|
-
@DeleteMapping("/{id}")
|
|
80
|
-
public SingleResult<Boolean> delete(@PathVariable Long id) {
|
|
81
|
-
userService.deleteUser(id);
|
|
82
|
-
return SingleResult.of(true);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
package {{base_package}}.core.service.convertor;
|
|
2
|
-
|
|
3
|
-
import {{base_package}}.client.dto.cmd.UserAddCmd;
|
|
4
|
-
import {{base_package}}.client.dto.cmd.UserUpdateCmd;
|
|
5
|
-
import {{base_package}}.domain.user.model.User;
|
|
6
|
-
import org.mapstruct.Mapper;
|
|
7
|
-
import org.mapstruct.NullValueCheckStrategy;
|
|
8
|
-
import org.mapstruct.NullValuePropertyMappingStrategy;
|
|
9
|
-
import org.mapstruct.factory.Mappers;
|
|
10
|
-
|
|
11
|
-
@Mapper(
|
|
12
|
-
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
|
|
13
|
-
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
|
|
14
|
-
public interface UserConvertor {
|
|
15
|
-
|
|
16
|
-
UserConvertor INSTANCE = Mappers.getMapper(UserConvertor.class);
|
|
17
|
-
|
|
18
|
-
User toDomain(UserAddCmd cmd);
|
|
19
|
-
|
|
20
|
-
User toDomain(UserUpdateCmd cmd);
|
|
21
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
package {{base_package}}.core.service;
|
|
2
|
-
|
|
3
|
-
import com.yss.cloud.dto.result.PageResult;
|
|
4
|
-
import {{base_package}}.client.dto.cmd.UserAddCmd;
|
|
5
|
-
import {{base_package}}.client.dto.cmd.UserUpdateCmd;
|
|
6
|
-
import {{base_package}}.client.dto.query.UserPageQuery;
|
|
7
|
-
import {{base_package}}.client.vo.UserVO;
|
|
8
|
-
|
|
9
|
-
public interface UserService {
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* 分页查询用户列表
|
|
13
|
-
*
|
|
14
|
-
* @param query 查询条件
|
|
15
|
-
* @return 用户分页结果
|
|
16
|
-
*/
|
|
17
|
-
PageResult<UserVO> pageUser(UserPageQuery query);
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* 根据主键ID查询用户
|
|
21
|
-
*
|
|
22
|
-
* @param id 用户ID
|
|
23
|
-
* @return 用户详情
|
|
24
|
-
*/
|
|
25
|
-
UserVO getUserById(Long id);
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* 新增用户并返回主键ID
|
|
29
|
-
*
|
|
30
|
-
* @param cmd 新增命令
|
|
31
|
-
* @return 新增用户ID
|
|
32
|
-
*/
|
|
33
|
-
Long addUser(UserAddCmd cmd);
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* 根据命令更新用户信息
|
|
37
|
-
*
|
|
38
|
-
* @param cmd 更新命令
|
|
39
|
-
*/
|
|
40
|
-
void updateUser(UserUpdateCmd cmd);
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* 根据主键ID删除用户
|
|
44
|
-
*
|
|
45
|
-
* @param id 用户ID
|
|
46
|
-
*/
|
|
47
|
-
void deleteUser(Long id);
|
|
48
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
package {{base_package}}.core.service.impl;
|
|
2
|
-
|
|
3
|
-
import com.yss.cloud.dto.result.PageResult;
|
|
4
|
-
import {{base_package}}.client.dto.cmd.UserAddCmd;
|
|
5
|
-
import {{base_package}}.client.dto.cmd.UserUpdateCmd;
|
|
6
|
-
import {{base_package}}.client.dto.query.UserPageQuery;
|
|
7
|
-
import {{base_package}}.client.vo.UserVO;
|
|
8
|
-
import {{base_package}}.core.service.UserService;
|
|
9
|
-
import {{base_package}}.domain.user.gateway.UserGateway;
|
|
10
|
-
import lombok.RequiredArgsConstructor;
|
|
11
|
-
import lombok.extern.slf4j.Slf4j;
|
|
12
|
-
import org.springframework.stereotype.Service;
|
|
13
|
-
import org.springframework.transaction.annotation.Transactional;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* 用户应用服务实现类
|
|
17
|
-
*
|
|
18
|
-
* @author {{author}}
|
|
19
|
-
* @date {{date}}
|
|
20
|
-
*/
|
|
21
|
-
@Service
|
|
22
|
-
@RequiredArgsConstructor
|
|
23
|
-
@Slf4j
|
|
24
|
-
public class UserServiceImpl implements UserService {
|
|
25
|
-
private final UserGateway userGateway;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* 分页查询用户
|
|
29
|
-
*
|
|
30
|
-
* @param query 查询条件
|
|
31
|
-
* @return 分页结果
|
|
32
|
-
*/
|
|
33
|
-
@Override
|
|
34
|
-
public PageResult<UserVO> pageUser(UserPageQuery query) {
|
|
35
|
-
log.debug("分页查询用户, query: {}", query);
|
|
36
|
-
return userGateway.pageUser(query);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 根据ID查询用户
|
|
41
|
-
*
|
|
42
|
-
* @param id 用户ID
|
|
43
|
-
* @return 用户信息
|
|
44
|
-
*/
|
|
45
|
-
@Override
|
|
46
|
-
public UserVO getUserById(Long id) {
|
|
47
|
-
log.debug("根据ID查询用户, id: {}", id);
|
|
48
|
-
return userGateway.getUserById(id);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* 新增用户
|
|
53
|
-
*
|
|
54
|
-
* @param cmd 新增命令
|
|
55
|
-
* @return 用户ID
|
|
56
|
-
*/
|
|
57
|
-
@Override
|
|
58
|
-
@Transactional(rollbackFor = Exception.class)
|
|
59
|
-
public Long addUser(UserAddCmd cmd) {
|
|
60
|
-
log.info("新增用户, username: {}", cmd.getUsername());
|
|
61
|
-
return userGateway.addUser(cmd);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* 更新用户
|
|
66
|
-
*
|
|
67
|
-
* @param cmd 更新命令
|
|
68
|
-
*/
|
|
69
|
-
@Override
|
|
70
|
-
@Transactional(rollbackFor = Exception.class)
|
|
71
|
-
public void updateUser(UserUpdateCmd cmd) {
|
|
72
|
-
log.info("更新用户, id: {}", cmd.getId());
|
|
73
|
-
userGateway.updateUser(cmd);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* 删除用户
|
|
78
|
-
*
|
|
79
|
-
* @param id 用户ID
|
|
80
|
-
*/
|
|
81
|
-
@Override
|
|
82
|
-
@Transactional(rollbackFor = Exception.class)
|
|
83
|
-
public void deleteUser(Long id) {
|
|
84
|
-
log.info("删除用户, id: {}", id);
|
|
85
|
-
userGateway.deleteUser(id);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
package {{base_package}};
|
|
2
|
-
|
|
3
|
-
import com.yss.cloud.EnableDistributedId;
|
|
4
|
-
import com.yss.cloud.cache.EnableYssCloudRedisCache;
|
|
5
|
-
import com.yss.excel.mvc.annotation.EnableExcelMvc;
|
|
6
|
-
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
7
|
-
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
|
8
|
-
import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
|
9
|
-
import org.springframework.scheduling.annotation.EnableAsync;
|
|
10
|
-
import org.springframework.boot.SpringApplication;
|
|
11
|
-
|
|
12
|
-
@EnableAsync
|
|
13
|
-
@EnableDiscoveryClient
|
|
14
|
-
// @EnableYssCloudRedisCache // 请在确认 Redis 配置后取消注释
|
|
15
|
-
@EnableAspectJAutoProxy
|
|
16
|
-
// @EnableDistributedId // 请在确认分布式 ID 配置后取消注释
|
|
17
|
-
@EnableExcelMvc
|
|
18
|
-
@SpringBootApplication(scanBasePackages = {"com.yss.datamiddle", "com.yss.cloud"})
|
|
19
|
-
public class YssDatamiddleApplication {
|
|
20
|
-
/**
|
|
21
|
-
* 应用程序入口方法,启动 Spring Boot 应用
|
|
22
|
-
*
|
|
23
|
-
* @param args 启动参数
|
|
24
|
-
*/
|
|
25
|
-
public static void main(String[] args) {
|
|
26
|
-
SpringApplication.run(YssDatamiddleApplication.class, args);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
-- 用户表
|
|
2
|
-
CREATE TABLE `t_user` (
|
|
3
|
-
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
|
4
|
-
`username` varchar(50) NOT NULL COMMENT '用户名',
|
|
5
|
-
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
|
|
6
|
-
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1-启用,0-禁用',
|
|
7
|
-
`description` varchar(500) DEFAULT NULL COMMENT '描述',
|
|
8
|
-
`deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记:0-未删除,1-已删除',
|
|
9
|
-
`created_by` varchar(50) DEFAULT NULL COMMENT '创建人',
|
|
10
|
-
`created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
11
|
-
`last_modified_by` varchar(50) DEFAULT NULL COMMENT '最后修改人',
|
|
12
|
-
`last_modified_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
|
|
13
|
-
PRIMARY KEY (`id`),
|
|
14
|
-
UNIQUE KEY `uk_username` (`username`),
|
|
15
|
-
KEY `idx_status` (`status`),
|
|
16
|
-
KEY `idx_created_date` (`created_date`)
|
|
17
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
|
|
18
|
-
|
|
19
|
-
-- Leaf Alloc 表
|
|
20
|
-
CREATE TABLE `leaf_alloc` (
|
|
21
|
-
`biz_tag` varchar(128) NOT NULL COMMENT '业务标签',
|
|
22
|
-
`max_id` bigint(20) NOT NULL COMMENT '当前最大ID',
|
|
23
|
-
`step` int(11) NOT NULL COMMENT '步长',
|
|
24
|
-
`description` varchar(256) DEFAULT NULL COMMENT '描述',
|
|
25
|
-
`update_time` varchar(256) DEFAULT NULL COMMENT '更新时间',
|
|
26
|
-
PRIMARY KEY (`biz_tag`)
|
|
27
|
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Leaf号段分配表';
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
package {{base_package}}.domain.user.model;
|
|
2
|
-
|
|
3
|
-
import lombok.Data;
|
|
4
|
-
|
|
5
|
-
@Data
|
|
6
|
-
public class User {
|
|
7
|
-
|
|
8
|
-
private Long id;
|
|
9
|
-
|
|
10
|
-
private String username;
|
|
11
|
-
|
|
12
|
-
private String email;
|
|
13
|
-
|
|
14
|
-
private Integer status;
|
|
15
|
-
|
|
16
|
-
private String description;
|
|
17
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
package {{base_package}}.client.dto.cmd;
|
|
2
|
-
|
|
3
|
-
import com.yss.cloud.dto.CommandDTO;
|
|
4
|
-
import lombok.Data;
|
|
5
|
-
|
|
6
|
-
import javax.validation.constraints.Email;
|
|
7
|
-
import javax.validation.constraints.NotBlank;
|
|
8
|
-
import javax.validation.constraints.Size;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* 用户新增命令对象
|
|
12
|
-
*
|
|
13
|
-
* @author {{author}}
|
|
14
|
-
* @date {{date}}
|
|
15
|
-
*/
|
|
16
|
-
@Data
|
|
17
|
-
public class UserAddCmd extends CommandDTO {
|
|
18
|
-
|
|
19
|
-
@NotBlank(message = "用户名不能为空")
|
|
20
|
-
@Size(min = 3, max = 50, message = "用户名长度必须在3-50之间")
|
|
21
|
-
private String username;
|
|
22
|
-
|
|
23
|
-
@Email(message = "邮箱格式不正确")
|
|
24
|
-
private String email;
|
|
25
|
-
|
|
26
|
-
private String description;
|
|
27
|
-
}
|