需求描述
这次的需求同样是针对 001 项目的(聚合聊天),背景为在会话资源获取失败的情况下,进行重新获取,针对这次需求的实现,分为了两个部分:接口和逻辑。接口进行相应的判断,验证是否需要调用 RPC 协议进行重新请求,逻辑对应请求成功后进行数据更新、前端推送两个部分。话不多说直入正题
消息重新获取 接口
1、通过会话 ID 查询会话信息
//查询会话信息
conversationInfo, err := dao.NewZqConversationDao().Get(ctx, req.ConvId)
if err != nil || conversationInfo.Id == 0 {
logger.Ex(ctx, tag, fmt.Sprintf("查询会话信息失败 req = %+v, err = %v", req, err))
return
}
轮子 Get :
func (c *ZqConversationDao) Get(ctx context.Context, id int64) (res *ZqConversation, err error) {
res = new(ZqConversation)
slaveDB := c.db.Engine.Slave()
_, err = slaveDB.Table(ZqConversation{}).ID(id).Get(res)
if err != nil {
return
}
return
}
轮子通过指定的 id
从数据库的从库中获取一条 ZqConversation
记录,它首先初始化一个新的 ZqConversation
实例,并将查询结果填充到该实例中,使用从库来执行读操作也减轻了主库的负担
2、查询消息表信息
//查询消息表信息
hkUserMsgInfo, err := dao.NewZqMsgDao().GetMessageByMsgId(ctx, conversationInfo.HkUserid, req.MsgId)
if err != nil || hkUserMsgInfo.Id == 0 {
logger.Ex(ctx, tag, fmt.Sprintf("查询消息表信息失败 req = %+v, err = %v", req, err))
return
}
轮子 GetMessageByMsgId :
func (c *ZqMsgDao) GetMessageByMsgId(ctx context.Context, hkUserId string, msgId int64) (res *ZqMsg, err