jvibe 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.
- package/JVIBE.md +75 -0
- package/LICENSE +21 -0
- package/README.md +175 -0
- package/bin/jvibe.js +62 -0
- package/package.json +50 -0
- package/scripts/init.js +118 -0
- package/scripts/status.js +98 -0
- package/scripts/upgrade.js +103 -0
- package/scripts/validate.js +132 -0
- package/template/.claude/agents/developer.md +172 -0
- package/template/.claude/agents/doc-sync.md +247 -0
- package/template/.claude/agents/planner.md +410 -0
- package/template/.claude/agents/reviewer.md +237 -0
- package/template/.claude/commands/JVibe:init.md +125 -0
- package/template/.claude/commands/JVibe:pr.md +159 -0
- package/template/.claude/commands/JVibe:status.md +160 -0
- package/template/.claude/hooks/load-context.sh +67 -0
- package/template/.claude/hooks/sync-feature-status.sh +172 -0
- package/template/.claude/hooks/sync-stats.sh +104 -0
- package/template/.claude/settings.json +43 -0
- package/template/README.md +144 -0
- package/template/docs/core//345/212/237/350/203/275/346/270/205/345/215/225.md +306 -0
- package/template/docs/core//350/247/204/350/214/203/346/226/207/346/241/243.md +309 -0
- package/template/docs/core//351/231/204/345/212/240/346/235/220/346/226/231.md +423 -0
- package/template/docs/core//351/241/271/347/233/256/346/226/207/346/241/243.md +263 -0
- package/template/docs/project/.gitkeep +0 -0
- package/template/docs/project/README.md +83 -0
- package/template/docs/project/api.md.example +145 -0
- package/template/docs/project/database.md.example +172 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
# 附加材料(Additional Materials)
|
|
2
|
+
|
|
3
|
+
> **目的**:提供开发过程中需要的规范、技术标准和特殊注意事项的**快速索引入口**
|
|
4
|
+
> **原则**:本文件只提供入口与最小必要上下文,内容以链接为主;需要时再补充条目,不做过度预设
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 0. 使用方式与约定
|
|
9
|
+
|
|
10
|
+
### 0.1 什么时候查阅本文档
|
|
11
|
+
|
|
12
|
+
**MUST场景**(必须查阅):
|
|
13
|
+
- 创建PR前:检查是否命中任何条目的"触发条件",如命中需在PR描述中引用该条目ID
|
|
14
|
+
- 代码审查时:Reviewer发现问题时引用对应条目ID
|
|
15
|
+
- 技术方案设计时:查阅相关技术细节和规范
|
|
16
|
+
|
|
17
|
+
**SHOULD场景**(应该查阅):
|
|
18
|
+
- 开发新功能前:查看是否有相关技术约束
|
|
19
|
+
- 遇到特殊平台规范、实现约束时
|
|
20
|
+
- UI/UX实现不确定时:查阅设计风格参考
|
|
21
|
+
|
|
22
|
+
### 0.2 写法约束(保持可维护)
|
|
23
|
+
|
|
24
|
+
**每条记录MUST满足**:
|
|
25
|
+
- 控制在**10行以内**(长内容只给链接)
|
|
26
|
+
- 包含:**ID / 一句话结论 / 触发条件 / 关联文件 / 链接**
|
|
27
|
+
- 外链不在正文散落:统一登记到【Links字典】,正文只写`L-xxx`
|
|
28
|
+
|
|
29
|
+
**分类ID命名规则**:
|
|
30
|
+
- 编码规范:`CS-XXX` (Coding Standards)
|
|
31
|
+
- API设计规范:`API-XXX`
|
|
32
|
+
- 数据库设计规范:`DB-XXX`
|
|
33
|
+
- 安全检查清单:`SEC-XXX`
|
|
34
|
+
- 测试策略:`TEST-XXX`
|
|
35
|
+
- 技术细节:`TD-XXX`
|
|
36
|
+
- 设计风格:`DS-XXX`
|
|
37
|
+
- 用户记忆:`UM-YYYYMMDD-XXX`
|
|
38
|
+
|
|
39
|
+
### 0.3 如何扩展新分类
|
|
40
|
+
|
|
41
|
+
当需要添加新分类时(如"性能优化规范"):
|
|
42
|
+
1. 在本文档添加新章节,遵循"索引表 + 条目模板"结构
|
|
43
|
+
2. 定义新的ID前缀(如`PERF-XXX`)
|
|
44
|
+
3. 在0.2写法约束中添加ID命名规则
|
|
45
|
+
4. 更新JVibe技术规范.md中的附加材料说明
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 1. 编码规范(Coding Standards)
|
|
50
|
+
|
|
51
|
+
> 记录项目代码风格、设计原则、命名规范等
|
|
52
|
+
|
|
53
|
+
### 1.1 索引表
|
|
54
|
+
|
|
55
|
+
| ID | 主题 | 一句话结论 | 触发条件 | 关联文件 | 规范链接 | 状态 |
|
|
56
|
+
|---|---|---|---|---|---|---|
|
|
57
|
+
| CS-001 | SOLID原则检查 | 每个模块/类/函数必须遵循单一职责原则 | 新增模块、类、函数 | `src/**/*.ts` | L-101 | active |
|
|
58
|
+
| CS-002 | 命名规范 | 使用语义化命名,避免缩写和拼音 | 所有代码文件 | `src/**/*` | L-102 | active |
|
|
59
|
+
| CS-003 | 函数复杂度限制 | 单个函数不超过50行,圈复杂度≤10 | 新增/修改函数 | `src/**/*.ts` | L-103 | active |
|
|
60
|
+
|
|
61
|
+
### 1.2 条目模板
|
|
62
|
+
|
|
63
|
+
#### CS-XXX:<主题名>
|
|
64
|
+
- **一句话结论**:
|
|
65
|
+
- **触发条件**(命中任一即可):
|
|
66
|
+
- 路径:`...`
|
|
67
|
+
- 变更类型:新增/修改/删除
|
|
68
|
+
- 关键字:`...`
|
|
69
|
+
- **关联文件**(项目内):
|
|
70
|
+
- `...`
|
|
71
|
+
- **必须注意点**(最多3-5条):
|
|
72
|
+
1. ...
|
|
73
|
+
2. ...
|
|
74
|
+
- **规范链接**:L-xxx
|
|
75
|
+
- **验收标准**(可选):
|
|
76
|
+
- ...
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 2. API设计规范(API Design Standards)
|
|
81
|
+
|
|
82
|
+
> 记录RESTful API设计原则、响应格式、错误码规范等
|
|
83
|
+
|
|
84
|
+
### 2.1 索引表
|
|
85
|
+
|
|
86
|
+
| ID | 主题 | 一句话结论 | 触发条件 | 关联文件 | 规范链接 | 状态 |
|
|
87
|
+
|---|---|---|---|---|---|---|
|
|
88
|
+
| API-001 | RESTful规范 | 使用标准HTTP方法,资源命名使用复数名词 | 新增/修改API端点 | `src/routes/**/*.ts` | L-201 | active |
|
|
89
|
+
| API-002 | 统一响应格式 | 所有API响应必须包含code、message、data字段 | 新增/修改API端点 | `src/controllers/**/*.ts` | L-202 | active |
|
|
90
|
+
| API-003 | 错误码规范 | 使用标准HTTP状态码 + 业务错误码 | 新增错误处理 | `src/errors/**/*.ts` | L-203 | active |
|
|
91
|
+
|
|
92
|
+
### 2.2 条目模板
|
|
93
|
+
|
|
94
|
+
#### API-XXX:<主题名>
|
|
95
|
+
- **一句话结论**:
|
|
96
|
+
- **触发条件**:
|
|
97
|
+
- 路径:`...`
|
|
98
|
+
- 变更类型:...
|
|
99
|
+
- **关联文件**:
|
|
100
|
+
- `...`
|
|
101
|
+
- **必须注意点**:
|
|
102
|
+
1. ...
|
|
103
|
+
- **规范链接**:L-xxx
|
|
104
|
+
- **示例**(可选):
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"code": 200,
|
|
108
|
+
"message": "success",
|
|
109
|
+
"data": {}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 3. 数据库设计规范(Database Design Standards)
|
|
116
|
+
|
|
117
|
+
> 记录数据库表设计、索引策略、迁移规范等
|
|
118
|
+
|
|
119
|
+
### 3.1 索引表
|
|
120
|
+
|
|
121
|
+
| ID | 主题 | 一句话结论 | 触发条件 | 关联文件 | 规范链接 | 状态 |
|
|
122
|
+
|---|---|---|---|---|---|---|
|
|
123
|
+
| DB-001 | 表命名规范 | 使用snake_case,表名使用复数 | 新增/修改数据表 | `prisma/schema.prisma` | L-301 | active |
|
|
124
|
+
| DB-002 | 索引设计原则 | 外键、查询条件字段必须建索引 | 新增/修改表结构 | `prisma/migrations/**/*.sql` | L-302 | active |
|
|
125
|
+
| DB-003 | 迁移脚本规范 | 不可直接修改Schema,必须通过migration | 数据库变更 | `prisma/` | L-303 | active |
|
|
126
|
+
|
|
127
|
+
### 3.2 条目模板
|
|
128
|
+
|
|
129
|
+
#### DB-XXX:<主题名>
|
|
130
|
+
- **一句话结论**:
|
|
131
|
+
- **触发条件**:
|
|
132
|
+
- 路径:`...`
|
|
133
|
+
- 变更类型:...
|
|
134
|
+
- **关联文件**:
|
|
135
|
+
- `...`
|
|
136
|
+
- **必须注意点**:
|
|
137
|
+
1. ...
|
|
138
|
+
- **规范链接**:L-xxx
|
|
139
|
+
- **示例**(可选):
|
|
140
|
+
```sql
|
|
141
|
+
CREATE TABLE users (
|
|
142
|
+
id UUID PRIMARY KEY,
|
|
143
|
+
email VARCHAR(255) UNIQUE NOT NULL
|
|
144
|
+
);
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 4. 安全检查清单(Security Checklist)
|
|
150
|
+
|
|
151
|
+
> 记录安全审查要点、常见漏洞防范措施
|
|
152
|
+
|
|
153
|
+
### 4.1 索引表
|
|
154
|
+
|
|
155
|
+
| ID | 主题 | 一句话结论 | 触发条件 | 关联文件 | 规范链接 | 状态 |
|
|
156
|
+
|---|---|---|---|---|---|---|
|
|
157
|
+
| SEC-001 | SQL注入防范 | 使用参数化查询,禁止字符串拼接SQL | 数据库查询相关代码 | `src/**/*.ts` | L-401 | active |
|
|
158
|
+
| SEC-002 | XSS防范 | 用户输入必须转义,使用Content Security Policy | 前端渲染用户输入 | `src/frontend/**/*.tsx` | L-402 | active |
|
|
159
|
+
| SEC-003 | 敏感信息保护 | 密码、密钥不得硬编码,必须使用环境变量 | 所有代码文件 | `src/**/*` `.env` | L-403 | active |
|
|
160
|
+
|
|
161
|
+
### 4.2 条目模板
|
|
162
|
+
|
|
163
|
+
#### SEC-XXX:<主题名>
|
|
164
|
+
- **一句话结论**:
|
|
165
|
+
- **触发条件**:
|
|
166
|
+
- 路径:`...`
|
|
167
|
+
- 关键字:`password` `token` `secret`
|
|
168
|
+
- **关联文件**:
|
|
169
|
+
- `...`
|
|
170
|
+
- **检查方法**:
|
|
171
|
+
1. ...
|
|
172
|
+
- **规范链接**:L-xxx
|
|
173
|
+
- **反例/正例**(可选):
|
|
174
|
+
```typescript
|
|
175
|
+
// ❌ 反例
|
|
176
|
+
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
|
177
|
+
|
|
178
|
+
// ✅ 正例
|
|
179
|
+
const query = db.query('SELECT * FROM users WHERE id = ?', [userId]);
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 5. 测试策略(Testing Strategy)
|
|
185
|
+
|
|
186
|
+
> 记录测试覆盖要求、测试用例编写规范
|
|
187
|
+
|
|
188
|
+
### 5.1 索引表
|
|
189
|
+
|
|
190
|
+
| ID | 主题 | 一句话结论 | 触发条件 | 关联文件 | 规范链接 | 状态 |
|
|
191
|
+
|---|---|---|---|---|---|---|
|
|
192
|
+
| TEST-001 | 测试覆盖率要求 | 单元测试覆盖率≥80%,核心模块≥90% | 所有功能代码 | `src/**/*.test.ts` | L-501 | active |
|
|
193
|
+
| TEST-002 | 测试用例命名 | 使用"should + 预期行为"格式 | 所有测试文件 | `**/*.test.ts` `**/*.spec.ts` | L-502 | active |
|
|
194
|
+
| TEST-003 | Mock策略 | 外部依赖必须Mock,避免真实网络/DB调用 | 单元测试 | `src/**/*.test.ts` | L-503 | active |
|
|
195
|
+
|
|
196
|
+
### 5.2 条目模板
|
|
197
|
+
|
|
198
|
+
#### TEST-XXX:<主题名>
|
|
199
|
+
- **一句话结论**:
|
|
200
|
+
- **触发条件**:
|
|
201
|
+
- 路径:`...`
|
|
202
|
+
- 变更类型:...
|
|
203
|
+
- **关联文件**:
|
|
204
|
+
- `...`
|
|
205
|
+
- **必须注意点**:
|
|
206
|
+
1. ...
|
|
207
|
+
- **规范链接**:L-xxx
|
|
208
|
+
- **示例**(可选):
|
|
209
|
+
```typescript
|
|
210
|
+
describe('UserAuthService', () => {
|
|
211
|
+
it('should successfully register a new user', async () => {
|
|
212
|
+
// Arrange
|
|
213
|
+
const userData = { email: 'test@example.com', password: 'Test123!' };
|
|
214
|
+
|
|
215
|
+
// Act
|
|
216
|
+
const result = await authService.register(userData);
|
|
217
|
+
|
|
218
|
+
// Assert
|
|
219
|
+
expect(result.id).toBeDefined();
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 6. 技术细节(Technical Details)
|
|
227
|
+
|
|
228
|
+
> 记录项目特殊的技术约束/接入规范/实现注意点
|
|
229
|
+
|
|
230
|
+
### 6.1 索引表
|
|
231
|
+
|
|
232
|
+
| ID | 主题 | 一句话结论 | 触发条件 | 关联文件 | 规范链接 | 状态 |
|
|
233
|
+
|---|---|---|---|---|---|---|
|
|
234
|
+
| TD-001 | JWT Token配置 | accessToken过期时间15分钟,refreshToken 7天 | 认证相关代码 | `src/modules/auth/jwt.util.ts` | L-601 | active |
|
|
235
|
+
| TD-002 | WebSocket连接管理 | 使用Socket.io,支持断线重连和消息补发 | 实时通信代码 | `src/modules/chat/websocket.gateway.ts` | L-602 | active |
|
|
236
|
+
|
|
237
|
+
### 6.2 条目模板
|
|
238
|
+
|
|
239
|
+
#### TD-XXX:<主题名>
|
|
240
|
+
- **一句话结论**:
|
|
241
|
+
- **触发条件**(命中任一即可):
|
|
242
|
+
- 路径:`...`
|
|
243
|
+
- 变更类型:新增/修改/删除
|
|
244
|
+
- 关键字:`...`
|
|
245
|
+
- **关联文件**(项目内):
|
|
246
|
+
- `...`
|
|
247
|
+
- **必须注意点**(最多3-5条):
|
|
248
|
+
1. ...
|
|
249
|
+
2. ...
|
|
250
|
+
- **规范链接**:L-xxx
|
|
251
|
+
- **验收提示**(可选):
|
|
252
|
+
- 用例标题/检查点:...
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 7. 设计风格参考(Design Style Reference)
|
|
257
|
+
|
|
258
|
+
> 记录前端风格基线与设计资产入口,包括配色、字体、组件风格等
|
|
259
|
+
|
|
260
|
+
### 7.1 索引表
|
|
261
|
+
|
|
262
|
+
| ID | 范围 | 风格基线描述 | 资产入口 | 落地位置 | 状态 |
|
|
263
|
+
|---|---|---|---|---|---|
|
|
264
|
+
| DS-001 | Web前端 | 采用Material Design 3风格 | L-701 | `src/frontend/styles/theme.ts` | active |
|
|
265
|
+
| DS-002 | 移动端 | 遵循iOS HIG和Material Design Mobile | L-702 | `src/mobile/theme/` | active |
|
|
266
|
+
|
|
267
|
+
### 7.2 条目模板
|
|
268
|
+
|
|
269
|
+
#### DS-XXX:<风格主题名>
|
|
270
|
+
- **风格基线一句话**:
|
|
271
|
+
- **权威资产入口**:L-xxx
|
|
272
|
+
- **配色/Token**(可选,只写关键token):
|
|
273
|
+
- Primary:`#1976D2`
|
|
274
|
+
- Neutral:`#F5F5F5`
|
|
275
|
+
- Danger:`#D32F2F`
|
|
276
|
+
- **字体与排版**(可选):
|
|
277
|
+
- 字体:Roboto / PingFang SC
|
|
278
|
+
- 字号梯度:12/14/16/18/20/24
|
|
279
|
+
- **组件风格要点**(最多3-5条):
|
|
280
|
+
1. ...
|
|
281
|
+
2. ...
|
|
282
|
+
- **工程落地位置**:
|
|
283
|
+
- `...`
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 8. 用户记忆(User Memory)
|
|
288
|
+
|
|
289
|
+
> 记录用户在交互中明确强调的修改点/偏好/禁止项,避免迭代中丢失
|
|
290
|
+
|
|
291
|
+
### 8.1 索引表
|
|
292
|
+
|
|
293
|
+
| ID | 用户强调点摘要 | 影响范围 | 关联需求 | 关联文件 | 验收口径 | 状态 |
|
|
294
|
+
|---|---|---|---|---|---|---|
|
|
295
|
+
| UM-20260109-001 | 核心流程只专注开发,不包含监控和验证 | 开发流程文档 | - | `02-开发生命周期.md` | 流程终点为代码合并,不包含DevOps | done |
|
|
296
|
+
| UM-20260109-002 | 功能清单保持整洁,只有3要素 | 功能清单文档 | - | `模板-功能清单.md` | 每条功能只包含:名称+描述+TODO | done |
|
|
297
|
+
|
|
298
|
+
### 8.2 条目模板
|
|
299
|
+
|
|
300
|
+
#### UM-YYYYMMDD-XXX:<用户强调点标题>
|
|
301
|
+
- **用户强调点摘要**:
|
|
302
|
+
- **背景/原因**(可选,1-2句):
|
|
303
|
+
- **影响范围**:
|
|
304
|
+
- 功能/页面:...
|
|
305
|
+
- **关联需求/任务**:REQ-xxx / ISSUE-xxx
|
|
306
|
+
- **关联文件/页面**:
|
|
307
|
+
- `...`
|
|
308
|
+
- **验收口径**(必须写,尽量可测试):
|
|
309
|
+
1. ...
|
|
310
|
+
2. ...
|
|
311
|
+
- **状态**:open / doing / done / dropped(说明原因)
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## 9. Links字典(统一管理外链/资产链接)
|
|
316
|
+
|
|
317
|
+
> **目的**:避免正文出现大量URL;正文只引用`L-xxx`
|
|
318
|
+
|
|
319
|
+
### 9.1 编码规范相关
|
|
320
|
+
|
|
321
|
+
| Link ID | 名称 | 链接 |
|
|
322
|
+
|---|---|---|
|
|
323
|
+
| L-101 | SOLID原则详解 | https://en.wikipedia.org/wiki/SOLID |
|
|
324
|
+
| L-102 | 命名规范参考 | https://google.github.io/styleguide/ |
|
|
325
|
+
| L-103 | 代码复杂度工具 | https://eslint.org/docs/rules/complexity |
|
|
326
|
+
|
|
327
|
+
### 9.2 API设计规范相关
|
|
328
|
+
|
|
329
|
+
| Link ID | 名称 | 链接 |
|
|
330
|
+
|---|---|---|
|
|
331
|
+
| L-201 | RESTful API设计指南 | https://restfulapi.net/ |
|
|
332
|
+
| L-202 | HTTP状态码参考 | https://httpstatuses.com/ |
|
|
333
|
+
| L-203 | API错误处理最佳实践 | https://www.rfc-editor.org/rfc/rfc7807 |
|
|
334
|
+
|
|
335
|
+
### 9.3 数据库设计规范相关
|
|
336
|
+
|
|
337
|
+
| Link ID | 名称 | 链接 |
|
|
338
|
+
|---|---|---|
|
|
339
|
+
| L-301 | PostgreSQL命名规范 | https://www.postgresql.org/docs/current/sql-syntax.html |
|
|
340
|
+
| L-302 | 索引设计最佳实践 | https://use-the-index-luke.com/ |
|
|
341
|
+
| L-303 | Prisma迁移文档 | https://www.prisma.io/docs/concepts/components/prisma-migrate |
|
|
342
|
+
|
|
343
|
+
### 9.4 安全检查清单相关
|
|
344
|
+
|
|
345
|
+
| Link ID | 名称 | 链接 |
|
|
346
|
+
|---|---|---|
|
|
347
|
+
| L-401 | OWASP Top 10 | https://owasp.org/www-project-top-ten/ |
|
|
348
|
+
| L-402 | XSS防范指南 | https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html |
|
|
349
|
+
| L-403 | 密钥管理最佳实践 | https://cheatsheetseries.owasp.org/cheatsheets/Key_Management_Cheat_Sheet.html |
|
|
350
|
+
|
|
351
|
+
### 9.5 测试策略相关
|
|
352
|
+
|
|
353
|
+
| Link ID | 名称 | 链接 |
|
|
354
|
+
|---|---|---|
|
|
355
|
+
| L-501 | Jest测试框架 | https://jestjs.io/ |
|
|
356
|
+
| L-502 | 测试金字塔 | https://martinfowler.com/articles/practical-test-pyramid.html |
|
|
357
|
+
| L-503 | Mock最佳实践 | https://jestjs.io/docs/mock-functions |
|
|
358
|
+
|
|
359
|
+
### 9.6 技术细节相关
|
|
360
|
+
|
|
361
|
+
| Link ID | 名称 | 链接 |
|
|
362
|
+
|---|---|---|
|
|
363
|
+
| L-601 | JWT最佳实践 | https://jwt.io/introduction |
|
|
364
|
+
| L-602 | Socket.io文档 | https://socket.io/docs/v4/ |
|
|
365
|
+
|
|
366
|
+
### 9.7 设计风格相关
|
|
367
|
+
|
|
368
|
+
| Link ID | 名称 | 链接 |
|
|
369
|
+
|---|---|---|
|
|
370
|
+
| L-701 | Material Design 3 | https://m3.material.io/ |
|
|
371
|
+
| L-702 | iOS Human Interface Guidelines | https://developer.apple.com/design/human-interface-guidelines/ |
|
|
372
|
+
|
|
373
|
+
### 9.8 内部文档(模板)
|
|
374
|
+
|
|
375
|
+
| Link ID | 名称 | 链接 |
|
|
376
|
+
|---|---|---|
|
|
377
|
+
| L-900 | JVibe技术规范 | `./JVibe技术规范.md` |
|
|
378
|
+
| L-901 | 项目文档模板 | `./模板-项目文档.md` |
|
|
379
|
+
| L-902 | 功能清单模板 | `./模板-功能清单.md` |
|
|
380
|
+
| L-903 | 附加材料模板 | `./模板-附加材料.md` |
|
|
381
|
+
| L-904 | 规范文档模板 | `./模版-规范文档.md` |
|
|
382
|
+
|
|
383
|
+
### 9.9 内部文档(Core文档)
|
|
384
|
+
|
|
385
|
+
> Core 文档在实际项目中的位置,供文档间交叉引用
|
|
386
|
+
|
|
387
|
+
| Link ID | 名称 | 链接 |
|
|
388
|
+
|---|---|---|
|
|
389
|
+
| L-910 | 规范文档 | `./规范文档.md` |
|
|
390
|
+
| L-911 | 项目文档 | `./项目文档.md` |
|
|
391
|
+
| L-912 | 功能清单 | `./功能清单.md` |
|
|
392
|
+
| L-913 | 附加材料 | `./附加材料.md` |
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## 10. 使用指南
|
|
397
|
+
|
|
398
|
+
### 如何添加新条目
|
|
399
|
+
|
|
400
|
+
1. 确定条目所属分类(CS/API/DB/SEC/TEST/TD/DS/UM)
|
|
401
|
+
2. 分配唯一ID(如CS-004)
|
|
402
|
+
3. 在对应分类的索引表中添加一行
|
|
403
|
+
4. 在索引表下方添加详细条目(使用条目模板)
|
|
404
|
+
5. 如有外部链接,添加到Links字典
|
|
405
|
+
6. 在变更记录中记录新增
|
|
406
|
+
|
|
407
|
+
### 如何引用条目
|
|
408
|
+
|
|
409
|
+
在PR描述、代码审查、技术方案中使用:
|
|
410
|
+
- 引用条目:`参考 CS-001(SOLID原则检查)`
|
|
411
|
+
- 引用链接:`详见 L-101(SOLID原则详解)`
|
|
412
|
+
|
|
413
|
+
### 如何维护
|
|
414
|
+
|
|
415
|
+
**月度检查**(SHOULD):
|
|
416
|
+
- [ ] 检查链接有效性(使用markdown-link-check)
|
|
417
|
+
- [ ] 清理已完成/已失效的用户记忆条目
|
|
418
|
+
- [ ] 更新状态字段
|
|
419
|
+
|
|
420
|
+
**季度审查**(MUST):
|
|
421
|
+
- [ ] 评估条目使用频率,归档低频条目
|
|
422
|
+
- [ ] 收集团队反馈,补充高频问题的条目
|
|
423
|
+
- [ ] 同步更新JVibe技术规范.md中的附加材料说明
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# [项目名称] 项目文档
|
|
2
|
+
|
|
3
|
+
## 📌 文档说明
|
|
4
|
+
|
|
5
|
+
本文档帮助AI Agent快速理解:
|
|
6
|
+
1. 项目整体架构
|
|
7
|
+
2. 有哪些模块及其职责边界
|
|
8
|
+
3. 每个模块的代码落点和功能索引
|
|
9
|
+
|
|
10
|
+
**功能详细信息及状态**: 查看 [功能清单](./功能清单.md)(功能状态的唯一来源)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. 项目架构图
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
graph TD
|
|
18
|
+
A[前端 Frontend] --> B[API网关]
|
|
19
|
+
B --> C[认证模块 Auth]
|
|
20
|
+
B --> D[用户模块 User]
|
|
21
|
+
B --> E[聊天模块 Chat]
|
|
22
|
+
|
|
23
|
+
C --> F[数据库 PostgreSQL]
|
|
24
|
+
D --> F
|
|
25
|
+
E --> F
|
|
26
|
+
|
|
27
|
+
E --> G[Redis 缓存]
|
|
28
|
+
E --> H[WebSocket 服务]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. 技术栈版本
|
|
34
|
+
|
|
35
|
+
| 分类 | 技术 | 版本 |
|
|
36
|
+
|------|------|------|
|
|
37
|
+
| **前端** | React | 18.2.0 |
|
|
38
|
+
| | TypeScript | 5.3.0 |
|
|
39
|
+
| | Vite | 5.0.0 |
|
|
40
|
+
| **后端** | Node.js | 20.10.0 |
|
|
41
|
+
| | Express | 4.18.2 |
|
|
42
|
+
| | Prisma | 5.8.0 |
|
|
43
|
+
| **数据库** | PostgreSQL | 15.5 |
|
|
44
|
+
| | Redis | 7.2.0 |
|
|
45
|
+
| **其他** | JWT | - |
|
|
46
|
+
| | Socket.io | 4.6.0 |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 3. 模块交互图
|
|
51
|
+
|
|
52
|
+
### 3.1 依赖关系
|
|
53
|
+
|
|
54
|
+
```mermaid
|
|
55
|
+
graph LR
|
|
56
|
+
A[ChatModule] -->|依赖| B[UserModule]
|
|
57
|
+
A -->|依赖| C[AuthModule]
|
|
58
|
+
B -->|依赖| C
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 3.2 数据流
|
|
62
|
+
|
|
63
|
+
```mermaid
|
|
64
|
+
sequenceDiagram
|
|
65
|
+
participant Frontend
|
|
66
|
+
participant AuthModule
|
|
67
|
+
participant ChatModule
|
|
68
|
+
participant Database
|
|
69
|
+
|
|
70
|
+
Frontend->>AuthModule: 验证Token
|
|
71
|
+
AuthModule-->>Frontend: Token有效
|
|
72
|
+
Frontend->>ChatModule: 发送消息
|
|
73
|
+
ChatModule->>Database: 保存消息
|
|
74
|
+
ChatModule-->>Frontend: 广播消息
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 4. 模块清单
|
|
80
|
+
|
|
81
|
+
### 4.1 AuthModule (认证模块)
|
|
82
|
+
|
|
83
|
+
**职责/边界**:
|
|
84
|
+
- 处理用户身份认证(注册、登录、Token管理)
|
|
85
|
+
- 提供认证中间件供其他模块使用
|
|
86
|
+
- 不包含用户资料管理(由UserModule负责)
|
|
87
|
+
|
|
88
|
+
**对外接口**:
|
|
89
|
+
| 端点 | 方法 | 用途 |
|
|
90
|
+
|------|------|------|
|
|
91
|
+
| `/api/auth/register` | POST | 用户注册 |
|
|
92
|
+
| `/api/auth/login` | POST | 用户登录 |
|
|
93
|
+
| `/api/auth/refresh` | POST | 刷新Token |
|
|
94
|
+
| `/api/auth/logout` | POST | 用户登出 |
|
|
95
|
+
|
|
96
|
+
**数据模型**:
|
|
97
|
+
| 表名 | 主要字段 | 关键索引 |
|
|
98
|
+
|------|---------|---------|
|
|
99
|
+
| `users` | id, email, password_hash | email (UNIQUE) |
|
|
100
|
+
| `auth_tokens` | id, user_id, token, expires_at | user_id, token |
|
|
101
|
+
|
|
102
|
+
**代码落点**:
|
|
103
|
+
```
|
|
104
|
+
src/modules/auth/
|
|
105
|
+
├── auth.controller.ts # 路由控制器
|
|
106
|
+
├── auth.service.ts # 业务逻辑
|
|
107
|
+
├── auth.middleware.ts # 认证中间件
|
|
108
|
+
└── jwt.util.ts # JWT工具函数
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**功能索引**:
|
|
112
|
+
| 功能编号 | 功能名称 | 详情 |
|
|
113
|
+
|---------|---------|------|
|
|
114
|
+
| F-001 | 用户注册 | [查看](./功能清单.md#f-001-用户注册) |
|
|
115
|
+
| F-002 | 用户登录 | [查看](./功能清单.md#f-002-用户登录) |
|
|
116
|
+
| F-003 | Token刷新 | [查看](./功能清单.md#f-003-token刷新) |
|
|
117
|
+
| F-004 | 密码重置 | [查看](./功能清单.md#f-004-密码重置) |
|
|
118
|
+
| F-005 | 邮箱验证 | [查看](./功能清单.md#f-005-邮箱验证) |
|
|
119
|
+
|
|
120
|
+
**依赖**: 无
|
|
121
|
+
**被依赖**: UserModule, ChatModule
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
### 4.2 UserModule (用户管理模块)
|
|
126
|
+
|
|
127
|
+
**职责/边界**:
|
|
128
|
+
- 管理用户资料(查询、编辑、头像)
|
|
129
|
+
- 提供用户搜索功能
|
|
130
|
+
- 不包含身份认证(由AuthModule负责)
|
|
131
|
+
|
|
132
|
+
**对外接口**:
|
|
133
|
+
| 端点 | 方法 | 用途 |
|
|
134
|
+
|------|------|------|
|
|
135
|
+
| `/api/users/:id` | GET | 获取用户信息 |
|
|
136
|
+
| `/api/users/:id` | PUT | 更新用户资料 |
|
|
137
|
+
| `/api/users/:id/avatar` | POST | 上传头像 |
|
|
138
|
+
| `/api/users/search` | GET | 搜索用户 |
|
|
139
|
+
| `/api/users/:id` | DELETE | 删除用户 |
|
|
140
|
+
|
|
141
|
+
**数据模型**:
|
|
142
|
+
| 表名 | 主要字段 | 关键索引 |
|
|
143
|
+
|------|---------|---------|
|
|
144
|
+
| `user_profiles` | id, user_id, display_name, avatar_url | user_id (FK) |
|
|
145
|
+
|
|
146
|
+
**代码落点**:
|
|
147
|
+
```
|
|
148
|
+
src/modules/user/
|
|
149
|
+
├── user.controller.ts # 路由控制器
|
|
150
|
+
├── user.service.ts # 业务逻辑
|
|
151
|
+
└── user.repository.ts # 数据访问层
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**功能索引**:
|
|
155
|
+
| 功能编号 | 功能名称 | 详情 |
|
|
156
|
+
|---------|---------|------|
|
|
157
|
+
| F-006 | 用户信息查询 | [查看](./功能清单.md#f-006-用户信息查询) |
|
|
158
|
+
| F-007 | 用户资料编辑 | [查看](./功能清单.md#f-007-用户资料编辑) |
|
|
159
|
+
| F-008 | 头像上传 | [查看](./功能清单.md#f-008-头像上传) |
|
|
160
|
+
| F-009 | 用户搜索 | [查看](./功能清单.md#f-009-用户搜索) |
|
|
161
|
+
| F-010 | 用户权限管理 | [查看](./功能清单.md#f-010-用户权限管理) |
|
|
162
|
+
|
|
163
|
+
**依赖**: AuthModule
|
|
164
|
+
**被依赖**: ChatModule
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
### 4.3 ChatModule (实时聊天模块)
|
|
169
|
+
|
|
170
|
+
**职责/边界**:
|
|
171
|
+
- 管理聊天室(创建、加入、离开)
|
|
172
|
+
- 处理消息收发(文本、文件)
|
|
173
|
+
- 维护用户在线状态
|
|
174
|
+
- 不包含用户认证和资料管理
|
|
175
|
+
|
|
176
|
+
**对外接口**:
|
|
177
|
+
| 端点 | 方法/协议 | 用途 |
|
|
178
|
+
|------|----------|------|
|
|
179
|
+
| `/api/chat/rooms` | POST | 创建聊天室 |
|
|
180
|
+
| `/api/chat/rooms` | GET | 获取聊天室列表 |
|
|
181
|
+
| `/api/chat/messages/:roomId` | GET | 获取历史消息 |
|
|
182
|
+
| `/api/chat/rooms/:id/join` | POST | 加入聊天室 |
|
|
183
|
+
| `/ws/chat` | WebSocket | 实时消息通信 |
|
|
184
|
+
|
|
185
|
+
**数据模型**:
|
|
186
|
+
| 表名 | 主要字段 | 关键索引 |
|
|
187
|
+
|------|---------|---------|
|
|
188
|
+
| `chat_rooms` | id, name, type, created_at | name |
|
|
189
|
+
| `messages` | id, room_id, sender_id, content, sent_at | room_id, sender_id, sent_at |
|
|
190
|
+
| `room_members` | id, room_id, user_id, joined_at | room_id, user_id |
|
|
191
|
+
|
|
192
|
+
**代码落点**:
|
|
193
|
+
```
|
|
194
|
+
src/modules/chat/
|
|
195
|
+
├── chat.controller.ts # 路由控制器
|
|
196
|
+
├── chat.service.ts # 业务逻辑
|
|
197
|
+
├── websocket.gateway.ts # WebSocket处理
|
|
198
|
+
└── message.repository.ts # 消息数据访问
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**功能索引**:
|
|
202
|
+
| 功能编号 | 功能名称 | 详情 |
|
|
203
|
+
|---------|---------|------|
|
|
204
|
+
| F-011 | 创建聊天室 | [查看](./功能清单.md#f-011-创建聊天室) |
|
|
205
|
+
| F-012 | 发送文本消息 | [查看](./功能清单.md#f-012-发送文本消息) |
|
|
206
|
+
| F-013 | 接收实时消息 | [查看](./功能清单.md#f-013-接收实时消息) |
|
|
207
|
+
| F-014 | 历史消息查询 | [查看](./功能清单.md#f-014-历史消息查询) |
|
|
208
|
+
| F-015 | 在线状态显示 | [查看](./功能清单.md#f-015-在线状态显示) |
|
|
209
|
+
| F-016 | 输入状态指示 | [查看](./功能清单.md#f-016-输入状态指示) |
|
|
210
|
+
| F-017 | 消息通知 | [查看](./功能清单.md#f-017-消息通知) |
|
|
211
|
+
| F-018 | 文件分享 | [查看](./功能清单.md#f-018-文件分享) |
|
|
212
|
+
| F-019 | 消息搜索 | [查看](./功能清单.md#f-019-消息搜索) |
|
|
213
|
+
| F-020 | 消息已读状态 | [查看](./功能清单.md#f-020-消息已读状态) |
|
|
214
|
+
|
|
215
|
+
**依赖**: UserModule, AuthModule
|
|
216
|
+
**被依赖**: 无
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 5. 模块功能统计
|
|
221
|
+
|
|
222
|
+
> ⚠️ **数据来源**:以 [功能清单](./功能清单.md) 中的状态为准,本表按 sprint/里程碑周期性更新。
|
|
223
|
+
|
|
224
|
+
| 模块 | 功能总数 | 已完成 | 开发中 | 未开始 | 完成率 |
|
|
225
|
+
|------|---------|--------|--------|--------|--------|
|
|
226
|
+
| AuthModule | 5 | 5 | 0 | 0 | 100% |
|
|
227
|
+
| UserModule | 5 | 5 | 0 | 0 | 100% |
|
|
228
|
+
| ChatModule | 10 | 7 | 1 | 2 | 70% |
|
|
229
|
+
| **总计** | **20** | **17** | **1** | **2** | **85%** |
|
|
230
|
+
|
|
231
|
+
**状态图例**(定义见功能清单):
|
|
232
|
+
- ✅ 已完成: 功能开发完成、测试通过、已合并
|
|
233
|
+
- 🚧 开发中: 正在开发中
|
|
234
|
+
- ❌ 未开始: 已规划但未开始
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## 6. 数据库表总览
|
|
239
|
+
|
|
240
|
+
| 表名 | 所属模块 | 主要字段 | 关键索引 |
|
|
241
|
+
|------|---------|---------|---------|
|
|
242
|
+
| users | AuthModule | id, email, password_hash | email (UNIQUE) |
|
|
243
|
+
| auth_tokens | AuthModule | id, user_id, token, expires_at | user_id, token |
|
|
244
|
+
| user_profiles | UserModule | id, user_id, display_name, avatar_url | user_id (FK) |
|
|
245
|
+
| chat_rooms | ChatModule | id, name, type, created_at | name |
|
|
246
|
+
| messages | ChatModule | id, room_id, sender_id, content, sent_at | room_id, sender_id, sent_at |
|
|
247
|
+
| room_members | ChatModule | id, room_id, user_id, joined_at | room_id, user_id |
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## 📋 附录
|
|
252
|
+
|
|
253
|
+
### 相关文档
|
|
254
|
+
- [功能清单](./功能清单.md) - 每个功能的详细描述和TODO(状态唯一来源)
|
|
255
|
+
- [附加材料](./附加材料.md) - 编码规范、技术标准
|
|
256
|
+
- [规范文档](./规范文档.md) - 文档体系入口
|
|
257
|
+
|
|
258
|
+
### 文档维护规则
|
|
259
|
+
1. 新增模块时,必须在本文档中添加对应章节
|
|
260
|
+
2. **功能状态以功能清单为准**,本文档不单独维护状态
|
|
261
|
+
3. 技术栈版本变更时及时更新
|
|
262
|
+
4. 每次架构调整需更新架构图和交互图
|
|
263
|
+
5. 统计数据按 sprint/里程碑周期性从功能清单推导
|
|
File without changes
|