600 lines
20 KiB
Markdown
600 lines
20 KiB
Markdown
# IM Admin 内部查询接口缺口清单
|
||
|
||
> 目标:梳理 HotGo/Admin 迁移到“Admin 只访问 hotgo,IM Server 只访问租户库”后,IM Server 需要补齐的 `/internal/admin-query/*` 只读接口。
|
||
> 当前日期:2026-08-27
|
||
> 适用项目:`im_manager` Admin 后台、`im_server` IM 服务端。
|
||
|
||
## 1. 背景
|
||
|
||
Kafka 写链路已经在 Admin 侧补齐:Admin 写操作落 `im_admin_commands`、`im_admin_outbox`,通过 Kafka 发给 IM Server,IM Server 执行业务后回传 `im.admin.command.result`。
|
||
|
||
查询链路还没有完全隔离。Admin 当前仍有不少页面通过 `imtenant.DB()` 或 `resolveImTenantDB()` 直连租户库。若要严格满足目标架构,Admin 查询租户业务数据时应调用 IM Server 的内部只读接口:
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/...
|
||
```
|
||
|
||
IM Server 当前已经具备部分内部查询接口,但还不能覆盖 Admin 后台页面。
|
||
|
||
## 2. 已有接口
|
||
|
||
以下接口在 IM Server 当前实现中已经存在,可供 Admin 先迁移:
|
||
|
||
| 接口 | 用途 | 备注 |
|
||
|---|---|---|
|
||
| `GET /internal/admin-query/tenants/{tenant_code}/users/{user_id}` | 用户详情 | 需要增强字段,见 P0。 |
|
||
| `GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}` | 群详情和治理配置 | 需要增强 topic 基础字段,见 P0。 |
|
||
| `GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}/members` | 群成员列表 | 当前偏 cursor 分页,Admin 表格还需要 total。 |
|
||
| `GET /internal/admin-query/tenants/{tenant_code}/messages/{topic}/{seq_id}` | 消息详情 | 当前 Admin 暂未完整迁移消息页面。 |
|
||
| `GET /internal/admin-query/tenants/{tenant_code}/files/{file_id}` | 文件详情 | 还缺文件列表和引用列表。 |
|
||
| `GET /internal/admin-query/tenants/{tenant_code}/kafka/dead-letters` | Kafka 死信列表 | Admin 已接入。 |
|
||
| `GET /internal/admin-query/tenants/{tenant_code}/kafka/dead-letters/{dead_id}` | Kafka 死信详情 | Admin 已接入。 |
|
||
|
||
## 3. 统一约定
|
||
|
||
### 3.1 鉴权
|
||
|
||
沿用 IM Server 内部 API HMAC 鉴权:
|
||
|
||
```text
|
||
X-Service-Name
|
||
X-Timestamp
|
||
X-Nonce
|
||
X-Signature
|
||
```
|
||
|
||
服务端需要校验:
|
||
|
||
1. service 是否存在。
|
||
2. service 是否包含 `admin_query` capability。
|
||
3. timestamp 是否在允许窗口内。
|
||
4. nonce 是否防重放。
|
||
5. 签名是否匹配。
|
||
|
||
### 3.2 分页返回
|
||
|
||
Admin 的 `BasicTable` 更适合 page/per_page/total 格式。建议所有列表接口统一返回:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"items": [],
|
||
"total": 0,
|
||
"page": 1,
|
||
"per_page": 20
|
||
}
|
||
}
|
||
```
|
||
|
||
如果 IM Server 内部更适合 cursor,也建议同时返回:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"items": [],
|
||
"total": 0,
|
||
"page": 1,
|
||
"per_page": 20,
|
||
"next_cursor": "",
|
||
"has_more": false
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3.3 详情返回
|
||
|
||
详情接口统一返回:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {}
|
||
}
|
||
```
|
||
|
||
### 3.4 时间与 ID
|
||
|
||
1. 时间统一返回 RFC3339/RFC3339Nano 字符串。
|
||
2. 雪花 ID、Tinode 用户 ID、19 位整数 ID 建议以字符串返回,避免前端丢精度。
|
||
3. 入参同时兼容字符串 ID 和纯数字 ID 时,IM Server 内部自行解析。
|
||
|
||
## 4. P0:优先补齐
|
||
|
||
P0 是 Admin 当前核心页面迁移所需接口,补完后可以先迁移用户、群组、文件等高频页面。
|
||
|
||
### 4.1 用户列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/users
|
||
```
|
||
|
||
用途:IM 用户管理列表。
|
||
|
||
建议查询参数:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `user_id` | string | 用户 ID,支持精确查询。 |
|
||
| `nickname` | string | 昵称模糊查询。 |
|
||
| `auth_name` | string | 登录标识,匹配 username/phone/email/凭证。 |
|
||
| `state` | int | 用户状态。 |
|
||
| `created_at_start` | string | 创建时间开始。 |
|
||
| `created_at_end` | string | 创建时间结束。 |
|
||
| `last_seen_start` | string | 最后在线开始。 |
|
||
| `last_seen_end` | string | 最后在线结束。 |
|
||
| `page` | int | 页码。 |
|
||
| `per_page` | int | 每页数量,最大建议 200。 |
|
||
|
||
建议返回字段:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `user_id` | 字符串用户 ID。 |
|
||
| `username` | 用户名。 |
|
||
| `phone` | 手机号。 |
|
||
| `nickname` | 昵称。 |
|
||
| `public_account` | 公开账号。 |
|
||
| `state` | 用户状态。 |
|
||
| `gender` | 性别。 |
|
||
| `region` | 地区。 |
|
||
| `auth_names` | 登录标识摘要。 |
|
||
| `credentials` | 凭证摘要。 |
|
||
| `auth_version` | 鉴权版本。 |
|
||
| `password_updated_at` | 密码更新时间。 |
|
||
| `last_seen` | 最后在线时间。 |
|
||
| `user_agent` | 最后设备 UA。 |
|
||
| `created_at` | 创建时间。 |
|
||
| `updated_at` | 更新时间。 |
|
||
|
||
当前 Admin 直连涉及表:`im_users`、`im_user_profiles`、`im_user_security`、`im_credentials`。
|
||
|
||
### 4.2 用户详情增强
|
||
|
||
现有接口:
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/users/{user_id}
|
||
```
|
||
|
||
建议增强返回字段:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `profile` | 结构化用户资料。 |
|
||
| `public` | Tinode public JSON。 |
|
||
| `trusted` | Tinode trusted JSON。 |
|
||
| `access` | 访问权限 JSON。 |
|
||
| `tags` | 标签。 |
|
||
| `security` | `auth_version/password_updated_at` 等安全信息。 |
|
||
| `credentials` | 凭证列表,包含 method/value/done。 |
|
||
|
||
### 4.3 用户设备列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/users/{user_id}/devices
|
||
```
|
||
|
||
用途:用户详情中的登录设备列表。
|
||
|
||
建议查询参数:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `device_id` | string | 设备 ID。 |
|
||
| `platform` | string | 平台。 |
|
||
| `page` | int | 页码。 |
|
||
| `per_page` | int | 每页数量。 |
|
||
|
||
建议返回字段:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `device_id` | 设备 ID。 |
|
||
| `platform` | 平台。 |
|
||
| `user_agent` | UA。 |
|
||
| `last_seen` | 最后在线。 |
|
||
| `created_at` | 创建时间。 |
|
||
| `updated_at` | 更新时间。 |
|
||
|
||
当前 Admin 直连涉及表:`im_devices`。
|
||
|
||
### 4.4 群列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups
|
||
```
|
||
|
||
用途:IM 群组管理列表。
|
||
|
||
建议查询参数:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `topic` | string | 群 Topic。 |
|
||
| `owner_id` | string | 群主 ID。 |
|
||
| `state` | int | Tinode topic 状态。 |
|
||
| `group_status` | string | 业务群状态。 |
|
||
| `created_at_start` | string | 创建时间开始。 |
|
||
| `created_at_end` | string | 创建时间结束。 |
|
||
| `touched_at_start` | string | 活跃时间开始。 |
|
||
| `touched_at_end` | string | 活跃时间结束。 |
|
||
| `page` | int | 页码。 |
|
||
| `per_page` | int | 每页数量。 |
|
||
|
||
建议返回字段:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `topic` | 群 Topic。 |
|
||
| `state` | Tinode 状态。 |
|
||
| `owner_id` | 群主 ID。 |
|
||
| `seq_id` | 最新消息序号。 |
|
||
| `del_id` | 删除序号。 |
|
||
| `sub_count` | Tinode 订阅成员数。 |
|
||
| `touched_at` | 活跃时间。 |
|
||
| `created_at` | 创建时间。 |
|
||
| `updated_at` | 更新时间。 |
|
||
| `public` | Tinode public JSON。 |
|
||
| `trusted` | Tinode trusted JSON。 |
|
||
| `tags` | 标签。 |
|
||
| `aux` | 辅助 JSON。 |
|
||
| `group_name` | 群名称。 |
|
||
| `avatar_file_id` | 群头像文件 ID。 |
|
||
| `description` | 群简介。 |
|
||
| `group_status` | 业务群状态。 |
|
||
| `join_approval` | 入群审批开关。 |
|
||
| `mute_all` | 全员禁言。 |
|
||
| `member_upload_files` | 成员上传文件。 |
|
||
| `member_private_chat` | 成员私聊。 |
|
||
| `member_invite` | 成员邀请。 |
|
||
| `max_member_count` | 最大成员数。 |
|
||
| `max_admin_count` | 最大管理员数。 |
|
||
| `business_member_count` | 业务成员数。 |
|
||
| `settings_version` | 治理配置版本。 |
|
||
| `settings_updated_at` | 治理配置更新时间。 |
|
||
|
||
当前 Admin 直连涉及表:`im_topics`、`im_group_settings`。
|
||
|
||
### 4.5 群详情增强
|
||
|
||
现有接口:
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}
|
||
```
|
||
|
||
当前接口主要返回 `im_group_settings`。建议增强 Tinode topic 基础字段:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `state` | Topic 状态。 |
|
||
| `seq_id` | 最新消息序号。 |
|
||
| `del_id` | 删除序号。 |
|
||
| `sub_count` | 订阅数量。 |
|
||
| `public` | public JSON。 |
|
||
| `trusted` | trusted JSON。 |
|
||
| `access` | access JSON。 |
|
||
| `tags` | tags JSON。 |
|
||
| `aux` | aux JSON。 |
|
||
| `touched_at` | 活跃时间。 |
|
||
|
||
### 4.6 群成员列表增强
|
||
|
||
现有接口:
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}/members
|
||
```
|
||
|
||
建议增强查询参数:
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
|---|---|---|
|
||
| `user_id` | string | 用户 ID 精确过滤。 |
|
||
| `role` | string | `owner/admin/member`。 |
|
||
| `member_status` | string | 成员状态。 |
|
||
| `q` | string | 昵称、公开账号等关键词。 |
|
||
| `eligible_role` | string | 候选角色筛选。 |
|
||
| `page` | int | 页码。 |
|
||
| `per_page` | int | 每页数量。 |
|
||
| `cursor` | string | 兼容 cursor 分页。 |
|
||
| `limit` | int | 兼容 cursor 分页。 |
|
||
|
||
建议增强返回:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `total` | 总数,Admin 表格需要。 |
|
||
| `items[].user_id` | 用户 ID。 |
|
||
| `items[].nickname` | 昵称。 |
|
||
| `items[].state` | 用户状态。 |
|
||
| `items[].mode_want` | 期望权限。 |
|
||
| `items[].mode_given` | 授予权限。 |
|
||
| `items[].recv_seq_id` | 接收序号。 |
|
||
| `items[].read_seq_id` | 已读序号。 |
|
||
| `items[].del_id` | 删除序号。 |
|
||
| `items[].role` | 业务角色。 |
|
||
| `items[].member_status` | 成员状态。 |
|
||
| `items[].group_nickname` | 群昵称。 |
|
||
| `items[].pinned` | 置顶。 |
|
||
| `items[].mute_notifications` | 免打扰。 |
|
||
| `items[].join_source` | 加入来源。 |
|
||
| `items[].joined_by` | 邀请或处理人。 |
|
||
| `items[].joined_at` | 加入时间。 |
|
||
| `items[].left_at` | 离开时间。 |
|
||
| `items[].removed_by` | 移除人。 |
|
||
| `items[].version` | 版本。 |
|
||
|
||
当前 Admin 直连涉及表:`im_group_members`、`im_subscriptions`、`im_users`、`im_user_profiles`。
|
||
|
||
### 4.7 入群申请列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}/join-requests
|
||
```
|
||
|
||
建议查询参数:`status`、`applicant_user_id`、`page`、`per_page`。
|
||
|
||
建议返回字段:`request_id`、`topic`、`applicant_user_id`、`inviter_user_id`、`source`、`message`、`status`、`reject_reason`、`handled_by`、`handled_at`、`expires_at`、`version`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_group_join_requests`。
|
||
|
||
### 4.8 群邀请列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}/invitations
|
||
```
|
||
|
||
建议查询参数:`status`、`target_user_id`、`inviter_user_id`、`page`、`per_page`。
|
||
|
||
建议返回字段:`invitation_id`、`topic`、`inviter_user_id`、`target_user_id`、`message`、`status`、`result`、`join_request_id`、`expires_at`、`handled_at`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_group_invitations`。
|
||
|
||
### 4.9 群公告列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}/announcements
|
||
```
|
||
|
||
建议查询参数:`status`、`page`、`per_page`。
|
||
|
||
建议返回字段:`announcement_id`、`topic`、`author_user_id`、`content`、`status`、`version`、`published_at`、`deleted_by`、`deleted_at`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_group_announcements`。
|
||
|
||
### 4.10 群禁言列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}/mutes
|
||
```
|
||
|
||
建议查询参数:`status`、`user_id`、`page`、`per_page`。
|
||
|
||
建议返回字段:`topic`、`user_id`、`muted_by`、`muted_at`、`expires_at`、`reason`、`status`、`revoked_by`、`revoked_at`、`version`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_group_mutes`。
|
||
|
||
### 4.11 群管理日志
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}/admin-logs
|
||
```
|
||
|
||
建议查询参数:`action`、`operator_id`、`page`、`per_page`。
|
||
|
||
建议返回字段:`log_id`、`topic`、`operator_id`、`target_user_id`、`action`、`object_type`、`object_id`、`before_data`、`after_data`、`request_id`、`idempotency_key`、`created_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_group_admin_logs`。
|
||
|
||
### 4.12 群文件列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/groups/{topic}/files
|
||
```
|
||
|
||
用途:群治理页面中的群文件列表。不要和已有单文件详情接口混淆。
|
||
|
||
建议查询参数:`status`、`file_type`、`file_name`、`uploader_id`、`page`、`per_page`。
|
||
|
||
建议返回字段:`group_file_id`、`topic`、`file_id`、`source_topic`、`source_seq`、`uploader_id`、`file_name`、`mime_type`、`file_type`、`file_size`、`status`、`deleted_by`、`deleted_at`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_group_files`。
|
||
|
||
### 4.13 文件列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/files
|
||
```
|
||
|
||
用途:IM 文件管理列表。
|
||
|
||
建议查询参数:`file_id`、`user_id`、`status`、`mime_type`、`created_at_start`、`created_at_end`、`page`、`per_page`。
|
||
|
||
建议返回字段:`id`、`file_id`、`user_id`、`mime_type`、`file_size`、`file_name`、`location`、`etag`、`status`、`quarantine_reason`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_fileuploads`。
|
||
|
||
### 4.14 文件引用列表
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/files/{file_id}/links
|
||
```
|
||
|
||
用途:文件详情中展示消息引用。
|
||
|
||
建议返回字段:`topic`、`seq_id`、`user_id`、`created_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_filemsglinks`。
|
||
|
||
## 5. P1:后台审核和运营页面
|
||
|
||
### 5.1 审计日志
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/audit-logs
|
||
GET /internal/admin-query/tenants/{tenant_code}/audit-logs/{id}
|
||
```
|
||
|
||
建议查询参数:`actor_user_id`、`action`、`target_type`、`target_id`、`created_at_start`、`created_at_end`、`page`、`per_page`。
|
||
|
||
建议返回字段:`id`、`request_id`、`actor_user_id`、`action`、`target_type`、`target_id`、`ip`、`user_agent`、`detail`、`created_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_audit_logs`。
|
||
|
||
### 5.2 实名审核
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/realname-verifications
|
||
GET /internal/admin-query/tenants/{tenant_code}/realname-verifications/{id}
|
||
```
|
||
|
||
建议查询参数:`user_id`、`status`、`real_name`、`created_at_start`、`created_at_end`、`page`、`per_page`。
|
||
|
||
建议返回字段:`id`、`user_id`、`real_name`、`id_card_no_masked`、`front_file_id`、`back_file_id`、`status`、`reject_reason`、`reviewed_by`、`reviewed_at`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_realname_verifications`。
|
||
|
||
### 5.3 举报工单
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/abuse-reports
|
||
GET /internal/admin-query/tenants/{tenant_code}/abuse-reports/{id}
|
||
GET /internal/admin-query/tenants/{tenant_code}/reports/abuse/{report_id}/target
|
||
```
|
||
|
||
建议查询参数:`reporter_user_id`、`target_type`、`target_id`、`status`、`created_at_start`、`created_at_end`、`page`、`per_page`。
|
||
|
||
建议返回字段:`id`、`report_id`、`reporter_user_id`、`target_type`、`target_id`、`reason_code`、`description`、`evidence_file_ids`、`status`、`handler_id`、`handled_at`、`handle_result`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_abuse_reports`。
|
||
|
||
### 5.4 意见反馈
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/feedback-submissions
|
||
GET /internal/admin-query/tenants/{tenant_code}/feedback-submissions/{id}
|
||
```
|
||
|
||
建议查询参数:`user_id`、`category`、`status`、`created_at_start`、`created_at_end`、`page`、`per_page`。
|
||
|
||
建议返回字段:`id`、`feedback_id`、`user_id`、`category`、`content`、`contact`、`file_ids`、`status`、`handler_id`、`handled_at`、`reply`、`created_at`、`updated_at`。
|
||
|
||
当前 Admin 直连涉及表:`im_feedback_submissions`。
|
||
|
||
### 5.5 业务 Outbox
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/outbox/business-events
|
||
GET /internal/admin-query/tenants/{tenant_code}/outbox/group-events
|
||
GET /internal/admin-query/tenants/{tenant_code}/outbox/business-events/{id}
|
||
GET /internal/admin-query/tenants/{tenant_code}/outbox/group-events/{id}
|
||
```
|
||
|
||
建议查询参数:`event_type`、`status`、`target_type`、`target`、`created_at_start`、`created_at_end`、`page`、`per_page`。
|
||
|
||
当前 Admin 直连涉及表:`im_business_events_outbox`、`im_group_events_outbox`。
|
||
|
||
## 6. P2:如果要完全消除租户库直连
|
||
|
||
这些不是 Kafka 联调第一优先级,但如果最终要求 Admin 完全不碰租户库,也需要 IM Server 提供内部查询或改为 hotgo 摘要表。
|
||
|
||
### 6.1 组织架构
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/org/departments
|
||
GET /internal/admin-query/tenants/{tenant_code}/org/members
|
||
```
|
||
|
||
当前 Admin 直连涉及表:`im_org_departments`、`im_org_members`、`im_users`。
|
||
|
||
### 6.2 工作台应用
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/workbench/apps
|
||
```
|
||
|
||
当前 Admin 直连涉及工作台相关租户表。
|
||
|
||
### 6.3 租户任务看板摘要
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/dashboard/summary
|
||
```
|
||
|
||
当前 Admin 会统计多个租户库中的待处理实名、举报、反馈、Outbox 等数量。
|
||
|
||
### 6.4 租户配置类查询
|
||
|
||
如果这些配置仍放在租户库,也需要补接口;如果后续迁到 hotgo 控制库,则不需要通过 IM Server 查询。
|
||
|
||
```text
|
||
GET /internal/admin-query/tenants/{tenant_code}/feedback-config
|
||
GET /internal/admin-query/tenants/{tenant_code}/mailbox-config
|
||
GET /internal/admin-query/tenants/{tenant_code}/abuse-reasons
|
||
GET /internal/admin-query/tenants/{tenant_code}/app-releases
|
||
```
|
||
|
||
涉及模块:反馈配置、总经理信箱配置、举报原因、App 发布策略。
|
||
|
||
## 6.5 IM Server 补齐状态
|
||
|
||
截至 2026-08-27,IM Server 已补齐本清单中的内部查询入口,统一走 `/internal/admin-query/tenants/{tenant_code}/...`,并沿用 HMAC 鉴权。
|
||
|
||
已接入范围:
|
||
|
||
1. P0:用户列表、用户详情增强、用户设备、群列表、群详情增强、群成员 total、入群申请、群邀请、群公告、群禁言、群管理日志、群文件、文件列表、文件详情、文件引用。
|
||
2. P1:审计日志、实名审核、举报工单、举报目标快照、意见反馈、业务 Outbox、群 Outbox。
|
||
3. P2:组织部门、组织成员、工作台应用、任务看板摘要、反馈配置、总经理信箱配置、举报原因、App 发布策略。
|
||
|
||
实现说明:
|
||
|
||
1. IM Server 内部使用白名单只读查询规格,不提供任意 SQL 入口。
|
||
2. 列表接口统一返回 `items/total/page/per_page`。
|
||
3. 详情接口统一返回单对象。
|
||
4. 复杂字段先返回租户库原始 JSON 或轻量关联摘要,Admin 联调时如需展示专用字段再做二次增强。
|
||
5. 若租户库未创建某些 P1/P2 表,对应接口会返回内部错误;发版前需要确保租户库 schema 已完整迁移。
|
||
|
||
## 7. Admin 侧迁移建议
|
||
|
||
### 7.1 第一批迁移
|
||
|
||
在 IM Server 补完 P0 后,Admin 优先迁移:
|
||
|
||
1. 用户列表、用户详情、用户设备。
|
||
2. 群列表、群详情、群成员。
|
||
3. 群入群申请、邀请、公告、禁言、管理日志、群文件。
|
||
4. 文件列表、文件详情、文件引用。
|
||
|
||
### 7.2 第二批迁移
|
||
|
||
在 IM Server 补完 P1 后,Admin 再迁移:
|
||
|
||
1. 审计日志。
|
||
2. 实名审核。
|
||
3. 举报工单。
|
||
4. 意见反馈。
|
||
5. 业务 Outbox。
|
||
|
||
### 7.3 保留 hotgo 查询的范围
|
||
|
||
以下数据天然属于 hotgo 控制库,Admin 可继续查 hotgo,不需要走 IM Server:
|
||
|
||
1. 租户表和租户绑定表。
|
||
2. Admin 命令表:`im_admin_commands`。
|
||
3. Admin Outbox 表:`im_admin_outbox`。
|
||
4. Admin Kafka 审计事件表:`im_audit_events`。
|
||
5. 菜单、角色、管理员、系统配置、字典等 HotGo 系统表。
|
||
|
||
## 8. 验收标准
|
||
|
||
1. Admin 查询租户业务数据时,不再出现新的 `imtenant.DB()` 调用。
|
||
2. Admin 查询 IM Server 内部接口时,统一使用 HMAC 签名。
|
||
3. 列表接口支持 `page/per_page/total`,兼容后台表格分页。
|
||
4. 详情接口返回结构化 JSON,不返回数据库内部敏感字段。
|
||
5. 用户 ID、雪花 ID 等大整数以字符串返回。
|
||
6. IM Server 为内部查询写审计日志,至少包含 `tenant_code`、`service_name`、`path`、`query`、`trace_id`、`status`、`duration_ms`。
|
||
7. 关闭 IM Server 内部查询能力时,Admin 应得到明确错误,不泄露租户库信息。
|