|
|
|
// Copyright © 2023 OpenIM. All rights reserved.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
package unrelation
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
CExtendMsgSet = "extend_msgs"
|
|
|
|
|
|
|
|
ExtendMsgMaxNum = 100
|
|
|
|
)
|
|
|
|
|
|
|
|
type ExtendMsgSetModel struct {
|
|
|
|
ConversationID string `bson:"source_id" json:"conversationID"`
|
|
|
|
SessionType int32 `bson:"session_type" json:"sessionType"`
|
|
|
|
ExtendMsgs map[string]ExtendMsgModel `bson:"extend_msgs" json:"extendMsgs"`
|
|
|
|
ExtendMsgNum int32 `bson:"extend_msg_num" json:"extendMsgNum"`
|
|
|
|
CreateTime int64 `bson:"create_time" json:"createTime"` // this block's create time
|
|
|
|
MaxMsgUpdateTime int64 `bson:"max_msg_update_time" json:"maxMsgUpdateTime"` // index find msg
|
|
|
|
}
|
|
|
|
|
|
|
|
type KeyValueModel struct {
|
|
|
|
TypeKey string `bson:"type_key" json:"typeKey"`
|
|
|
|
Value string `bson:"value" json:"value"`
|
|
|
|
LatestUpdateTime int64 `bson:"latest_update_time" json:"latestUpdateTime"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type ExtendMsgModel struct {
|
|
|
|
ReactionExtensionList map[string]KeyValueModel `bson:"reaction_extension_list" json:"reactionExtensionList"`
|
|
|
|
ClientMsgID string `bson:"client_msg_id" json:"clientMsgID"`
|
|
|
|
MsgFirstModifyTime int64 `bson:"msg_first_modify_time" json:"msgFirstModifyTime"` // this extendMsg create time
|
|
|
|
AttachedInfo string `bson:"attached_info" json:"attachedInfo"`
|
|
|
|
Ex string `bson:"ex" json:"ex"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type ExtendMsgSetModelInterface interface {
|
|
|
|
CreateExtendMsgSet(ctx context.Context, set *ExtendMsgSetModel) error
|
|
|
|
GetAllExtendMsgSet(
|
|
|
|
ctx context.Context,
|
|
|
|
conversationID string,
|
|
|
|
opts *GetAllExtendMsgSetOpts,
|
|
|
|
) (sets []*ExtendMsgSetModel, err error)
|
|
|
|
GetExtendMsgSet(
|
|
|
|
ctx context.Context,
|
|
|
|
conversationID string,
|
|
|
|
sessionType int32,
|
|
|
|
maxMsgUpdateTime int64,
|
|
|
|
) (*ExtendMsgSetModel, error)
|
|
|
|
InsertExtendMsg(ctx context.Context, conversationID string, sessionType int32, msg *ExtendMsgModel) error
|
|
|
|
InsertOrUpdateReactionExtendMsgSet(
|
|
|
|
ctx context.Context,
|
|
|
|
conversationID string,
|
|
|
|
sessionType int32,
|
|
|
|
clientMsgID string,
|
|
|
|
msgFirstModifyTime int64,
|
|
|
|
reactionExtensionList map[string]*KeyValueModel,
|
|
|
|
) error
|
|
|
|
DeleteReactionExtendMsgSet(
|
|
|
|
ctx context.Context,
|
|
|
|
conversationID string,
|
|
|
|
sessionType int32,
|
|
|
|
clientMsgID string,
|
|
|
|
msgFirstModifyTime int64,
|
|
|
|
reactionExtensionList map[string]*KeyValueModel,
|
|
|
|
) error
|
|
|
|
TakeExtendMsg(
|
|
|
|
ctx context.Context,
|
|
|
|
conversationID string,
|
|
|
|
sessionType int32,
|
|
|
|
clientMsgID string,
|
|
|
|
maxMsgUpdateTime int64,
|
|
|
|
) (extendMsg *ExtendMsgModel, err error)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ExtendMsgSetModel) TableName() string {
|
|
|
|
return CExtendMsgSet
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ExtendMsgSetModel) GetExtendMsgMaxNum() int32 {
|
|
|
|
return ExtendMsgMaxNum
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ExtendMsgSetModel) GetConversationID(ID string, index int32) string {
|
|
|
|
return ID + ":" + strconv.Itoa(int(index))
|
|
|
|
}
|
|
|
|
|
|
|
|
func (e *ExtendMsgSetModel) SplitConversationIDAndGetIndex() int32 {
|
|
|
|
l := strings.Split(e.ConversationID, ":")
|
|
|
|
index, _ := strconv.Atoi(l[len(l)-1])
|
|
|
|
return int32(index)
|
|
|
|
}
|
|
|
|
|
|
|
|
type GetAllExtendMsgSetOpts struct {
|
|
|
|
ExcludeExtendMsgs bool
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ExtendMsgSetModel) Pb2Model(reactionExtensionList map[string]*sdkws.KeyValue) map[string]*KeyValueModel {
|
|
|
|
r := make(map[string]*KeyValueModel)
|
|
|
|
for key, value := range reactionExtensionList {
|
|
|
|
r[key] = &KeyValueModel{
|
|
|
|
TypeKey: value.TypeKey,
|
|
|
|
Value: value.Value,
|
|
|
|
LatestUpdateTime: value.LatestUpdateTime,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return r
|
|
|
|
}
|