@llryiop/avatar-boot-cli 1.0.0

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.
Files changed (77) hide show
  1. package/README.md +309 -0
  2. package/bin/cli.js +3 -0
  3. package/docs/plans/2026-03-12-avatar-boot-cli-design.md +73 -0
  4. package/docs/plans/2026-03-12-avatar-boot-cli-plan.md +681 -0
  5. package/package.json +28 -0
  6. package/src/index.js +78 -0
  7. package/src/prompts.js +78 -0
  8. package/src/template.js +37 -0
  9. package/src/transform.js +172 -0
  10. package/src/utils.js +34 -0
  11. package/templates/.claude/rules/architecture-redlines.md +146 -0
  12. package/templates/.claude/rules/code-review-standards.md +137 -0
  13. package/templates/.claude/rules/coding-standards.md +56 -0
  14. package/templates/.claude/rules/git-commit.md +59 -0
  15. package/templates/.claude/rules/layered-architecture.md +201 -0
  16. package/templates/.claude/rules/mybatis-plus.md +263 -0
  17. package/templates/.claude/rules/tech-stack.md +41 -0
  18. package/templates/.claude/rules/version.md +467 -0
  19. package/templates/.claude/settings.local.json +18 -0
  20. package/templates/.claude/skills/ai-tool-guide/SKILL.md +314 -0
  21. package/templates/.claude/skills/api-design/SKILL.md +200 -0
  22. package/templates/.claude/skills/api-doc-generator/SKILL.md +380 -0
  23. package/templates/.claude/skills/api-service-module-creator/SKILL.md +1114 -0
  24. package/templates/.claude/skills/avatar-boot-starter-feign/SKILL.md +243 -0
  25. package/templates/.claude/skills/avatar-boot-starter-job/SKILL.md +437 -0
  26. package/templates/.claude/skills/avatar-boot-starter-kafka/SKILL.md +580 -0
  27. package/templates/.claude/skills/avatar-boot-starter-mysql/SKILL.md +572 -0
  28. package/templates/.claude/skills/avatar-boot-starter-nacos/SKILL.md +901 -0
  29. package/templates/.claude/skills/avatar-boot-starter-oss/SKILL.md +594 -0
  30. package/templates/.claude/skills/avatar-boot-starter-redis/SKILL.md +586 -0
  31. package/templates/.claude/skills/avatar-boot-starter-rocketmq/SKILL.md +662 -0
  32. package/templates/.claude/skills/avatar-boot-starter-web/SKILL.md +1007 -0
  33. package/templates/.claude/skills/changelog-generator/SKILL.md +114 -0
  34. package/templates/.claude/skills/code-review/SKILL.md +239 -0
  35. package/templates/.claude/skills/crud-generator/SKILL.md +824 -0
  36. package/templates/.claude/skills/database-design/SKILL.md +377 -0
  37. package/templates/.claude/skills/deployment-config/SKILL.md +277 -0
  38. package/templates/.claude/skills/incident-analysis/SKILL.md +241 -0
  39. package/templates/.claude/skills/integration-test-generator/SKILL.md +496 -0
  40. package/templates/.claude/skills/prompt-engineering/SKILL.md +249 -0
  41. package/templates/.claude/skills/requirement-management/SKILL.md +244 -0
  42. package/templates/.claude/skills/security-audit/SKILL.md +330 -0
  43. package/templates/.claude/skills/test-case-design/SKILL.md +257 -0
  44. package/templates/.claude/skills/testing-workflow/SKILL.md +68 -0
  45. package/templates/.claude/skills/troubleshooting/SKILL.md +240 -0
  46. package/templates/CLAUDE.md +173 -0
  47. package/templates/README.md +303 -0
  48. package/templates/avatar-scaffold-api/pom.xml +41 -0
  49. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/api/LoginFeignClient.java +40 -0
  50. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/constant/LoginConstant.java +21 -0
  51. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/request/LoginRequest.java +17 -0
  52. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/request/RefreshTokenRequest.java +14 -0
  53. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/response/LoginResponse.java +31 -0
  54. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/response/TokenInfoResponse.java +25 -0
  55. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/enums/LoginTypeEnum.java +23 -0
  56. package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/exception/LoginException.java +23 -0
  57. package/templates/avatar-scaffold-service/k8s-app/Dockerfile +14 -0
  58. package/templates/avatar-scaffold-service/k8s-app/Dockerfile-arm64 +14 -0
  59. package/templates/avatar-scaffold-service/packaging/assembly.xml +16 -0
  60. package/templates/avatar-scaffold-service/pom.xml +150 -0
  61. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/Application.java +21 -0
  62. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/config/LoginConfig.java +20 -0
  63. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/controller/LoginController.java +37 -0
  64. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/converter/LoginConverter.java +54 -0
  65. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/feign/DemoFeign.java +21 -0
  66. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/entity/UserLoginEntity.java +33 -0
  67. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/entity/UserTokenEntity.java +39 -0
  68. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/mapper/UserLoginMapper.java +20 -0
  69. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/service/LoginService.java +22 -0
  70. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/service/impl/LoginServiceImpl.java +43 -0
  71. package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/utils/LoginUtils.java +31 -0
  72. package/templates/avatar-scaffold-service/src/main/resources/application-dev.yaml +29 -0
  73. package/templates/avatar-scaffold-service/src/main/resources/application-local.yaml +61 -0
  74. package/templates/avatar-scaffold-service/src/main/resources/application-prod.yaml +28 -0
  75. package/templates/avatar-scaffold-service/src/main/resources/application-test.yaml +28 -0
  76. package/templates/avatar-scaffold-service/src/main/resources/application.yaml +12 -0
  77. package/templates/pom.xml +98 -0
@@ -0,0 +1,314 @@
1
+ ---
2
+ name: ai-tool-guide
3
+ description: 当需要了解 AI 辅助开发工具使用方法时使用此技能 - 涵盖 Claude Code、Cursor 等 AI 工具的团队使用规范和最佳实践。触发条件:AI工具, Claude Code使用, Cursor使用, AI辅助开发, 工具指南
4
+ ---
5
+
6
+ # AI 工具使用指南
7
+
8
+ > 团队级培训材料 - Avatar Boot 项目组
9
+
10
+ ## 1. 概述
11
+
12
+ AI 辅助开发工具是团队提升研发效率的核心手段之一。在 Avatar Boot 项目中,我们主要使用以下两款 AI 工具:
13
+
14
+ - **Claude Code**:Anthropic 官方 CLI 工具,擅长大规模代码理解、多文件重构和自动化流程
15
+ - **Cursor**:AI-native IDE,擅长日常编码、实时补全和小范围修改
16
+
17
+ 两者定位互补,分别覆盖不同的开发场景。本指南旨在帮助团队成员快速上手这些工具,并建立统一的使用规范,确保 AI 辅助开发的质量和一致性。
18
+
19
+ ### 核心价值
20
+
21
+ - 加速 CRUD 等重复性编码工作,将开发者精力聚焦于业务逻辑设计
22
+ - 提供代码审查的辅助视角,降低人工 CR 的遗漏率
23
+ - 快速生成测试用例,提升测试覆盖率
24
+ - 辅助技术方案设计和文档撰写
25
+
26
+ ## 2. Claude Code 使用指南
27
+
28
+ ### 2.1 安装与配置
29
+
30
+ ```bash
31
+ # 安装 Claude Code
32
+ npm install -g @anthropic-ai/claude-code
33
+
34
+ # 在项目根目录启动
35
+ cd /path/to/avatar-scaffold-project
36
+ claude
37
+ ```
38
+
39
+ **权限设置(settings.local.json)**:
40
+
41
+ Claude Code 通过 `settings.local.json` 控制工具权限。团队建议配置:
42
+
43
+ ```json
44
+ {
45
+ "permissions": {
46
+ "allow": [
47
+ "Read",
48
+ "Edit",
49
+ "Write",
50
+ "Glob",
51
+ "Grep",
52
+ "Bash(git *)",
53
+ "Bash(mvn *)",
54
+ "Bash(java *)"
55
+ ],
56
+ "deny": [
57
+ "Bash(rm -rf *)",
58
+ "Bash(git push --force *)"
59
+ ]
60
+ }
61
+ }
62
+ ```
63
+
64
+ 建议将高危操作(如强制推送、删除文件)设为需要确认或禁止,避免误操作。
65
+
66
+ ### 2.2 核心工作流
67
+
68
+ **代码生成**:
69
+ - 提供明确的需求描述、技术栈约束和输出格式要求
70
+ - 示例:「基于 Avatar Boot 框架,为用户模块生成 CRUD REST API,使用 Result<T> 统一返回,Service 层用接口+实现分离」
71
+
72
+ **代码审查**:
73
+ - 让 Claude Code 先读取目标文件,再执行审查
74
+ - 示例:「审查 UserService.java,关注安全性、性能和编码规范」
75
+
76
+ **重构**:
77
+ - 先描述当前问题,再给出期望目标
78
+ - 示例:「将 OrderService 中的订单状态流转逻辑提取为独立的状态机类」
79
+
80
+ **测试生成**:
81
+ - 提供被测类和关键业务逻辑说明
82
+ - 示例:「为 PaymentService.processPayment() 生成单元测试,覆盖正常支付、余额不足、重复支付场景」
83
+
84
+ ### 2.3 Rules 和 Skills 机制
85
+
86
+ Claude Code 通过项目中的 `.claude/` 目录实现团队定制化:
87
+
88
+ - **CLAUDE.md**:项目级上下文注入文件,Claude Code 启动时自动读取。包含项目技术栈、架构约束、编码规范等核心信息
89
+ - **Rules(.claude/rules/)**:编码规则文件,定义代码风格、命名规范、架构约束等。Claude Code 在生成代码时会自动遵循
90
+ - **Skills(.claude/skills/)**:技能文件,针对特定场景的详细指导文档。按需加载,提供深度上下文
91
+
92
+ 团队成员可以通过提交 PR 来完善这些配置文件,持续优化 AI 输出质量。
93
+
94
+ ### 2.4 常用命令
95
+
96
+ | 命令 | 说明 |
97
+ |------|------|
98
+ | `/compact` | 压缩对话上下文,释放 Token 空间 |
99
+ | `/clear` | 清空当前对话,重新开始 |
100
+ | `/cost` | 查看当前会话的 Token 消耗 |
101
+ | `Shift+Tab` | 在对话中切换执行计划模式 |
102
+
103
+ **多 Agent 协作**:
104
+
105
+ 对于大规模任务,可以使用多 Agent 模式:
106
+ - 主 Agent 负责整体规划和任务拆分
107
+ - 子 Agent 并行执行独立的子任务(如同时生成多个模块的代码)
108
+ - 适合场景:初始化项目、批量生成 CRUD、全量重构
109
+
110
+ ### 2.5 CLAUDE.md 的作用
111
+
112
+ `CLAUDE.md` 是项目级上下文注入文件,位于项目根目录。Claude Code 启动时自动读取其内容作为背景知识。
113
+
114
+ 典型内容包括:
115
+ - 项目简介和技术栈(Spring Boot 3.5.3, Java 21, Avatar Boot 框架)
116
+ - 项目结构说明
117
+ - 核心架构约束(统一返回 Result<T>、分层架构等)
118
+ - 编码规范摘要
119
+ - 常用命令(构建、测试、部署)
120
+
121
+ ### 2.6 最佳实践
122
+
123
+ 1. **提供足够上下文**:告诉 AI 你的技术栈、项目约束和期望输出格式
124
+ 2. **分阶段任务**:复杂任务拆分为多个小步骤,逐步完成
125
+ 3. **先读后改**:让 AI 先读取现有代码,理解上下文后再进行修改
126
+ 4. **明确范围**:指定要修改的文件、方法或模块,避免 AI 过度修改
127
+ 5. **验证输出**:AI 生成的代码必须经过编译、测试和人工审查
128
+ 6. **善用 /compact**:当对话过长时及时压缩,保持上下文质量
129
+
130
+ ### 2.7 注意事项
131
+
132
+ - **代码审查仍需人工确认**:AI 审查是辅助手段,不能替代人工 CR
133
+ - **敏感信息不要粘贴**:数据库密码、API Key、内部 IP 等不要出现在对话中
134
+ - **不要盲目信任 AI 输出**:特别是涉及安全、并发、事务等关键逻辑
135
+ - **注意 Token 消耗**:大文件和长对话会快速消耗 Token 配额
136
+
137
+ ## 3. Cursor 使用指南
138
+
139
+ ### 3.1 安装与配置
140
+
141
+ 1. 从 [cursor.com](https://cursor.com) 下载并安装 Cursor IDE
142
+ 2. 登录账号并配置模型(推荐使用 Claude 系列模型)
143
+ 3. 安装必要的 Java 扩展(Extension Pack for Java、Spring Boot Extension Pack)
144
+ 4. 配置 JDK 21 路径
145
+
146
+ ### 3.2 核心交互方式
147
+
148
+ **Tab 补全**:
149
+ - 实时代码补全,根据当前上下文自动建议
150
+ - 适合日常编码,快速补全方法体、参数、注释
151
+ - 按 Tab 接受建议,按 Esc 忽略
152
+
153
+ **Cmd+K 内联编辑**:
154
+ - 选中代码后按 Cmd+K,输入修改指令
155
+ - 适合小范围修改:重命名、添加注解、调整逻辑
156
+ - 示例:选中一个方法 → Cmd+K → 「添加参数校验和 Javadoc」
157
+
158
+ **Chat 面板(Cmd+L)**:
159
+ - 侧边栏对话窗口,支持多轮对话
160
+ - 适合复杂问题讨论、代码解释、方案设计
161
+ - 可通过 @file 引用项目文件作为上下文
162
+
163
+ ### 3.3 .cursorrules 文件配置
164
+
165
+ 类似于 Claude Code 的 `.claude/` 目录,Cursor 通过项目根目录的 `.cursorrules` 文件注入项目级规则。
166
+
167
+ 建议配置内容:
168
+ - 项目技术栈描述
169
+ - 编码规范要点
170
+ - 架构约束(分层结构、统一返回格式等)
171
+ - 常用的代码模板和模式
172
+
173
+ ### 3.4 常用场景
174
+
175
+ - **函数编写**:描述函数功能和签名,让 Cursor 生成实现
176
+ - **Bug 修复**:粘贴错误堆栈,让 Cursor 分析原因并建议修复
177
+ - **重构**:选中代码,描述重构目标(提取方法、消除重复等)
178
+ - **文档生成**:选中类或方法,让 Cursor 生成 Javadoc
179
+ - **SQL 编写**:描述查询需求,生成 MyBatis XML 或注解 SQL
180
+
181
+ ### 3.5 最佳实践
182
+
183
+ 1. **精确选中上下文**:只选中与任务相关的代码,避免上下文噪音
184
+ 2. **使用 @file 引用**:在 Chat 中通过 @file 引用相关文件,提供完整上下文
185
+ 3. **分步骤提问**:复杂任务拆分为多步,逐步引导 Cursor 完成
186
+ 4. **利用内联编辑**:小修改优先使用 Cmd+K,避免切换到 Chat 面板
187
+ 5. **检查 Diff**:接受 Cursor 的修改前,仔细查看 Diff 视图
188
+
189
+ ## 4. 工具选型建议
190
+
191
+ ### Claude Code 适合的场景
192
+
193
+ - **大范围重构**:跨多个文件的架构调整、模式迁移
194
+ - **多文件修改**:需要同时修改多个类的关联变更
195
+ - **自动化流程**:批量生成代码、自动化脚本编写
196
+ - **代码审查**:系统性地审查模块代码,生成审查报告
197
+ - **技术方案设计**:基于现有代码分析,输出设计文档
198
+
199
+ ### Cursor 适合的场景
200
+
201
+ - **日常编码**:编写新功能、实现业务逻辑
202
+ - **快速补全**:方法体补全、参数补全、注释补全
203
+ - **小范围修改**:修改单个文件中的局部逻辑
204
+ - **实时辅助**:编码过程中的即时建议和解答
205
+ - **学习理解**:理解不熟悉的代码片段
206
+
207
+ ### 组合使用策略
208
+
209
+ 推荐的工作流:
210
+ 1. **需求分析阶段**:使用 Claude Code 分析需求,生成技术方案
211
+ 2. **编码阶段**:使用 Cursor 进行日常编码,利用实时补全提效
212
+ 3. **重构阶段**:使用 Claude Code 执行跨文件重构
213
+ 4. **审查阶段**:使用 Claude Code 进行 AI 预审,再进行人工 CR
214
+ 5. **测试阶段**:使用 Claude Code 批量生成测试用例
215
+
216
+ ## 5. 团队协作规范
217
+
218
+ ### 5.1 AI 生成代码必须经过 CR
219
+
220
+ 所有 AI 生成或辅助生成的代码,必须经过至少一位团队成员的 Code Review。重点关注:
221
+ - 业务逻辑正确性
222
+ - 安全性(SQL 注入、XSS、权限校验等)
223
+ - 性能影响(N+1 查询、不必要的循环等)
224
+ - 是否符合团队编码规范
225
+
226
+ ### 5.2 提交信息中标注 AI 辅助
227
+
228
+ 使用 AI 辅助生成的代码,在 Git 提交信息中添加 Co-Authored-By 标记:
229
+
230
+ ```
231
+ feat(user): add user CRUD API
232
+
233
+ Co-Authored-By: Claude Code <noreply@anthropic.com>
234
+ ```
235
+
236
+ 这有助于后续统计 AI 辅助代码的比例和质量。
237
+
238
+ ### 5.3 共享有效的 Prompt 到团队知识库
239
+
240
+ 发现高质量的 Prompt 模板后,提交到项目的 `.claude/skills/` 或团队知识库中,供其他成员复用。
241
+
242
+ ### 5.4 定期回顾 AI 输出质量
243
+
244
+ 每月进行一次 AI 辅助开发效果回顾:
245
+ - 分析 AI 代码采纳率和缺陷率
246
+ - 收集团队成员的使用反馈
247
+ - 优化 Rules 和 Skills 配置
248
+ - 更新 Prompt 模板库
249
+
250
+ ## 6. 上下文管理
251
+
252
+ ### Compact 规则
253
+
254
+ - **触发条件**: 上下文超过 150K tokens 时主动执行 `/compact`
255
+ - **保留内容**: 已修改文件列表、测试命令和结果、当前阶段进度、架构决策记录
256
+ - **重新加载**: compact 后必须重新读取 `CLAUDE.md`
257
+
258
+ ### 分阶段工作
259
+
260
+ 每个阶段必须有明确的:
261
+ - **输入**: 需要哪些信息和资源
262
+ - **目标**: 要完成什么任务
263
+ - **验收标准**: 如何判断任务完成
264
+
265
+ ### 文件读取约束
266
+
267
+ - 优先使用 `.claudeignore` 排除无关目录(target/、.idea/、node_modules/、logs/)
268
+ - 明确指定读取范围(如"只读 src/login/ 目录")
269
+ - 禁止无目的的全局搜索
270
+ - 使用 subagent 探索陌生代码库
271
+
272
+ ## 7. 常见问题
273
+
274
+ ### Q: Context 过长怎么办?
275
+
276
+ **A**:
277
+ 1. 使用 `/compact` 命令压缩对话上下文
278
+ 2. 使用 `/clear` 重新开始新对话
279
+ 3. 将大任务拆分为独立的小任务,每个任务一个新对话
280
+ 4. 在 Prompt 中只提供必要的上下文,避免粘贴大量无关代码
281
+
282
+ ### Q: AI 生成代码不符合规范怎么办?
283
+
284
+ **A**:
285
+ 1. 检查并完善 `.claude/rules/` 中的规则文件,确保规范被正确注入
286
+ 2. 在 Prompt 中明确指定要遵循的规范(如"使用 Result<T> 统一返回")
287
+ 3. 提供符合规范的代码示例作为 Few-shot
288
+ 4. 生成后使用 Checkstyle/SpotBugs 等工具自动检查
289
+
290
+ ### Q: 如何提升 AI 输出质量?
291
+
292
+ **A**:
293
+ 1. **提供精确上下文**:技术栈、约束条件、现有代码结构
294
+ 2. **明确输出格式**:告诉 AI 你期望什么样的输出(代码、文档、Checklist)
295
+ 3. **使用 Chain-of-Thought**:让 AI 先分析问题,再给出解决方案
296
+ 4. **迭代优化**:根据输出结果调整 Prompt,逐步逼近期望结果
297
+ 5. **参考 Prompt 模板**:使用团队积累的 Prompt 模板库(见 prompt-engineering Skill)
298
+
299
+ ### Q: Claude Code 和 Cursor 都可以用,怎么选?
300
+
301
+ **A**:参考第 4 节「工具选型建议」。简单规则:
302
+ - 需要修改 3 个以上文件 → Claude Code
303
+ - 单文件日常编码 → Cursor
304
+ - 代码审查和方案设计 → Claude Code
305
+ - 快速补全和小修改 → Cursor
306
+
307
+ ### Q: 团队新人如何快速上手?
308
+
309
+ **A**:
310
+ 1. 阅读本指南,了解工具定位和基本用法
311
+ 2. 阅读 `prompt-engineering` Skill,学习 Prompt 编写技巧
312
+ 3. 从简单场景开始(如生成 CRUD),逐步尝试复杂任务
313
+ 4. 参考团队 Prompt 模板库中的示例
314
+ 5. 遇到问题在团队群中讨论,积累经验
@@ -0,0 +1,200 @@
1
+ ---
2
+ name: api-design
3
+ description: |
4
+ API 接口设计技能。当用户提到以下关键词时触发:
5
+ API design, RESTful, 接口设计, URL规范, 接口规范, 端点设计, endpoint design
6
+
7
+ 本技能提供 Avatar Boot 框架下的 RESTful API 设计规范、URL命名约定、
8
+ 请求响应结构、分页设计和错误处理等完整指导。
9
+ ---
10
+
11
+ # API 接口设计技能
12
+
13
+ ## 适用场景
14
+
15
+ - 设计新的 RESTful API 接口
16
+ - 审查现有接口的规范性
17
+ - 统一项目接口风格
18
+ - 制定接口文档结构
19
+
20
+ ## 设计工作流
21
+
22
+ 1. **需求理解** — 明确接口的业务目的和调用方
23
+ 2. **资源识别** — 确定核心资源及其层级关系
24
+ 3. **URL 设计** — 遵循 RESTful 命名规范
25
+ 4. **方法选择** — 映射合适的 HTTP 方法
26
+ 5. **请求/响应定义** — 设计 DTO 结构
27
+ 6. **错误处理** — 定义异常响应格式
28
+ 7. **文档编写** — 补充接口说明和示例
29
+
30
+ ## URL 命名规范
31
+
32
+ ### 基本规则
33
+
34
+ - 使用 **kebab-case**(短横线分隔),禁止 camelCase 或 snake_case
35
+ - 面向资源命名,使用名词而非动词
36
+ - 统一前缀 `/api`
37
+ - 资源名使用复数形式
38
+
39
+ ### 示例
40
+
41
+ ```
42
+ 正确:
43
+ GET /api/user-infos # 查询用户信息列表
44
+ GET /api/user-infos/{id} # 查询单个用户信息
45
+ POST /api/user-infos # 创建用户信息
46
+ PUT /api/user-infos/{id} # 更新用户信息
47
+ DELETE /api/user-infos/{id} # 删除用户信息
48
+
49
+ GET /api/order-items # 查询订单项列表
50
+ GET /api/system-configs # 查询系统配置列表
51
+
52
+ 错误:
53
+ GET /api/getUserInfo # 动词命名
54
+ GET /api/user_info # snake_case
55
+ GET /api/userInfo # camelCase
56
+ ```
57
+
58
+ ### 嵌套资源
59
+
60
+ ```
61
+ GET /api/users/{userId}/orders # 用户的订单列表
62
+ GET /api/users/{userId}/orders/{id} # 用户的某个订单
63
+ POST /api/users/{userId}/addresses # 为用户添加地址
64
+ ```
65
+
66
+ ## HTTP 方法映射
67
+
68
+ | 方法 | 用途 | 幂等性 | 请求体 | 典型状态码 |
69
+ |----------|-----------|--------|--------|------------------|
70
+ | `GET` | 查询资源 | 是 | 无 | 200 |
71
+ | `POST` | 创建资源 | 否 | 有 | 200 |
72
+ | `PUT` | 全量更新 | 是 | 有 | 200 |
73
+ | `DELETE` | 删除资源 | 是 | 无 | 200 |
74
+
75
+ > 注意:Avatar Boot 统一使用 `Result<T>` 封装,HTTP 状态码始终返回 200,业务状态通过 Result.code 区分。
76
+
77
+ ## 强制 Result<T> 封装
78
+
79
+ > 所有接口响应必须使用 `Result<T>` 统一封装。Result 结构定义和代码示例详见 [architecture-redlines.md](../../rules/architecture-redlines.md#result-响应格式)
80
+
81
+ ```java
82
+ @GetMapping("/{id}")
83
+ public Result<UserInfoVO> getById(@PathVariable Long id) {
84
+ return Result.success(userInfoService.getById(id));
85
+ }
86
+ ```
87
+
88
+ ## 请求/响应 DTO 约定
89
+
90
+ ### 命名规范
91
+
92
+ | 类型 | 命名格式 | 示例 |
93
+ |-----------|------------------------|--------------------------|
94
+ | 创建请求 | `XxxCreateDTO` | `UserInfoCreateDTO` |
95
+ | 更新请求 | `XxxUpdateDTO` | `UserInfoUpdateDTO` |
96
+ | 查询请求 | `XxxQueryDTO` | `UserInfoQueryDTO` |
97
+ | 响应对象 | `XxxVO` | `UserInfoVO` |
98
+ | 分页查询 | `XxxPageQueryDTO` | `UserInfoPageQueryDTO` |
99
+
100
+ ### DTO 示例
101
+
102
+ ```java
103
+ @Data
104
+ public class UserInfoCreateDTO {
105
+ @NotBlank(message = "用户名不能为空")
106
+ @Size(max = 50, message = "用户名长度不超过50")
107
+ private String username;
108
+
109
+ @NotBlank(message = "手机号不能为空")
110
+ @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
111
+ private String phone;
112
+
113
+ @Email(message = "邮箱格式不正确")
114
+ private String email;
115
+ }
116
+ ```
117
+
118
+ ## 分页设计
119
+
120
+ ### 请求参数
121
+
122
+ ```java
123
+ @Data
124
+ public class UserInfoPageQueryDTO {
125
+ @Min(value = 1, message = "页码最小为1")
126
+ private Integer pageNum = 1;
127
+
128
+ @Min(value = 1, message = "每页条数最小为1")
129
+ @Max(value = 100, message = "每页条数最大为100")
130
+ private Integer pageSize = 10;
131
+
132
+ /** 业务查询条件 */
133
+ private String username;
134
+ private Integer status;
135
+ }
136
+ ```
137
+
138
+ ### Controller 使用
139
+
140
+ ```java
141
+ @PostMapping("/page")
142
+ public Result<IPage<UserInfoVO>> page(@RequestBody @Valid UserInfoPageQueryDTO dto) {
143
+ IPage<UserInfoVO> page = userInfoService.page(dto);
144
+ return Result.success(page);
145
+ }
146
+ ```
147
+
148
+ ### Service 层
149
+
150
+ ```java
151
+ public IPage<UserInfoVO> page(UserInfoPageQueryDTO dto) {
152
+ Page<UserInfo> page = new Page<>(dto.getPageNum(), dto.getPageSize());
153
+ LambdaQueryWrapper<UserInfo> wrapper = new LambdaQueryWrapper<UserInfo>()
154
+ .like(StringUtils.isNotBlank(dto.getUsername()), UserInfo::getUsername, dto.getUsername())
155
+ .eq(dto.getStatus() != null, UserInfo::getStatus, dto.getStatus())
156
+ .orderByDesc(UserInfo::getCreateTime);
157
+ Page<UserInfo> result = userInfoMapper.selectPage(page, wrapper);
158
+ return result.convert(this::convertToVO);
159
+ }
160
+ ```
161
+
162
+ ## 错误响应约定
163
+
164
+ ```json
165
+ {
166
+ "code": 10001,
167
+ "message": "用户名已存在",
168
+ "data": null
169
+ }
170
+ ```
171
+
172
+ ### 常用错误码段
173
+
174
+ | 错误码范围 | 含义 |
175
+ |-----------------|--------------------|
176
+ | 0 | 成功 |
177
+ | 10000 - 19999 | 通用业务错误 |
178
+ | 20000 - 29999 | 用户模块错误 |
179
+ | 30000 - 39999 | 订单模块错误 |
180
+ | 40000 - 49999 | 系统级错误 |
181
+
182
+ ## 最佳实践
183
+
184
+ 1. **接口幂等性** — POST 创建接口考虑幂等设计(Token 机制或唯一约束)
185
+ 2. **参数校验** — 使用 `@Valid` + JSR 303 注解,不要在 Controller 中手写校验逻辑
186
+ 3. **版本管理** — 大版本变更使用 URL 路径版本 `/api/v2/users`
187
+ 4. **批量操作** — 批量删除使用 `DELETE /api/users/batch`,请求体传 ID 列表
188
+ 5. **敏感数据** — 响应 VO 中脱敏处理手机号、身份证等字段
189
+ 6. **接口文档** — 每个接口配合 SpringDoc 注解生成文档
190
+
191
+ ## 设计检查清单
192
+
193
+ - [ ] URL 是否使用 kebab-case 和资源名词
194
+ - [ ] HTTP 方法是否正确映射 CRUD 操作
195
+ - [ ] 是否使用 `Result<T>` 统一封装响应
196
+ - [ ] 请求参数是否添加 `@Valid` 校验
197
+ - [ ] DTO 命名是否符合 `XxxCreateDTO/XxxVO` 约定
198
+ - [ ] 分页接口是否限制最大 pageSize
199
+ - [ ] 错误码是否在约定范围内
200
+ - [ ] 敏感字段是否脱敏处理