From 6c82023ae72288cb26d4ac879aea61ba9549f781 Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Fri, 19 Jul 2024 10:32:10 +0800 Subject: [PATCH 1/3] feat: implement checkConversation seq. --- internal/interaction/msg_sync.go | 6 ++++-- pkg/db/chat_log_model.go | 14 +++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/internal/interaction/msg_sync.go b/internal/interaction/msg_sync.go index 8edc3c451..897e49798 100644 --- a/internal/interaction/msg_sync.go +++ b/internal/interaction/msg_sync.go @@ -24,6 +24,7 @@ import ( "github.com/openimsdk/openim-sdk-core/v3/pkg/db/db_interface" "github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct" "github.com/openimsdk/openim-sdk-core/v3/sdk_struct" + "github.com/openimsdk/tools/errs" "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/tools/log" @@ -81,6 +82,7 @@ func (m *MsgSyncer) loadSeq(ctx context.Context) error { } // TODO With a large number of sessions, this could potentially cause blocking and needs optimization. + type SyncedSeq struct { ConversationID string MaxSyncedSeq int64 @@ -105,7 +107,7 @@ func (m *MsgSyncer) loadSeq(ctx context.Context) error { go func(i, start, end int) { defer wg.Done() for _, v := range conversationIDList[start:end] { - maxSyncedSeq, err := m.db.GetConversationNormalMsgSeqNoInit(ctx, v) + maxSyncedSeq, err := m.db.CheckConversationNormalMsgSeq(ctx, v) resultMaps[i][v] = SyncedSeq{ ConversationID: v, MaxSyncedSeq: maxSyncedSeq, @@ -121,7 +123,7 @@ func (m *MsgSyncer) loadSeq(ctx context.Context) error { for _, resultMap := range resultMaps { for k, v := range resultMap { if v.Err != nil { - log.ZError(ctx, "get group normal seq failed", v.Err, "conversationID", k) + log.ZError(ctx, "get group normal seq failed", errs.Wrap(v.Err), "conversationID", k) continue } m.syncedMaxSeqs[k] = v.MaxSyncedSeq diff --git a/pkg/db/chat_log_model.go b/pkg/db/chat_log_model.go index 91fe72c49..ab1401a40 100644 --- a/pkg/db/chat_log_model.go +++ b/pkg/db/chat_log_model.go @@ -239,7 +239,9 @@ func (d *DataBase) SearchMessageByKeyword(ctx context.Context, contentType []int condition += subCondition err = errs.WrapMsg(d.conn.WithContext(ctx).Table(utils.GetTableName(conversationID)).Where(condition, contentType).Order("send_time DESC").Offset(offset).Limit(count).Find(&result).Error, "InsertMessage failed") return result, err -} // SearchMessageByContentTypeAndKeyword searches for messages in the database that match specified content types and keywords within a given time range. +} + +// SearchMessageByContentTypeAndKeyword searches for messages in the database that match specified content types and keywords within a given time range. func (d *DataBase) SearchMessageByContentTypeAndKeyword(ctx context.Context, contentType []int, conversationID string, keywordList []string, keywordListMatchType int, startTime, endTime int64) (result []*model_struct.LocalChatLog, err error) { var condition string var subCondition string @@ -385,6 +387,16 @@ func (d *DataBase) GetConversationNormalMsgSeq(ctx context.Context, conversation return seq, errs.WrapMsg(err, "GetConversationNormalMsgSeq") } +func (d *DataBase) CheckConversationNormalMsgSeq(ctx context.Context, conversationID string) (int64, error) { + var seq int64 + + if d.tableChecker.HasTable(utils.GetConversationTableName(conversationID)) { + d.conn.WithContext(ctx).Table(utils.GetConversationTableName(conversationID)).Select("IFNULL(max(seq),0)").Find(&seq) + return seq, nil + } + return 0, nil +} + func (d *DataBase) GetConversationNormalMsgSeqNoInit(ctx context.Context, conversationID string) (int64, error) { var seq int64 err := d.conn.WithContext(ctx).Table(utils.GetConversationTableName(conversationID)).Select("IFNULL(max(seq),0)").Find(&seq).Error From 29dd7d094212e1213974ee8701f51b4753a57ff3 Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Fri, 19 Jul 2024 10:38:05 +0800 Subject: [PATCH 2/3] update method contents and remove unnecessary method. --- pkg/db/chat_log_model.go | 10 ++-------- pkg/db/db_interface/databse.go | 2 +- wasm/indexdb/chat_log_model.go | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/pkg/db/chat_log_model.go b/pkg/db/chat_log_model.go index ab1401a40..922dc1d47 100644 --- a/pkg/db/chat_log_model.go +++ b/pkg/db/chat_log_model.go @@ -391,18 +391,12 @@ func (d *DataBase) CheckConversationNormalMsgSeq(ctx context.Context, conversati var seq int64 if d.tableChecker.HasTable(utils.GetConversationTableName(conversationID)) { - d.conn.WithContext(ctx).Table(utils.GetConversationTableName(conversationID)).Select("IFNULL(max(seq),0)").Find(&seq) - return seq, nil + err := d.conn.WithContext(ctx).Table(utils.GetConversationTableName(conversationID)).Select("IFNULL(max(seq),0)").Find(&seq).Error + return seq, err } return 0, nil } -func (d *DataBase) GetConversationNormalMsgSeqNoInit(ctx context.Context, conversationID string) (int64, error) { - var seq int64 - err := d.conn.WithContext(ctx).Table(utils.GetConversationTableName(conversationID)).Select("IFNULL(max(seq),0)").Find(&seq).Error - return seq, errs.WrapMsg(err, "GetConversationNormalMsgSeq") -} - func (d *DataBase) GetConversationPeerNormalMsgSeq(ctx context.Context, conversationID string) (int64, error) { var seq int64 err := d.conn.WithContext(ctx).Table(utils.GetConversationTableName(conversationID)).Select("IFNULL(max(seq),0)").Where("send_id != ?", d.loginUserID).Find(&seq).Error diff --git a/pkg/db/db_interface/databse.go b/pkg/db/db_interface/databse.go index b6ada51c0..930c604ab 100644 --- a/pkg/db/db_interface/databse.go +++ b/pkg/db/db_interface/databse.go @@ -104,7 +104,7 @@ type MessageModel interface { GetMessagesByClientMsgIDs(ctx context.Context, conversationID string, msgIDs []string) (result []*model_struct.LocalChatLog, err error) GetMessagesBySeqs(ctx context.Context, conversationID string, seqs []int64) (result []*model_struct.LocalChatLog, err error) GetConversationNormalMsgSeq(ctx context.Context, conversationID string) (int64, error) - GetConversationNormalMsgSeqNoInit(ctx context.Context, conversationID string) (int64, error) + CheckConversationNormalMsgSeq(ctx context.Context, conversationID string) (int64, error) GetConversationPeerNormalMsgSeq(ctx context.Context, conversationID string) (int64, error) UpdateMsgSenderNickname(ctx context.Context, sendID, nickname string, sType int) error diff --git a/wasm/indexdb/chat_log_model.go b/wasm/indexdb/chat_log_model.go index 5c9c208b3..ed0bbb101 100644 --- a/wasm/indexdb/chat_log_model.go +++ b/wasm/indexdb/chat_log_model.go @@ -713,7 +713,7 @@ func (i *LocalChatLogs) GetConversationNormalMsgSeq(ctx context.Context, convers } } -func (i *LocalChatLogs) GetConversationNormalMsgSeqNoInit(ctx context.Context, conversationID string) (int64, error) { +func (i *LocalChatLogs) CheckConversationNormalMsgSeq(ctx context.Context, conversationID string) (int64, error) { seq, err := exec.Exec(conversationID) if err != nil { return 0, err From ca04536ff48b25fe9461b50f08e953a160737bdf Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Fri, 19 Jul 2024 10:39:27 +0800 Subject: [PATCH 3/3] update error wrap. --- pkg/db/chat_log_model.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/db/chat_log_model.go b/pkg/db/chat_log_model.go index 922dc1d47..9dbcb1ac1 100644 --- a/pkg/db/chat_log_model.go +++ b/pkg/db/chat_log_model.go @@ -392,7 +392,7 @@ func (d *DataBase) CheckConversationNormalMsgSeq(ctx context.Context, conversati if d.tableChecker.HasTable(utils.GetConversationTableName(conversationID)) { err := d.conn.WithContext(ctx).Table(utils.GetConversationTableName(conversationID)).Select("IFNULL(max(seq),0)").Find(&seq).Error - return seq, err + return seq, errs.Wrap(err) } return 0, nil }