docs: 更新项目文档与开发规范
修正 hotel_id→shop_id 错误引用,补充 dev.sh 脚本用法、 测试架构说明、种子数据规范,整理目录结构为当前实际状态。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# 酒店仓库管理系统 — 项目规则与 Orchestrator
|
||||
# 酒库管理系统 — 项目规则与 Orchestrator
|
||||
|
||||
## 必读
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
|
||||
并行:backend-coder + flutter-coder(都依赖 API 设计,互不依赖)
|
||||
串行:test-engineer → linter → code-reviewer → security-auditor
|
||||
|
||||
→ 上线前:/design-review 验收还原度
|
||||
→ 上线后:/archive-design 存档最终设计
|
||||
```
|
||||
|
||||
### 仅后端修改
|
||||
@@ -89,15 +86,15 @@ doc-writer
|
||||
| requirements-analyst | docs/requirements/ | 任何代码 |
|
||||
| architect | docs/architecture/ | 任何代码 |
|
||||
| api-designer | docs/api/ | 任何代码 |
|
||||
| db-designer | backend/migrations/, backend/schema/ | 业务代码、测试代码 |
|
||||
| backend-coder | backend/internal/, backend/main.go, backend/internal/router/ | *_test.go, migrations/ |
|
||||
| ui-designer | docs/design/(非 archive/) | 任何代码 |
|
||||
| db-designer | backend/schema/ | 业务代码、测试代码 |
|
||||
| backend-coder | backend/internal/, backend/main.go | *_test.go, schema/ |
|
||||
| ui-designer | docs/design/ | 任何代码 |
|
||||
| flutter-coder | client/ | backend/ |
|
||||
| test-engineer | *_test.go, docs/review/*-bugs.md | 业务代码 |
|
||||
| linter | 格式自动修复(gofmt/dart format),docs/review/lint-report.md | 逻辑代码 |
|
||||
| code-reviewer | docs/review/*-review.md | 任何代码 |
|
||||
| security-auditor | docs/security/ | 任何代码 |
|
||||
| devops | deploy/, .github/workflows/, backend/Dockerfile | 业务代码 |
|
||||
| devops | deploy/, .github/workflows/ | 业务代码 |
|
||||
| sre | docs/runbooks/ | 任何代码 |
|
||||
| doc-writer | docs/(除 context/ 外) | 任何代码 |
|
||||
|
||||
@@ -163,9 +160,29 @@ security: 修复入库单多租户隔离漏洞
|
||||
|
||||
---
|
||||
|
||||
## 项目特殊规则
|
||||
## 项目强制规则
|
||||
|
||||
- `hotel_id` 永远从 JWT token 中提取(`middleware.GetHotelID(c)`),绝不从请求参数读取
|
||||
- 所有库存变更操作必须在数据库事务中执行,并同时写 `inventory_logs`
|
||||
- `custom_fields` JSON 列用于动态扩展,不为每个新业务字段修改表结构
|
||||
- Go 命令需要 `export PATH="/opt/homebrew/bin:$PATH"`(Go 安装在 Homebrew)
|
||||
### 多租户隔离
|
||||
- `shop_id` **永远**从 JWT token 中提取,使用 `middleware.GetShopID(c)`
|
||||
- **绝不**从请求参数、URL 或请求体中读取 `shop_id`
|
||||
- 所有数据库查询必须带 `WHERE shop_id = ?` 条件
|
||||
|
||||
### 库存变更
|
||||
- 入库/出库审核通过时,必须在同一事务中同时完成:
|
||||
1. 更新 `inventories` 表数量
|
||||
2. 写入 `inventory_logs` 流水记录
|
||||
- 出库前必须校验库存充足,不足时返回错误并回滚
|
||||
|
||||
### Schema 管理
|
||||
- 表结构变更:修改 `backend/schema/schema.sql` + `backend/internal/model/` 对应 model
|
||||
- 启动时自动 AutoMigrate,无单独迁移文件
|
||||
- **禁止**为每个新业务字段修改表结构,使用 `custom_fields JSON` 动态扩展
|
||||
|
||||
### 种子数据
|
||||
- 测试数据以 SQL 文件形式维护:`backend/seeds/<shop_code>.sql`
|
||||
- 通过 `sh scripts/dev.sh seed <shop_code>` 执行(内部用 `docker exec` 注入 MySQL 容器)
|
||||
- 每个门店一个文件,SQL 文件顶部包含 TRUNCATE,每次执行完整重建
|
||||
|
||||
### Go 命令
|
||||
- 所有 Go 命令前须确保 PATH:`export PATH="/opt/homebrew/bin:$PATH"`
|
||||
- 或直接使用 `sh scripts/dev.sh` 脚本(已内置 PATH)
|
||||
|
||||
Reference in New Issue
Block a user