RelaxingChat|功能实现

2024/12/9 RelaxingChat

# 功能实现

# 用户注册、登录

  1. 用户注册 user/register 必填邮箱和密码
  2. 邮箱发送验证码 email/code 验证码有效期5min,存在redis中
  3. 用户输入验证码后调用注册接口,验证成功后用户注册且返回token
  4. 用户登录 user/login

用户表 user

# 用户好友

# 用户申请好友

  1. 申请好友 post-friend/apply
  2. 好友申请列表 get-friend/apply/list
  3. 同意好友申请 post-friend/approve
  4. 好友列表 post-friend/list
  5. 是否好友 get-friend/check
  6. 删除好友 post-friend/delete

用户申请表 user_apply

好友表 friend

# 消息

# 消息发送

# 问题

// 如何优雅实现根据msgType将Body转换为TextMsgBody/ImageMsgBody
type ChatMsgReq struct {
  g.Meta  `path:"/chat/msg" method:"post" tags:"Chat" summary:"发送消息"`
  RoomId  string      `json:"roomId"       description:"房间id" v:"required#房间id必填"`
  MsgType int         `json:"msgType"      description:"消息类型" v:"required#消息类型必填"`
  Body    interface{} `json:"body"         description:"消息体" v:"required#消息体必填"`
}
1
2
3
4
5
6
7

# 难点

  1. 请求参数的body根据请求参数msgType转换成对应的消息类型body,踩了json.Number转换的坑,gpt输出都是什么float,int类型,详见(ParseBody方法)
  2. 将json数据格式插入到数据库,因为orm的数据类型是string,导致"",就会报错,需要自己更换成"{}",当然这也是因为自己没有过滤空值。最后填充扩展消息的时候需要自己主动序列化,这样插入消息才正确,但是取出的转换还没有写
  3. 更新消息的时候,忘记主键重复(Where),空值过滤(OmitEmpty)等条件
  4. 注意事务,消息插入和更新,如果失败,则同时回滚数据
Last Updated: 2025/1/8 21:37:04