RelaxingChat|功能实现
Fang 2024/12/9 RelaxingChat
# 功能实现
# 用户注册、登录
- 用户注册 user/register 必填邮箱和密码
- 邮箱发送验证码 email/code 验证码有效期5min,存在redis中
- 用户输入验证码后调用注册接口,验证成功后用户注册且返回token
- 用户登录 user/login
用户表 user
# 用户好友
# 用户申请好友
- 申请好友 post-friend/apply
- 好友申请列表 get-friend/apply/list
- 同意好友申请 post-friend/approve
- 好友列表 post-friend/list
- 是否好友 get-friend/check
- 删除好友 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
2
3
4
5
6
7
# 难点
- 请求参数的body根据请求参数msgType转换成对应的消息类型body,踩了json.Number转换的坑,gpt输出都是什么float,int类型,详见(ParseBody方法)
- 将json数据格式插入到数据库,因为orm的数据类型是string,导致
""
,就会报错,需要自己更换成"{}"
,当然这也是因为自己没有过滤空值。最后填充扩展消息的时候需要自己主动序列化,这样插入消息才正确,但是取出的转换还没有写 - 更新消息的时候,忘记主键重复(Where),空值过滤(OmitEmpty)等条件
- 注意事务,消息插入和更新,如果失败,则同时回滚数据