zhibo/Zhibo/zhibo-h/消息转发模块快速参考.md

472 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 消息转发模块快速参考
> **模块**: 消息转发模块模块13
> **状态**: ✅ 已完成
> **更新时间**: 2024年12月26日
---
## 📋 API接口清单
### 1. 转发消息给好友
```http
POST /api/front/messages/forward/friend
```
**需要登录**: ✅ 是
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| originalMessageId | Long | 是 | 原始消息ID |
| originalMessageType | String | 是 | 原始消息类型private/group|
| targetUserId | Integer | 是 | 目标好友ID |
| forwardComment | String | 否 | 转发时的附加消息 |
**响应示例**:
```json
{
"code": 200,
"message": "转发成功",
"data": {
"id": 1,
"userId": 123,
"originalMessageId": 456,
"originalMessageType": "private",
"targetType": "friend",
"targetId": 789,
"newMessageId": 1001,
"forwardComment": "分享给你看看",
"isDeleted": false,
"createTime": "2024-12-26 10:00:00",
"updateTime": "2024-12-26 10:00:00"
}
}
```
---
### 2. 转发消息到群组
```http
POST /api/front/messages/forward/group
```
**需要登录**: ✅ 是
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| originalMessageId | Long | 是 | 原始消息ID |
| originalMessageType | String | 是 | 原始消息类型private/group|
| targetGroupId | Long | 是 | 目标群组ID |
| forwardComment | String | 否 | 转发时的附加消息 |
**响应示例**:
```json
{
"code": 200,
"message": "转发成功",
"data": {
"id": 2,
"userId": 123,
"originalMessageId": 456,
"originalMessageType": "private",
"targetType": "group",
"targetId": 888,
"newMessageId": 1002,
"forwardComment": "大家看看这个",
"isDeleted": false,
"createTime": "2024-12-26 10:05:00",
"updateTime": "2024-12-26 10:05:00"
}
}
```
---
### 3. 批量转发消息
```http
POST /api/front/messages/forward/batch
```
**需要登录**: ✅ 是
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| originalMessageId | Long | 是 | 原始消息ID |
| originalMessageType | String | 是 | 原始消息类型private/group|
| targetType | String | 是 | 目标类型friend/group|
| targetIds | List<Long> | 是 | 目标ID列表Body JSON|
| forwardComment | String | 否 | 转发时的附加消息 |
**请求示例**:
```json
{
"targetIds": [101, 102, 103, 104, 105]
}
```
**响应示例**:
```json
{
"code": 200,
"message": "批量转发完成成功5失败0",
"data": [
{
"id": 3,
"userId": 123,
"targetType": "friend",
"targetId": 101,
"newMessageId": 1003
},
{
"id": 4,
"userId": 123,
"targetType": "friend",
"targetId": 102,
"newMessageId": 1004
}
// ... 更多记录
]
}
```
---
### 4. 获取转发历史记录
```http
GET /api/front/messages/forward/history
```
**需要登录**: ✅ 是
**请求参数**:
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| page | Integer | 否 | 1 | 页码 |
| pageSize | Integer | 否 | 20 | 每页数量 |
**响应示例**:
```json
{
"code": 200,
"message": "success",
"data": [
{
"id": 1,
"userId": 123,
"originalMessageId": 456,
"originalMessageType": "private",
"targetType": "friend",
"targetId": 789,
"newMessageId": 1001,
"forwardComment": "分享给你看看",
"isDeleted": false,
"createTime": "2024-12-26 10:00:00",
"updateTime": "2024-12-26 10:00:00"
}
// ... 更多记录
]
}
```
---
### 5. 删除转发记录
```http
DELETE /api/front/messages/forward/{forwardId}
```
**需要登录**: ✅ 是
**路径参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| forwardId | Long | 是 | 转发记录ID |
**响应示例**:
```json
{
"code": 200,
"message": "删除成功",
"data": true
}
```
---
## 🔐 权限验证规则
### 转发消息给好友
- ✅ 必须登录
- ✅ 必须是原始消息的发送者或接收者
- ✅ 目标用户必须是好友
### 转发消息到群组
- ✅ 必须登录
- ✅ 必须是原始消息的发送者或接收者
- ✅ 必须是目标群组的成员
### 批量转发
- ✅ 必须登录
- ✅ 必须是原始消息的发送者或接收者
- ✅ 每个目标都需要满足相应的权限要求
### 查看转发历史
- ✅ 必须登录
- ✅ 只能查看自己的转发记录
### 删除转发记录
- ✅ 必须登录
- ✅ 只能删除自己的转发记录
---
## 💾 数据库表结构
### 表名: eb_message_forward
| 字段名 | 类型 | 说明 | 索引 |
|--------|------|------|------|
| id | BIGINT | 转发记录ID主键| PRIMARY |
| user_id | INT | 转发用户ID | idx_user_id |
| original_message_id | BIGINT | 原始消息ID | idx_original_message_id |
| original_message_type | VARCHAR(20) | 原始消息类型 | idx_target_type |
| target_type | VARCHAR(20) | 转发目标类型 | - |
| target_id | BIGINT | 转发目标ID | idx_target_id |
| new_message_id | BIGINT | 新消息ID | - |
| forward_comment | VARCHAR(500) | 转发时的附加消息 | - |
| is_deleted | TINYINT(1) | 是否删除 | idx_deleted |
| create_time | DATETIME | 创建时间 | idx_create_time |
| update_time | DATETIME | 更新时间 | - |
| ext_field1 | VARCHAR(100) | 扩展字段1 | - |
| ext_field2 | INT | 扩展字段2 | - |
| ext_field3 | VARCHAR(50) | 扩展字段3 | - |
| ext_field4 | BIGINT | 扩展字段4 | - |
| ext_field5 | TEXT | 扩展字段5 | - |
---
## 🎯 使用场景
### 场景1: 转发私聊消息给好友
```java
// 用户A收到用户B的消息想转发给用户C
POST /api/front/messages/forward/friend
{
"originalMessageId": 123,
"originalMessageType": "private",
"targetUserId": 456,
"forwardComment": "这个消息很重要,分享给你"
}
```
### 场景2: 转发群组消息到另一个群
```java
// 用户在群A看到一条消息想转发到群B
POST /api/front/messages/forward/group
{
"originalMessageId": 789,
"originalMessageType": "group",
"targetGroupId": 999,
"forwardComment": "大家看看这个"
}
```
### 场景3: 批量转发消息给多个好友
```java
// 用户想把一条消息同时转发给多个好友
POST /api/front/messages/forward/batch
{
"originalMessageId": 123,
"originalMessageType": "private",
"targetType": "friend",
"targetIds": [101, 102, 103, 104, 105],
"forwardComment": "分享给大家"
}
```
### 场景4: 查看转发历史
```java
// 用户想查看自己的转发记录
GET /api/front/messages/forward/history?page=1&pageSize=20
```
### 场景5: 删除转发记录
```java
// 用户想删除某条转发记录
DELETE /api/front/messages/forward/123
```
---
## ⚠️ 错误码说明
| 错误码 | 错误信息 | 说明 |
|--------|----------|------|
| 401 | 用户未登录 | 需要先登录 |
| 403 | 对方不是您的好友 | 转发目标不是好友 |
| 403 | 您不是该群组成员 | 不是目标群组成员 |
| 404 | 原始消息不存在或无权访问 | 消息不存在或无权限 |
| 403 | 无权删除此转发记录 | 只能删除自己的记录 |
| 404 | 转发记录不存在 | 记录已被删除或不存在 |
---
## 🔧 扩展字段使用示例
### ext_field1: 转发来源/渠道
```java
forward.setExtField1("from_private_chat"); // 从私聊转发
forward.setExtField1("from_group_chat"); // 从群聊转发
forward.setExtField1("from_live_room"); // 从直播间转发
```
### ext_field2: 转发优先级/标记
```java
forward.setExtField2(1); // 普通转发
forward.setExtField2(2); // 重要转发
forward.setExtField2(3); // 紧急转发
```
### ext_field3: 转发状态/类型
```java
forward.setExtField3("normal"); // 普通转发
forward.setExtField3("urgent"); // 紧急转发
forward.setExtField3("scheduled"); // 定时转发
```
### ext_field4: 关联数据ID
```java
forward.setExtField4(12345L); // 关联的活动ID
forward.setExtField4(67890L); // 关联的任务ID
```
### ext_field5: JSON扩展数据
```java
String jsonData = "{\"tags\":[\"工作\",\"重要\"],\"metadata\":{\"priority\":\"high\"}}";
forward.setExtField5(jsonData);
```
---
## 📝 注意事项
### 1. 权限验证
- 转发消息前会验证用户是否有权访问原始消息
- 转发给好友前会验证好友关系
- 转发到群组前会验证群组成员身份
### 2. 消息内容
- 转发的消息会自动添加`[转发消息]`标记
- 如果提供了`forwardComment`,会添加在消息前面
- 转发后的消息类型与原始消息类型相同
### 3. 逻辑删除
- 删除转发记录使用逻辑删除is_deleted=1
- 已删除的记录不会在查询中返回
- 数据不会真正从数据库中删除,可以恢复
### 4. 批量转发
- 批量转发时,部分失败不会影响其他转发
- 返回结果中包含成功和失败的数量
- 失败的转发会记录日志,但不会抛出异常
### 5. 性能优化
- 转发历史记录支持分页查询
- 数据库表添加了索引,提升查询性能
- 批量转发建议一次不超过50个目标
---
## 🚀 快速开始
### 1. 前端调用示例JavaScript
```javascript
// 转发消息给好友
async function forwardToFriend(messageId, messageType, targetUserId, comment) {
const response = await fetch('/api/front/messages/forward/friend', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer ' + token
},
body: new URLSearchParams({
originalMessageId: messageId,
originalMessageType: messageType,
targetUserId: targetUserId,
forwardComment: comment || ''
})
});
return await response.json();
}
// 批量转发
async function batchForward(messageId, messageType, targetType, targetIds, comment) {
const response = await fetch('/api/front/messages/forward/batch', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
},
body: JSON.stringify({
originalMessageId: messageId,
originalMessageType: messageType,
targetType: targetType,
targetIds: targetIds,
forwardComment: comment || ''
})
});
return await response.json();
}
```
### 2. Android调用示例Kotlin
```kotlin
// 转发消息给好友
suspend fun forwardToFriend(
messageId: Long,
messageType: String,
targetUserId: Int,
comment: String?
): Result<MessageForward> {
return apiService.forwardToFriend(
originalMessageId = messageId,
originalMessageType = messageType,
targetUserId = targetUserId,
forwardComment = comment
)
}
// 批量转发
suspend fun batchForward(
messageId: Long,
messageType: String,
targetType: String,
targetIds: List<Long>,
comment: String?
): Result<List<MessageForward>> {
return apiService.batchForward(
originalMessageId = messageId,
originalMessageType = messageType,
targetType = targetType,
targetIds = targetIds,
forwardComment = comment
)
}
```
---
## 📚 相关文档
- **开发指南**: `直播IM系统开发指南.md` - 模块13
- **完善总结**: `消息转发模块完善总结.md`
- **API文档**: Swagger UI - `/api/front/messages/forward/**`
---
**更新时间**: 2024年12月26日
**维护状态**: ✅ 活跃维护中