- common/tools 工具模块,10 个子功能:md5/cryptox/uuid/random/timex/convertx/strx/slicex/ip/filex(薄封装 GoFrame 内置组件) - AGENTS.md 项目智能体说明书(架构、规范、命令、记忆体系索引) - docs/change-log/2026-08-24.md 本次请求与变更记录 - .gitignore 排除 .workbuddy/;PROJECT_STRUCTURE.md 补充目录树
90 lines
4.6 KiB
Go
90 lines
4.6 KiB
Go
# AGENTS.md — 项目智能体说明书
|
||
|
||
> 本文件是给所有 AI 编程助手(CodeBuddy / WorkBuddy / Claude Code / Codex / Cursor 等)看的项目级上下文。
|
||
> 任何账号 clone 本仓库后,助手都应先读本文件与 `docs/change-log/` 下最近的记录,即可无缝衔接。
|
||
> 请保持本文件**长期稳定**:只写「架构、规范、约定」,不要写一次性事项。
|
||
|
||
## 项目简介
|
||
|
||
`service.xpcool.com`:个人多客户端(mini / h5 / app)后端服务,GoFrame v2 单体应用。
|
||
核心业务:用户认证(JWT)、内容、收藏、站内消息;后台管理(RBAC + 操作审计)。
|
||
|
||
## 技术栈
|
||
|
||
| 项 | 值 |
|
||
|---|---|
|
||
| 语言 | Go 1.23.0 |
|
||
| 框架 | github.com/gogf/gf/v2 v2.10.2 |
|
||
| 数据库 | MySQL(ORM 由 gf 生成 dao/do/entity) |
|
||
| 认证 | JWT(`internal/library/jwt`),admin 另有 `X-Permission` 校验 |
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
service.xpcool.com/
|
||
├── api/ # HTTP 契约与 Swagger 元数据(api/user/v1, api/admin/v1)
|
||
├── common/ # 公共可复用模块(不依赖 internal,可独立抽取成库)
|
||
│ └── tools/ # 工具模块,按子功能分包(见下文)
|
||
├── internal/
|
||
│ ├── cmd/ # 启动引导
|
||
│ ├── consts/ # 错误码与常量
|
||
│ ├── controller/ # API→service 适配层(不写业务)
|
||
│ ├── service/ # 领域用例(业务逻辑直接写这里,不用 logic/)
|
||
│ ├── dao/ # gf gen dao 生成,禁止手改
|
||
│ ├── model/ # entity/ do/ dto/ vo/(entity、do 生成,禁止手改)
|
||
│ ├── middleware/ # 路由中间件
|
||
│ ├── library/ # jwt / page / response 等内部基础件
|
||
│ └── table/ # 表列名常量
|
||
├── manifest/ # config.dev/test/prod.yaml、sql 迁移
|
||
├── docs/change-log/ # 每次请求与变更的记录(重要!见「上下文记忆」)
|
||
└── utility/ # (预留)跨切面辅助
|
||
```
|
||
|
||
## 公共工具模块 common/tools
|
||
|
||
- 规则:**不依赖 internal/**,只薄封装 GoFrame 内置组件;新工具优先复用内置(gmd5/gaes/gdes/guid/grand/gtime/gconv/gstr/gfile...),避免重复造轮子。
|
||
- 子功能:`md5`、`cryptox`(AES/DES)、`uuid`、`random`、`timex`、`convertx`、`strx`、`slicex`、`ip`、`filex`。
|
||
- 新增子功能:在 `common/tools/` 下建子包,更新 `common/tools/doc.go` 的布局清单。
|
||
|
||
## 分层与调用规范(必须遵守)
|
||
|
||
1. 调用链:`controller → service → dao → model(do)`;controller 不碰 dao。
|
||
2. DTO/VO 边界:跨层出入参走 `internal/model/dto` 与 `internal/model/vo`,API 类型与 entity 不得越界。
|
||
3. **数据库操作必须用 DO 对象**(`internal/model/do`),禁止 `g.Map`;未赋值字段保持 nil 自动忽略:
|
||
```go
|
||
dao.Users.Ctx(ctx).Where(cols.Id, id).Data(do.User{Uid: uid}).Update()
|
||
```
|
||
4. **时间字段自动维护**:`created_at/updated_at/deleted_at` 由 ORM 自动处理,禁止手动赋值;软删除用 `Delete()`,禁止手写 `WhereNull(cols.DeletedAt)`。
|
||
5. **错误处理一律用 gerror**(保留堆栈);响应统一走 `internal/library/response`。
|
||
6. 生成代码(dao/do/entity)**禁止手改**,改表后跑 `gf gen dao` 重新生成。
|
||
7. 声明 ≥3 个相关变量时,用 `var (...)` 块对齐。
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
# 运行(dev)
|
||
GF_GCFG_FILE=config.dev.yaml DB_DSN="user:pass@tcp(127.0.0.1:3306)/db?loc=Local" JWT_SECRET=xxx go run main.go
|
||
# 数据库模型生成(唯一来源)
|
||
gf gen dao -p internal -g default -gt -c
|
||
# 构建 / 测试
|
||
go build ./...
|
||
go test ./...
|
||
```
|
||
|
||
## 上下文记忆(重要)
|
||
|
||
三层配合,保证「换个账号/换台机器也能无缝衔接」:
|
||
|
||
1. **本文件(AGENTS.md)**:长期稳定的架构与规范。
|
||
2. **`docs/change-log/YYYY-MM-DD.md`**:每次对话的「请求 + 变更 + 决策」记录,随 git 提交。
|
||
- 每次完成任务后,若 `docs/change-log/` 已有当日文件则**追加**,否则新建;
|
||
- 格式固定:`## 请求` / `## 变更`(含文件清单)/ `## 决策与理由` / `## 待办与风险`;
|
||
- 助手开工前先读最近 1-2 篇,快速恢复上下文。
|
||
3. **`.workbuddy/memory/`**:WorkBuddy 桌面端本机记忆(每日日志 + MEMORY.md),**已加入 .gitignore,不入库**,仅本机增强。
|
||
|
||
## 注意事项
|
||
|
||
- 配置文件按 `GF_GCFG_FILE` 切换;`manifest/config/config.yaml` 不入库。
|
||
- 生产环境强密码:`JWT_SECRET`、数据库口令。
|
||
- 变更涉及 API 时同步更新 `api/` 下的 Swagger 元数据注释。
|