# AGENTS.md ## 基本要求 1. 写代码不要猜;先阅读相关代码、配置、迁移和调用链,再做修改。 2. 不要回退用户或其他 agent 已经做过的改动。 3. 后台后端不使用 `.env`;所有本地和环境配置都通过 `configs/config.yaml` 或同格式 YAML 配置文件管理。 4. 修改后端代码后,至少执行 `gofmt` 和 `go test ./...`。 ## 项目定位 `hyapp-admin-server` 是 HYApp 后台管理系统后端,当前位于 `hyapp-server/server/admin`,并作为 workspace 内的独立 Go module 运行。 - 本地 MySQL、Redis 与 app 后端对齐。 - 后台服务使用独立数据库 `hyapp_admin`。 - app 后端集成代码放在 `internal/integration` 或对应业务模块内,不要把 app 业务逻辑混进后台管理模块。 - 后台相关文档统一写在本 module 的 `docs` 目录。 ## 架构约定 项目采用模块化单体,按业务模块组织代码: - `cmd/server`:启动入口、配置加载、依赖组装。 - `configs`:YAML 配置。 - `migrations`:版本化 SQL migration。 - `internal/modules//routes.go`:模块路由注册。 - `internal/modules//handler.go`:HTTP 参数解析、响应适配。 - `internal/modules//service.go`:模块业务逻辑。 - `internal/modules//request.go`:模块请求结构。 - `internal/modules//response.go`:模块响应 DTO 或展示转换。 - `internal/modules/shared`:跨模块共享的薄工具,如当前操作者、分页参数、审计事件、通用 DTO。 - `internal/repository`:数据库读写,按业务能力拆文件。 - `internal/response`:统一响应协议,按 body、codes、page、success、error 拆文件。 - `internal/service`:只保留 JWT/AuthService 等跨模块基础能力。 - `internal/platform`:后台服务自有的基础设施适配,例如 COS 上传、后台对象 ID 等。 新增后台功能时,优先在对应 `internal/modules/` 内补齐 `routes / handler / service / request / response`。不要把新业务继续塞回中心化 handler 或中心化 service。 ## 模块拆分规则 1. 每一层都要有模块边界:路由、Handler、Service、Repository 都要按业务域拆分。 2. 模块内每个相关功能尽量一个文件;文件过重时继续按功能拆分,例如: - `user_create.go` - `user_status.go` - `role_permission.go` - `role_data_scope.go` 3. Handler 不直接访问 `repository.Store`;Handler 只能调用本模块 Service 或少量 shared 工具。 4. Service 承载业务规则、权限数据范围、密码处理、导出任务等业务流程。 5. Repository 只做数据访问、事务和查询条件,不放 HTTP 或响应逻辑。 6. 跨模块复用必须谨慎;确实通用的能力放 `internal/modules/shared`,不要让模块互相直接依赖业务实现。 ## 配置与环境 1. 配置使用 YAML,默认入口是 `configs/config.yaml`。 2. `environment`、`jwt_secret`、`mysql_auto_migrate`、`bootstrap`、Redis、Jobs 都必须从配置读取。 3. 非 `local/dev` 环境禁止: - 默认 JWT secret。 - 默认 bootstrap 密码。 - 开启 `mysql_auto_migrate`。 4. 本地启动命令: ```bash go run ./cmd/server -config configs/config.yaml ``` 显式执行 bootstrap: ```bash go run ./cmd/server -config configs/config.yaml -bootstrap ``` ## 数据库与迁移 1. 表结构变更优先写 SQL migration,不要只依赖 GORM `AutoMigrate`。 2. migration 文件按数字前缀递增,例如 `005_xxx.sql`。 3. 已执行的 migration 不要修改内容;需要变更时新增 migration。 4. 本地数据库是 `hyapp_admin`,由启动入口按配置 DSN 创建。 ## 权限、审计与任务 1. 功能权限通过中间件校验,权限码需要同步到默认权限种子。 2. 数据权限通过 `admin_data_scopes` 保存,涉及后台数据查询时要在 Service/Repository 链路执行过滤。 3. 写操作需要审计;显式审计使用 `shared.OperationLog`,兜底审计由 middleware 处理。 4. 异步任务使用 DB 租约和 Redis 锁,导出产物写入配置的 `jobs.artifact_dir`。 5. 新增任务类型时,需要补齐创建接口、runner handler、重试/失败结果和产物策略。 6. 区域创建和区域启用/禁用是后台管理能力,实现在 `hyapp-admin-server`,不要为此新增 user-service RPC 或把后台开关逻辑下沉到 app 后端服务。 7. 国家创建和国家启用/禁用是后台管理后端能力,实现在 `hyapp-admin-server`,不要为这些后台动作新增 user-service RPC 或 user-service 业务逻辑。 8. 后台创建 BD Leader 按目标用户当前 `users.region_id` 创建;admin-server 只负责权限和审计,不传 `regionId`,user-service 在关系创建事务里读取目标用户区域并写入 `bd_leader_profiles.region_id`,不要在创建 BD Leader 时顺手修改用户区域。 9. `hyapp.local/api` 是唯一允许直接依赖的 app 后端契约 module;不要 import `hyapp/services/*`、`hyapp/internal/*` 或 `hyapp/pkg/*`。 10. 运营管理/全服通知只能调用 `activityv1.MessageInboxService.CreateFanoutJob` 创建异步 fanout 命令;admin-server 不直接写 activity-service 数据表,也不能在 HTTP 请求里同步遍历用户发系统/活动消息。 11. 全服通知菜单 code 固定为 `operation-full-server-notice`,权限固定为 `full-server-notice:view` 和 `full-server-notice:send`;新增 UI、OpenAPI、种子权限和路由时必须保持这些 code 一致。 ## 验证 常规验证: ```bash gofmt -w go test ./... ``` 涉及启动、配置、迁移、Redis、任务或路由注入时,还需要本地启动并检查: ```bash go run ./cmd/server -config configs/config.yaml curl -sS http://127.0.0.1:13100/healthz curl -sS http://127.0.0.1:13100/readyz ```