diff --git a/.codebuddy/docs/admin-api.md b/.codebuddy/docs/admin-api.md index fea1690..1fa3732 100644 --- a/.codebuddy/docs/admin-api.md +++ b/.codebuddy/docs/admin-api.md @@ -48,10 +48,10 @@ | 业务码 | 常量 | 含义 | | --- | --- | --- | | `0` | — | 成功 | -| `40000` | `ErrBadRequest` | 请求参数错误 / 非法输入(`ext` 非合法 JSON 等) | +| `40000` | `ErrBadRequest` | 请求参数错误 / 非法输入(`ext` 非合法 JSON、用户状态非法等) | | `40100` | `ErrUnauthorized` | 未认证 / 登录失败 / token 无效或过期 | | `40300` | `ErrForbidden` | 禁止访问 | -| `40400` | `ErrNotFound` | 资源不存在(如小程序 ID 不存在) | +| `40400` | `ErrNotFound` | 资源不存在(如小程序 / 用户 ID 不存在) | | `50000` | `ErrServer` | 服务内部错误(含 token 签发等) | > 非 `BizError` 的未知错误一律归为 `50000`。 @@ -220,6 +220,117 @@ curl "http://localhost:8080/api/admin/miniapps?status=1&page=1&size=20" \ { "code": 0, "msg": "ok" } ``` +### 3.8 `GET /api/admin/users` + +分页列表查询小程序端用户,支持按小程序与关键字(昵称 / OpenID)过滤。 + +**请求头**:`Authorization: Bearer ` + +**查询参数** + +| 参数 | 类型 | 默认值 | 说明 | +| --- | --- | --- | --- | +| `mini_id` | uint64 | `0`(全部) | 按所属小程序筛选;`0` 表示不限小程序。 | +| `keyword` | string | 空 | 模糊匹配 `nickname` 或 `openid`(前后自动加 `%`)。 | +| `page` | int | `1` | 页码,从 1 开始。 | +| `size` | int | `20` | 每页条数。 | + +**响应** + +```json +{ + "code": 0, + "msg": "ok", + "data": { + "list": [ + { + "id": 1, + "mini_id": 10, + "openid": "oABC...", + "union_id": "", + "nickname": "张三", + "avatar": "https://...", + "status": 1, + "created_at": "2026-01-01T00:00:00Z", + "updated_at": "2026-01-01T00:00:00Z" + } + ], + "total": 1, + "page": 1, + "size": 20 + } +} +``` + +**curl 示例** + +```bash +curl "http://localhost:8080/api/admin/users?mini_id=10&keyword=张三&page=1&size=20" \ + -H "Authorization: Bearer " +``` + +### 3.9 `GET /api/admin/users/:id` + +查询单个用户详情(后台视角,不限小程序)。 + +**请求头**:`Authorization: Bearer ` + +**路径参数** + +| 参数 | 类型 | 说明 | +| --- | --- | --- | +| `id` | uint64 | 用户主键。 | + +**响应**:返回 `User` 对象(见 §4.2);不存在返回 `40400`。 + +### 3.10 `PUT /api/admin/users/:id` + +编辑用户资料(昵称 / 头像 / 状态)。字段均为可选,仅在提供时更新。 + +**请求头**:`Authorization: Bearer ` + +**路径参数**:`id`(uint64)。 + +**请求体** + +```json +{ + "nickname": "新昵称", + "avatar": "https://new-avatar.png", + "status": 0 +} +``` + +| 字段 | 类型 | 必填 | 说明 | +| --- | --- | --- | --- | +| `nickname` | string | 否 | 昵称,提供即更新。 | +| `avatar` | string | 否 | 头像 URL,提供即更新。 | +| `status` | int8 | 否 | 状态:`0` 禁用,`1` 正常;非法值返回 `40000`。 | + +> 所有字段以指针区分「未提供」与「置空」;若全部为空则不更新,直接返回原记录。 + +**响应**:返回更新后的 `User` 对象。 + +### 3.11 `POST /api/admin/users/:id/status` + +禁用 / 启用用户。 + +**请求头**:`Authorization: Bearer ` + +**路径参数**:`id`(uint64)。 + +**请求体** + +```json +{ "status": 0 } +``` + +| 字段 | 类型 | 必填 | 说明 | +| --- | --- | --- | --- | +| `status` | int8 | 是(binding:`required`) | `0` 禁用,`1` 正常;非法值返回 `40000`。 | + +**响应**:返回更新后的 `User` 对象。 + ## 4. 数据模型 ### 4.1 MiniProgram(被纳管小程序) @@ -236,6 +347,20 @@ curl "http://localhost:8080/api/admin/miniapps?status=1&page=1&size=20" \ | `CreatedAt` | time | `created_at` | 创建时间。 | | `UpdatedAt` | time | `updated_at` | 更新时间。 | +### 4.2 User(小程序端用户) + +| 字段 | 类型 | JSON | 说明 | +| --- | --- | --- | --- | +| `ID` | uint64 | `id` | 主键,自增。 | +| `MiniID` | uint64 | `mini_id` | 所属小程序(`mini_programs.id`)。 | +| `OpenID` | string | `openid` | 微信 OpenID,与 `mini_id` 共同唯一。 | +| `UnionID` | string | `union_id` | 微信 UnionID(可能为空)。 | +| `Nickname` | string | `nickname` | 昵称。 | +| `Avatar` | string | `avatar` | 头像 URL。 | +| `Status` | int8 | `status` | `0` 禁用,`1` 正常(默认 `1`)。 | +| `CreatedAt` | time | `created_at` | 创建时间。 | +| `UpdatedAt` | time | `updated_at` | 更新时间。 | + ## 5. 配置说明(后台相关) 配置由 `configs/config.yaml` + 环境变量(支持 `${ENV}` 占位符)加载。敏感信息(DB 密码、JWT Secret)应通过环境变量注入,禁止硬编码。 @@ -252,3 +377,8 @@ curl "http://localhost:8080/api/admin/miniapps?status=1&page=1&size=20" \ - **后台账号**:`POST /api/admin/login` 当前为固定示例账号,生产环境需接入数据库与密码哈希校验。 - **小程序管理**:本分组下的 `miniapps` 接口用于纳管微信小程序配置(增删改查),是小程序端 `X-App-ID` 鉴权的数据来源。新增/修改这些接口时须同步更新本文档。 +- **用户管理**:`/api/admin/users` 下的接口用于后台管理各小程序端用户(列表、详情、编辑、禁用/启用)。`User` 模型新增的 `status` 字段需手动在数据库中加列后方可生效(因项目未开启 AutoMigrate): + ```sql + ALTER TABLE users ADD COLUMN status TINYINT NOT NULL DEFAULT 1; + ``` + 新增/修改这些接口时须同步更新本文档。