zhibo/Zhibo/zhibo-h/消息表情回应模块快速参考.md

7.6 KiB
Raw Blame History

消息表情回应模块快速参考

模块编号: 模块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 扩展字段5JSON扩展数据 -

唯一索引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
}

🎯 业务规则

  1. 唯一性约束:同一用户对同一消息的同一表情只能回应一次
  2. 逻辑删除:取消回应使用逻辑删除,不是物理删除
  3. 表情类型限制只支持6种表情类型like、love、haha、wow、sad、angry
  4. 消息类型支持私聊消息private和群组消息group
  5. 自动时间管理:创建时间和更新时间自动管理

📊 扩展字段使用建议

字段 建议用途 示例值
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
}

🔧 开发注意事项

  1. 参数验证:所有接口都有完整的参数验证
  2. 事务管理:添加和取消回应都使用事务
  3. 异常处理:所有异常都会被捕获并返回友好的错误信息
  4. 日志记录:所有操作都有详细的日志记录
  5. 性能优化:使用索引优化查询性能

📚 相关文档

  • 主开发指南:直播IM系统开发指南.md - 模块17
  • 完善总结:消息表情回应模块完善总结.md

最后更新2024年12月26日