diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index 2ae987b3d..daf668ca5 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -2,7 +2,6 @@ package controller import ( "fmt" - "sort" "time" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" @@ -339,20 +338,15 @@ func (db *commonMsgDatabase) BatchInsertChat2Cache(ctx context.Context, conversa } func (db *commonMsgDatabase) getMsgBySeqs(ctx context.Context, userID, conversationID string, seqs []int64) (totalMsgs []*sdkws.MsgData, err error) { - var totalUnExistSeqs []int64 for docID, seqs := range db.msg.GetDocIDSeqsMap(conversationID, seqs) { //log.ZDebug(ctx, "getMsgBySeqs", "docID", docID, "seqs", seqs) - msgs, unexistSeqs, err := db.findMsgInfoBySeq(ctx, userID, docID, seqs) + msgs, err := db.findMsgInfoBySeq(ctx, userID, docID, seqs) if err != nil { return nil, err } for _, msg := range msgs { totalMsgs = append(totalMsgs, convert.MsgDB2Pb(msg.Msg)) } - totalUnExistSeqs = append(totalUnExistSeqs, unexistSeqs...) - } - for _, unexistSeq := range totalUnExistSeqs { - totalMsgs = append(totalMsgs, db.msg.GenExceptionMessageBySeqs([]int64{unexistSeq})...) } return totalMsgs, nil } @@ -395,55 +389,21 @@ func (db *commonMsgDatabase) getMsgBySeqs(ctx context.Context, userID, conversat // return seqMsgs, nil // } -func (db *commonMsgDatabase) findMsgInfoBySeq(ctx context.Context, userID, docID string, seqs []int64) (totalMsgs []*unRelationTb.MsgInfoModel, unExistSeqs []int64, err error) { - msgs, err := db.msgDocDatabase.GetMsgBySeqIndexIn1Doc(ctx, userID, docID, seqs) - if err != nil { - return nil, nil, err - } - log.ZDebug(ctx, "findMsgInfoBySeq", "docID", docID, "seqs", seqs, "len(msgs)", len(msgs)) - totalMsgs = append(totalMsgs, msgs...) - if len(msgs) == 0 { - unExistSeqs = seqs - } else { - for _, seq := range seqs { - for i, msg := range msgs { - if msg.Msg != nil && seq == msg.Msg.Seq { - break - } - if i == len(msgs)-1 { - unExistSeqs = append(unExistSeqs, seq) - } - } - } - } - return totalMsgs, unExistSeqs, nil +func (db *commonMsgDatabase) findMsgInfoBySeq(ctx context.Context, userID, docID string, seqs []int64) (totalMsgs []*unRelationTb.MsgInfoModel, err error) { + return db.msgDocDatabase.GetMsgBySeqIndexIn1Doc(ctx, userID, docID, seqs) } func (db *commonMsgDatabase) getMsgBySeqsRange(ctx context.Context, userID string, conversationID string, allSeqs []int64, begin, end int64) (seqMsgs []*sdkws.MsgData, err error) { log.ZDebug(ctx, "getMsgBySeqsRange", "conversationID", conversationID, "allSeqs", allSeqs, "begin", begin, "end", end) - var totalNotExistSeqs []int64 - // mongo index - var delSeqs []int64 for docID, seqs := range db.msg.GetDocIDSeqsMap(conversationID, allSeqs) { log.ZDebug(ctx, "getMsgBySeqsRange", "docID", docID, "seqs", seqs) - msgs, notExistSeqs, err := db.findMsgInfoBySeq(ctx, userID, docID, seqs) + msgs, err := db.findMsgInfoBySeq(ctx, userID, docID, seqs) if err != nil { return nil, err } - log.ZDebug(ctx, "getMsgBySeqsRange", "unExistSeqs", notExistSeqs, "msgs", len(msgs)) for _, msg := range msgs { - if utils.IsContain(userID, msg.DelList) { - delSeqs = append(delSeqs, msg.Msg.Seq) - } seqMsgs = append(seqMsgs, convert.MsgDB2Pb(msg.Msg)) } - totalNotExistSeqs = append(totalNotExistSeqs, notExistSeqs...) - } - log.ZDebug(ctx, "getMsgBySeqsRange", "totalNotExistSeqs", totalNotExistSeqs, "del seqs", delSeqs) - // 补未找到的消息 - seqMsgs = append(seqMsgs, db.msg.GenExceptionMessageBySeqs(totalNotExistSeqs)...) - if len(totalNotExistSeqs) > 0 || len(delSeqs) > 0 { - sort.Sort(utils.MsgBySeq(seqMsgs)) } return seqMsgs, nil } diff --git a/pkg/common/db/unrelation/msg.go b/pkg/common/db/unrelation/msg.go index d0545b7aa..050715064 100644 --- a/pkg/common/db/unrelation/msg.go +++ b/pkg/common/db/unrelation/msg.go @@ -239,8 +239,13 @@ func (m *MsgMongoDriver) GetMsgBySeqIndexIn1Doc(ctx context.Context, userID stri if len(msgDocModel) == 0 { return nil, errs.Wrap(mongo.ErrNoDocuments) } - for i, msg := range msgDocModel[0].Msg { - if msg != nil && msg.Msg != nil && msg.Revoke != nil { + msgs = make([]*table.MsgInfoModel, 0, len(msgDocModel[0].Msg)) + for i := range msgDocModel[0].Msg { + msg := msgDocModel[0].Msg[i] + if msg == nil || msg.Msg == nil { + continue + } + if msg.Revoke != nil { var conversationID string if index := strings.LastIndex(docID, ":"); index > 0 { conversationID = docID[:index] @@ -258,11 +263,12 @@ func (m *MsgMongoDriver) GetMsgBySeqIndexIn1Doc(ctx context.Context, userID stri Detail: string(tipsData), } content, _ := json.Marshal(&elem) - msgDocModel[0].Msg[i].Msg.ContentType = constant.Revoke - msgDocModel[0].Msg[i].Msg.Content = string(content) + msg.Msg.ContentType = constant.Revoke + msg.Msg.Content = string(content) } + msgs = append(msgs, msg) } - return msgDocModel[0].Msg, nil + return msgs, nil } func (m *MsgMongoDriver) IsExistDocID(ctx context.Context, docID string) (bool, error) {