You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

53 lines
1.4 KiB

package service
import (
"context"
"fmt"
"math"
"sort"
"github.com/TremblingV5/DouTok/applications/message/pack"
"github.com/TremblingV5/DouTok/kitex_gen/message"
"github.com/TremblingV5/DouTok/pkg/misc"
"github.com/TremblingV5/DouTok/pkg/utils"
)
type MessageChatService struct {
ctx context.Context
}
func NewMessageChatService(ctx context.Context) *MessageChatService {
return &MessageChatService{ctx: ctx}
}
func (s *MessageChatService) MessageChat(req *message.DouyinMessageChatRequest) (error, []*message.Message) {
// 从 hbase 获取聊天记录
messageList := make([]*message.Message, 0)
sessionId := utils.GenerateSessionId(req.UserId, req.ToUserId)
start := fmt.Sprintf("%s%d", sessionId, req.PreMsgTime)
end := fmt.Sprintf("%s%d", sessionId, math.MaxInt)
res, err := HBClient.ScanRange(ViperConfig.Viper.GetString("Hbase.Table"), start, end)
if err != nil {
return err, nil
}
for _, v := range res {
hbMsg := pack.HBMessage{}
err := misc.Map2Struct4HB(v, &hbMsg)
if err != nil {
continue
}
packMsg := pack.HBMsg2Msg(&hbMsg)
message := message.Message{
Id: packMsg.Id,
ToUserId: packMsg.ToUserId,
FromUserId: packMsg.FromUserId,
Content: packMsg.Content,
CreateTime: packMsg.CreateTime,
}
messageList = append(messageList, &message)
}
sort.SliceStable(messageList, func(i, j int) bool {
return messageList[i].CreateTime < messageList[j].CreateTime
})
return nil, messageList
}