7.6 KiB
7.6 KiB
消息表情回应模块快速参考
模块编号: 模块17
最后更新: 2024年12月26日
🚀 快速开始
API接口列表
| 接口 | 方法 | 路径 | 需要登录 |
|---|---|---|---|
| 添加表情回应 | POST | /api/front/messages/reactions/add |
✅ 是 |
| 取消表情回应 | DELETE | /api/front/messages/reactions/remove |
✅ 是 |
| 获取回应列表 | GET | /api/front/messages/reactions/list |
❌ 否 |
| 获取回应统计 | GET | /api/front/messages/reactions/statistics |
❌ 否 |
| 获取回应用户 | GET | /api/front/messages/reactions/users |
❌ 否 |
| 检查回应状态 | GET | /api/front/messages/reactions/check |
✅ 是 |
| 切换表情回应 | POST | /api/front/messages/reactions/toggle |
✅ 是 |
📋 支持的表情类型
| 表情类型 | 图标 | 说明 |
|---|---|---|
like |
👍 | 点赞 |
love |
❤️ | 爱心 |
haha |
😄 | 哈哈 |
wow |
😮 | 惊讶 |
sad |
😢 | 难过 |
angry |
😠 | 生气 |
💻 接口调用示例
1. 添加表情回应(需要登录)
请求:
POST /api/front/messages/reactions/add
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer {token}
messageId=123&messageType=private&emojiType=like
响应:
{
"code": 200,
"message": "添加表情回应成功",
"data": {
"id": 1,
"messageId": 123,
"messageType": "private",
"userId": 1001,
"emojiType": "like",
"isDeleted": false,
"createTime": "2024-12-26 10:00:00",
"updateTime": "2024-12-26 10:00:00"
}
}
2. 取消表情回应(需要登录)
请求:
DELETE /api/front/messages/reactions/remove
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer {token}
messageId=123&messageType=private&emojiType=like
响应:
{
"code": 200,
"message": "取消表情回应成功",
"data": true
}
3. 获取消息的所有表情回应(不需要登录)
请求:
GET /api/front/messages/reactions/list?messageId=123&messageType=private
响应:
{
"code": 200,
"message": "success",
"data": [
{
"id": 1,
"messageId": 123,
"messageType": "private",
"userId": 1001,
"emojiType": "like",
"createTime": "2024-12-26 10:00:00"
},
{
"id": 2,
"messageId": 123,
"messageType": "private",
"userId": 1002,
"emojiType": "love",
"createTime": "2024-12-26 10:01:00"
}
]
}
4. 获取表情回应统计(不需要登录)
请求:
GET /api/front/messages/reactions/statistics?messageId=123&messageType=private
响应:
{
"code": 200,
"message": "success",
"data": {
"like": 10,
"love": 5,
"haha": 3,
"wow": 2,
"sad": 1,
"angry": 0
}
}
5. 获取指定表情的回应用户列表(不需要登录)
请求:
GET /api/front/messages/reactions/users?messageId=123&messageType=private&emojiType=like
响应:
{
"code": 200,
"message": "success",
"data": [1001, 1002, 1003, 1004, 1005]
}
6. 检查当前用户是否已回应(需要登录)
请求:
GET /api/front/messages/reactions/check?messageId=123&messageType=private&emojiType=like
Authorization: Bearer {token}
响应:
{
"code": 200,
"message": "success",
"data": {
"hasReacted": true
}
}
7. 切换表情回应(需要登录)
请求:
POST /api/front/messages/reactions/toggle
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer {token}
messageId=123&messageType=private&emojiType=like
响应(添加):
{
"code": 200,
"message": "success",
"data": {
"action": "added",
"message": "添加表情回应成功",
"reaction": {
"id": 1,
"messageId": 123,
"messageType": "private",
"userId": 1001,
"emojiType": "like",
"createTime": "2024-12-26 10:00:00"
}
}
}
响应(取消):
{
"code": 200,
"message": "success",
"data": {
"action": "removed",
"message": "取消表情回应成功"
}
}
🗄️ 数据库表结构
eb_message_reaction 表
| 字段名 | 类型 | 说明 | 索引 |
|---|---|---|---|
| id | BIGINT | 回应ID | 主键 |
| message_id | BIGINT | 消息ID | 索引 |
| message_type | VARCHAR(20) | 消息类型(private/group) | 索引 |
| user_id | INT | 回应用户ID | 索引 |
| emoji_type | VARCHAR(20) | 表情类型 | 索引 |
| is_deleted | TINYINT(1) | 是否删除(逻辑删除) | - |
| create_time | DATETIME | 创建时间 | 索引 |
| update_time | DATETIME | 更新时间 | - |
| ext_field1 | VARCHAR(100) | 扩展字段1:回应来源 | - |
| ext_field2 | INT | 扩展字段2:回应优先级 | - |
| ext_field3 | VARCHAR(50) | 扩展字段3:特殊标记 | - |
| ext_field4 | BIGINT | 扩展字段4:关联数据ID | - |
| ext_field5 | TEXT | 扩展字段5:JSON扩展数据 | - |
唯一索引:uk_message_user_emoji (message_id, user_id, emoji_type, message_type)
🔐 登录验证说明
需要登录的接口
- ✅ POST
/api/front/messages/reactions/add- 添加表情回应 - ✅ DELETE
/api/front/messages/reactions/remove- 取消表情回应 - ✅ GET
/api/front/messages/reactions/check- 检查回应状态 - ✅ POST
/api/front/messages/reactions/toggle- 切换表情回应
不需要登录的接口
- ❌ GET
/api/front/messages/reactions/list- 获取回应列表 - ❌ GET
/api/front/messages/reactions/statistics- 获取回应统计 - ❌ GET
/api/front/messages/reactions/users- 获取回应用户
未登录错误响应
{
"code": 401,
"message": "用户未登录,请先登录",
"data": null
}
🎯 业务规则
- 唯一性约束:同一用户对同一消息的同一表情只能回应一次
- 逻辑删除:取消回应使用逻辑删除,不是物理删除
- 表情类型限制:只支持6种表情类型(like、love、haha、wow、sad、angry)
- 消息类型:支持私聊消息(private)和群组消息(group)
- 自动时间管理:创建时间和更新时间自动管理
📊 扩展字段使用建议
| 字段 | 建议用途 | 示例值 |
|---|---|---|
| ext_field1 | 回应来源/渠道 | "mobile", "web", "desktop" |
| ext_field2 | 回应优先级/权重 | 1, 2, 3(数字越大优先级越高) |
| ext_field3 | 特殊标记/类型 | "featured", "hot", "normal" |
| ext_field4 | 关联数据ID | 其他业务数据的ID |
| ext_field5 | JSON扩展数据 | {"ip": "192.168.1.1", "device": "iPhone"} |
⚠️ 常见错误
1. 消息ID不能为空
{
"code": 500,
"message": "消息ID不能为空",
"data": null
}
2. 不支持的表情类型
{
"code": 500,
"message": "不支持的表情类型:smile",
"data": null
}
3. 消息类型必须是private或group
{
"code": 500,
"message": "消息类型必须是private或group",
"data": null
}
🔧 开发注意事项
- 参数验证:所有接口都有完整的参数验证
- 事务管理:添加和取消回应都使用事务
- 异常处理:所有异常都会被捕获并返回友好的错误信息
- 日志记录:所有操作都有详细的日志记录
- 性能优化:使用索引优化查询性能
📚 相关文档
- 主开发指南:
直播IM系统开发指南.md- 模块17 - 完善总结:
消息表情回应模块完善总结.md
最后更新:2024年12月26日