更新开发文档,调整团队角色及其技能描述,明确各角色的责任与协作流程。优化文档结构,确保开发风格一致性,增强经验库功能,支持经验吸收与技能升级流程。删除不再使用的规则文件,简化项目结构,提升团队协作效率。

This commit is contained in:
Alex-larget
2026-02-26 20:31:40 +08:00
parent 32c222f241
commit 299a891d2d
19 changed files with 146 additions and 310 deletions

View File

@@ -0,0 +1,75 @@
---
description: soul-api 路由边界 + 编码规范(合并版,防互窜 + GORM/Gin/响应约定)
globs: soul-api/**/*.go
alwaysApply: false
---
# soul-api 开发规范
> **Skill 加载**:编辑 soul-api 代码时,**必须使用 Read 工具读取 `.cursor/skills/SKILL-API开发.md` 的完整内容**,该 Skill 包含业务对接、与前端边界协同等补充约定。本规则侧重编码规范与路由边界。
## 1. 路由按使用方归类(强制)
新增或修改接口必须**先明确使用方**,再挂到对应路由组:
| 使用方 | 路由组 | 路径前缀 | 鉴权 |
|--------|--------|----------|------|
| 管理端 | `admin` / `db` | `/api/admin/…`、`/api/db/…` | `middleware.AdminAuth()` |
| 小程序 | `miniprogram` | `/api/miniprogram/…` | 按接口需要 |
| 两端共用 | `api` 下 + `miniprogram` 下各挂一遍 | `/api/xxx` 与 `/api/miniprogram/xxx` | 各自鉴权 |
即使业务逻辑相同,也必须按使用方做路径区分。禁止仅提供 `/api/vip/*` 等通用路径让两端混用。
### 禁止行为
- 禁止在 `miniprogram` 组挂仅管理端调用的接口后台审核、DB 初始化等)。
- 禁止在 `admin`/`db` 组挂小程序专属逻辑wx code 登录、小程序码生成等)。
- 禁止在 handler 内混用管理端/小程序路径语义(根据 path 分支写两套业务而不按使用方拆 handler/路由)。
handler 注释标明使用方,如 `// GET /api/miniprogram/withdraw/records 小程序-提现记录`。
管理端列表接口需包含:`user_name`/`userNickname`、`userAvatar`、`status`、`amount`。提现状态 DB 存 `pending`/`processing`/`success`/`failed`。
## 2. 数据访问:优先 GORM
- 通过 `database.DB()` 获取 `*gorm.DB`,操作集中在 `internal/model` 的模型上。
- 常规 CRUD 必须用链式 API`Where/First/Find/Create/Save/Updates/Delete`)。
- 原子更新用 `gorm.Expr`,如 `Update("pending_earnings", gorm.Expr("pending_earnings + ?", delta))`。
- 多表写入必须用 `db.Transaction(func(tx *gorm.DB) error { ... })`。
- 用 `Preload`/`Joins` 减少 N+1仅需单列时用 `Pluck`;重复条件抽 Scopes。
- 禁止 handler 中手写 `db.Exec/db.Raw`,除非:复杂统计 SQL 用 GORM 表达冗长(须加注释);原子多列 SET。
## 3. Model 与表结构
- 结构体放 `internal/model`,文件名与业务一致。
- 必须包含 `gorm` 标签column/primaryKey/type+ `json` 标签(小写驼峰)。
- 不对外暴露的字段用 `json:"-"`。
- 实现 `TableName() string`(若表名与默认不一致)。
## 4. 依赖物尽其用
- **Gin**:入参 `c.ShouldBindJSON` + `binding` 标签校验;统一 `c.JSON` 返回。
- **配置**:仅通过 `internal/config` 的 `config.Load()` 读环境变量,不直接 `os.Getenv`。
- **中间件**:安全头 `middleware.Secure()`,跨域 `cors`,限流 `middleware.NewRateLimiter`。
- **微信/支付**:统一走 `internal/wechat`PowerWeChathandler 只做参数与结果转换。
- **JWT**:管理端鉴权用 `internal/auth` 的 `IssueAdminJWT`/`ParseAdminJWT`/`GetAdminJWTFromRequest`。
## 5. 目录与包约定
- `cmd/server/main.go`:入口,只做初始化与启停。
- `internal/handler`HTTP 处理函数,绑定→校验→调 DB/wechat→写响应。逻辑复杂时抽到 `internal/service`。
- `internal/router`:注册路由与中间件,不写业务逻辑。
- `internal/database`:仅提供 `Init(dsn)` 与 `DB()`。
- 新增接口流程:确定使用方 → 确定路由 Group → 实现 handler + GORM model。
## 6. 响应与错误
- 成功:`gin.H{"success": true, "data": ...}` 或 `"message": "..."`。
- 失败:`gin.H{"success": false, "error": "..."}`。
- 不吞错误DB/wechat 的 `err` 必须处理并返回。
- HTTP 状态码:业务错误可用 200 + `success: false`;未授权/禁止用 401/403。
## 7. 代码风格
- 遵循 `gofmt`;导出函数 PascalCase内部 camelCase。
- 公开 handler 或复杂逻辑处写清用途注释。