|
|
@ -114,7 +114,7 @@ import (
|
|
|
|
// return m.database.SetUserMinSeq(ctx, userID, minSeq)
|
|
|
|
// return m.database.SetUserMinSeq(ctx, userID, minSeq)
|
|
|
|
//}
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
type MsgDatabaseInterface interface {
|
|
|
|
type MsgDatabase interface {
|
|
|
|
// 批量插入消息
|
|
|
|
// 批量插入消息
|
|
|
|
BatchInsertChat2DB(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq int64) error
|
|
|
|
BatchInsertChat2DB(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq int64) error
|
|
|
|
// 刪除redis中消息缓存
|
|
|
|
// 刪除redis中消息缓存
|
|
|
@ -140,6 +140,8 @@ type MsgDatabaseInterface interface {
|
|
|
|
GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context, groupID string) (minSeqMongo, maxSeqMongo, maxSeqCache int64, err error)
|
|
|
|
GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context, groupID string) (minSeqMongo, maxSeqMongo, maxSeqCache int64, err error)
|
|
|
|
// 设置群用户最小seq 直接调用cache
|
|
|
|
// 设置群用户最小seq 直接调用cache
|
|
|
|
SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error)
|
|
|
|
SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error)
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
GetGroupUserMinSeq(ctx context.Context, groupID, userID string) (int64, error)
|
|
|
|
// 设置用户最小seq 直接调用cache
|
|
|
|
// 设置用户最小seq 直接调用cache
|
|
|
|
SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error)
|
|
|
|
SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error)
|
|
|
|
|
|
|
|
|
|
|
@ -162,97 +164,97 @@ type MsgDatabaseInterface interface {
|
|
|
|
GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error)
|
|
|
|
GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error)
|
|
|
|
GetGroupMinSeq(ctx context.Context, groupID string) (int64, error)
|
|
|
|
GetGroupMinSeq(ctx context.Context, groupID string) (int64, error)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
type MsgDatabase struct {
|
|
|
|
type msgDatabase struct {
|
|
|
|
mgo unRelationTb.MsgDocModelInterface
|
|
|
|
mgo unRelationTb.MsgDocModelInterface
|
|
|
|
cache cache.Cache
|
|
|
|
cache cache.Cache
|
|
|
|
msg unRelationTb.MsgDocModel
|
|
|
|
msg unRelationTb.MsgDocModel
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) JudgeMessageReactionEXISTS(ctx context.Context, clientMsgID string, sessionType int32) (bool, error) {
|
|
|
|
func (db *msgDatabase) JudgeMessageReactionEXISTS(ctx context.Context, clientMsgID string, sessionType int32) (bool, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) SetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey, value string) error {
|
|
|
|
func (db *msgDatabase) SetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey, value string) error {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) SetMessageReactionExpire(ctx context.Context, clientMsgID string, sessionType int32, expiration time.Duration) (bool, error) {
|
|
|
|
func (db *msgDatabase) SetMessageReactionExpire(ctx context.Context, clientMsgID string, sessionType int32, expiration time.Duration) (bool, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetExtendMsg(ctx context.Context, sourceID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (*pbMsg.ExtendMsg, error) {
|
|
|
|
func (db *msgDatabase) GetExtendMsg(ctx context.Context, sourceID string, sessionType int32, clientMsgID string, maxMsgUpdateTime int64) (*pbMsg.ExtendMsg, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) InsertOrUpdateReactionExtendMsgSet(ctx context.Context, sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*sdkws.KeyValue) error {
|
|
|
|
func (db *msgDatabase) InsertOrUpdateReactionExtendMsgSet(ctx context.Context, sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*sdkws.KeyValue) error {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey string) (string, error) {
|
|
|
|
func (db *msgDatabase) GetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey string) (string, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetOneMessageAllReactionList(ctx context.Context, clientMsgID string, sessionType int32) (map[string]string, error) {
|
|
|
|
func (db *msgDatabase) GetOneMessageAllReactionList(ctx context.Context, clientMsgID string, sessionType int32) (map[string]string, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) DeleteOneMessageKey(ctx context.Context, clientMsgID string, sessionType int32, subKey string) error {
|
|
|
|
func (db *msgDatabase) DeleteOneMessageKey(ctx context.Context, clientMsgID string, sessionType int32, subKey string) error {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) DeleteReactionExtendMsgSet(ctx context.Context, sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*sdkws.KeyValue) error {
|
|
|
|
func (db *msgDatabase) DeleteReactionExtendMsgSet(ctx context.Context, sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*sdkws.KeyValue) error {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) SetSendMsgStatus(ctx context.Context, userID string, status int32) error {
|
|
|
|
func (db *msgDatabase) SetSendMsgStatus(ctx context.Context, userID string, status int32) error {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetSendMsgStatus(ctx context.Context, userID string) (int32, error) {
|
|
|
|
func (db *msgDatabase) GetSendMsgStatus(ctx context.Context, userID string) (int32, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) MsgToMQ(ctx context.Context, key string, mq *pbMsg.MsgDataToMQ) error {
|
|
|
|
func (db *msgDatabase) MsgToMQ(ctx context.Context, key string, mq *pbMsg.MsgDataToMQ) error {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetUserMaxSeq(ctx context.Context, userID string) (int64, error) {
|
|
|
|
func (db *msgDatabase) GetUserMaxSeq(ctx context.Context, userID string) (int64, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetUserMinSeq(ctx context.Context, userID string) (int64, error) {
|
|
|
|
func (db *msgDatabase) GetUserMinSeq(ctx context.Context, userID string) (int64, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error) {
|
|
|
|
func (db *msgDatabase) GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetGroupMinSeq(ctx context.Context, groupID string) (int64, error) {
|
|
|
|
func (db *msgDatabase) GetGroupMinSeq(ctx context.Context, groupID string) (int64, error) {
|
|
|
|
//TODO implement me
|
|
|
|
//TODO implement me
|
|
|
|
panic("implement me")
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func NewMsgDatabase(mgo *mongo.Client, rdb redis.UniversalClient) MsgDatabaseInterface {
|
|
|
|
func NewMsgDatabase(mgo *mongo.Client, rdb redis.UniversalClient) MsgDatabase {
|
|
|
|
return &MsgDatabase{}
|
|
|
|
return &msgDatabase{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq int64) error {
|
|
|
|
func (db *msgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq int64) error {
|
|
|
|
//newTime := utils.GetCurrentTimestampByMill()
|
|
|
|
//newTime := utils.GetCurrentTimestampByMill()
|
|
|
|
if int64(len(msgList)) > db.msg.GetSingleGocMsgNum() {
|
|
|
|
if int64(len(msgList)) > db.msg.GetSingleGocMsgNum() {
|
|
|
|
return errors.New("too large")
|
|
|
|
return errors.New("too large")
|
|
|
@ -336,11 +338,11 @@ func (db *MsgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string,
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) DeleteMessageFromCache(ctx context.Context, userID string, msgs []*pbMsg.MsgDataToMQ) error {
|
|
|
|
func (db *msgDatabase) DeleteMessageFromCache(ctx context.Context, userID string, msgs []*pbMsg.MsgDataToMQ) error {
|
|
|
|
return db.cache.DeleteMessageFromCache(ctx, userID, msgs)
|
|
|
|
return db.cache.DeleteMessageFromCache(ctx, userID, msgs)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (int64, error) {
|
|
|
|
func (db *msgDatabase) BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (int64, error) {
|
|
|
|
//newTime := utils.GetCurrentTimestampByMill()
|
|
|
|
//newTime := utils.GetCurrentTimestampByMill()
|
|
|
|
lenList := len(msgList)
|
|
|
|
lenList := len(msgList)
|
|
|
|
if int64(lenList) > db.msg.GetSingleGocMsgNum() {
|
|
|
|
if int64(lenList) > db.msg.GetSingleGocMsgNum() {
|
|
|
@ -392,7 +394,7 @@ func (db *MsgDatabase) BatchInsertChat2Cache(ctx context.Context, sourceID strin
|
|
|
|
return lastMaxSeq, utils.Wrap(err, "")
|
|
|
|
return lastMaxSeq, utils.Wrap(err, "")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) DelMsgBySeqs(ctx context.Context, userID string, seqs []int64) (totalUnExistSeqs []int64, err error) {
|
|
|
|
func (db *msgDatabase) DelMsgBySeqs(ctx context.Context, userID string, seqs []int64) (totalUnExistSeqs []int64, err error) {
|
|
|
|
sortkeys.Int64s(seqs)
|
|
|
|
sortkeys.Int64s(seqs)
|
|
|
|
docIDSeqsMap := db.msg.GetDocIDSeqsMap(userID, seqs)
|
|
|
|
docIDSeqsMap := db.msg.GetDocIDSeqsMap(userID, seqs)
|
|
|
|
lock := sync.Mutex{}
|
|
|
|
lock := sync.Mutex{}
|
|
|
@ -413,7 +415,7 @@ func (db *MsgDatabase) DelMsgBySeqs(ctx context.Context, userID string, seqs []i
|
|
|
|
return totalUnExistSeqs, nil
|
|
|
|
return totalUnExistSeqs, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) DelMsgBySeqsInOneDoc(ctx context.Context, docID string, seqs []int64) (unExistSeqs []int64, err error) {
|
|
|
|
func (db *msgDatabase) DelMsgBySeqsInOneDoc(ctx context.Context, docID string, seqs []int64) (unExistSeqs []int64, err error) {
|
|
|
|
seqMsgs, indexes, unExistSeqs, err := db.GetMsgAndIndexBySeqsInOneDoc(ctx, docID, seqs)
|
|
|
|
seqMsgs, indexes, unExistSeqs, err := db.GetMsgAndIndexBySeqsInOneDoc(ctx, docID, seqs)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
return nil, err
|
|
|
@ -426,7 +428,7 @@ func (db *MsgDatabase) DelMsgBySeqsInOneDoc(ctx context.Context, docID string, s
|
|
|
|
return unExistSeqs, nil
|
|
|
|
return unExistSeqs, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetMsgAndIndexBySeqsInOneDoc(ctx context.Context, docID string, seqs []int64) (seqMsgs []*sdkws.MsgData, indexes []int, unExistSeqs []int64, err error) {
|
|
|
|
func (db *msgDatabase) GetMsgAndIndexBySeqsInOneDoc(ctx context.Context, docID string, seqs []int64) (seqMsgs []*sdkws.MsgData, indexes []int, unExistSeqs []int64, err error) {
|
|
|
|
doc, err := db.mgo.FindOneByDocID(ctx, docID)
|
|
|
|
doc, err := db.mgo.FindOneByDocID(ctx, docID)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, nil, err
|
|
|
|
return nil, nil, nil, err
|
|
|
@ -457,7 +459,7 @@ func (db *MsgDatabase) GetMsgAndIndexBySeqsInOneDoc(ctx context.Context, docID s
|
|
|
|
return seqMsgs, indexes, unExistSeqs, nil
|
|
|
|
return seqMsgs, indexes, unExistSeqs, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetNewestMsg(ctx context.Context, sourceID string) (msgPb *sdkws.MsgData, err error) {
|
|
|
|
func (db *msgDatabase) GetNewestMsg(ctx context.Context, sourceID string) (msgPb *sdkws.MsgData, err error) {
|
|
|
|
msgInfo, err := db.mgo.GetNewestMsg(ctx, sourceID)
|
|
|
|
msgInfo, err := db.mgo.GetNewestMsg(ctx, sourceID)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
return nil, err
|
|
|
@ -465,7 +467,7 @@ func (db *MsgDatabase) GetNewestMsg(ctx context.Context, sourceID string) (msgPb
|
|
|
|
return db.unmarshalMsg(msgInfo)
|
|
|
|
return db.unmarshalMsg(msgInfo)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetOldestMsg(ctx context.Context, sourceID string) (msgPb *sdkws.MsgData, err error) {
|
|
|
|
func (db *msgDatabase) GetOldestMsg(ctx context.Context, sourceID string) (msgPb *sdkws.MsgData, err error) {
|
|
|
|
msgInfo, err := db.mgo.GetOldestMsg(ctx, sourceID)
|
|
|
|
msgInfo, err := db.mgo.GetOldestMsg(ctx, sourceID)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
return nil, err
|
|
|
@ -473,7 +475,7 @@ func (db *MsgDatabase) GetOldestMsg(ctx context.Context, sourceID string) (msgPb
|
|
|
|
return db.unmarshalMsg(msgInfo)
|
|
|
|
return db.unmarshalMsg(msgInfo)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) unmarshalMsg(msgInfo *unRelationTb.MsgInfoModel) (msgPb *sdkws.MsgData, err error) {
|
|
|
|
func (db *msgDatabase) unmarshalMsg(msgInfo *unRelationTb.MsgInfoModel) (msgPb *sdkws.MsgData, err error) {
|
|
|
|
msgPb = &sdkws.MsgData{}
|
|
|
|
msgPb = &sdkws.MsgData{}
|
|
|
|
err = proto.Unmarshal(msgInfo.Msg, msgPb)
|
|
|
|
err = proto.Unmarshal(msgInfo.Msg, msgPb)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
@ -482,7 +484,7 @@ func (db *MsgDatabase) unmarshalMsg(msgInfo *unRelationTb.MsgInfoModel) (msgPb *
|
|
|
|
return msgPb, nil
|
|
|
|
return msgPb, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) getMsgBySeqs(ctx context.Context, sourceID string, seqs []int64, diffusionType int) (seqMsg []*sdkws.MsgData, err error) {
|
|
|
|
func (db *msgDatabase) getMsgBySeqs(ctx context.Context, sourceID string, seqs []int64, diffusionType int) (seqMsg []*sdkws.MsgData, err error) {
|
|
|
|
var hasSeqs []int64
|
|
|
|
var hasSeqs []int64
|
|
|
|
singleCount := 0
|
|
|
|
singleCount := 0
|
|
|
|
m := db.msg.GetDocIDSeqsMap(sourceID, seqs)
|
|
|
|
m := db.msg.GetDocIDSeqsMap(sourceID, seqs)
|
|
|
@ -523,7 +525,7 @@ func (db *MsgDatabase) getMsgBySeqs(ctx context.Context, sourceID string, seqs [
|
|
|
|
return seqMsg, nil
|
|
|
|
return seqMsg, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetMsgBySeqs(ctx context.Context, userID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) {
|
|
|
|
func (db *msgDatabase) GetMsgBySeqs(ctx context.Context, userID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) {
|
|
|
|
successMsgs, failedSeqs, err := db.cache.GetMessagesBySeq(ctx, userID, seqs)
|
|
|
|
successMsgs, failedSeqs, err := db.cache.GetMessagesBySeq(ctx, userID, seqs)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
if err != redis.Nil {
|
|
|
|
if err != redis.Nil {
|
|
|
@ -544,7 +546,7 @@ func (db *MsgDatabase) GetMsgBySeqs(ctx context.Context, userID string, seqs []i
|
|
|
|
return successMsgs, nil
|
|
|
|
return successMsgs, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) {
|
|
|
|
func (db *msgDatabase) GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) {
|
|
|
|
successMsgs, failedSeqs, err := db.cache.GetMessagesBySeq(ctx, groupID, seqs)
|
|
|
|
successMsgs, failedSeqs, err := db.cache.GetMessagesBySeq(ctx, groupID, seqs)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
if err != redis.Nil {
|
|
|
|
if err != redis.Nil {
|
|
|
@ -565,7 +567,7 @@ func (db *MsgDatabase) GetSuperGroupMsgBySeqs(ctx context.Context, groupID strin
|
|
|
|
return successMsgs, nil
|
|
|
|
return successMsgs, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) CleanUpUserMsg(ctx context.Context, userID string) error {
|
|
|
|
func (db *msgDatabase) CleanUpUserMsg(ctx context.Context, userID string) error {
|
|
|
|
err := db.DeleteUserMsgsAndSetMinSeq(ctx, userID, 0)
|
|
|
|
err := db.DeleteUserMsgsAndSetMinSeq(ctx, userID, 0)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
return err
|
|
|
@ -574,7 +576,7 @@ func (db *MsgDatabase) CleanUpUserMsg(ctx context.Context, userID string) error
|
|
|
|
return utils.Wrap(err, "")
|
|
|
|
return utils.Wrap(err, "")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, groupID string, userIDs []string, remainTime int64) error {
|
|
|
|
func (db *msgDatabase) DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, groupID string, userIDs []string, remainTime int64) error {
|
|
|
|
var delStruct delMsgRecursionStruct
|
|
|
|
var delStruct delMsgRecursionStruct
|
|
|
|
minSeq, err := db.deleteMsgRecursion(ctx, groupID, unRelationTb.OldestList, &delStruct, remainTime)
|
|
|
|
minSeq, err := db.deleteMsgRecursion(ctx, groupID, unRelationTb.OldestList, &delStruct, remainTime)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
@ -602,7 +604,7 @@ func (db *MsgDatabase) DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context,
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) DeleteUserMsgsAndSetMinSeq(ctx context.Context, userID string, remainTime int64) error {
|
|
|
|
func (db *msgDatabase) DeleteUserMsgsAndSetMinSeq(ctx context.Context, userID string, remainTime int64) error {
|
|
|
|
var delStruct delMsgRecursionStruct
|
|
|
|
var delStruct delMsgRecursionStruct
|
|
|
|
minSeq, err := db.deleteMsgRecursion(ctx, userID, unRelationTb.OldestList, &delStruct, remainTime)
|
|
|
|
minSeq, err := db.deleteMsgRecursion(ctx, userID, unRelationTb.OldestList, &delStruct, remainTime)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
@ -628,7 +630,7 @@ func (d *delMsgRecursionStruct) getSetMinSeq() int64 {
|
|
|
|
// seq 70
|
|
|
|
// seq 70
|
|
|
|
// set minSeq 21
|
|
|
|
// set minSeq 21
|
|
|
|
// recursion 删除list并且返回设置的最小seq
|
|
|
|
// recursion 删除list并且返回设置的最小seq
|
|
|
|
func (db *MsgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, index int64, delStruct *delMsgRecursionStruct, remainTime int64) (int64, error) {
|
|
|
|
func (db *msgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, index int64, delStruct *delMsgRecursionStruct, remainTime int64) (int64, error) {
|
|
|
|
// find from oldest list
|
|
|
|
// find from oldest list
|
|
|
|
msgs, err := db.mgo.GetMsgsByIndex(ctx, sourceID, index)
|
|
|
|
msgs, err := db.mgo.GetMsgsByIndex(ctx, sourceID, index)
|
|
|
|
if err != nil || msgs.DocID == "" {
|
|
|
|
if err != nil || msgs.DocID == "" {
|
|
|
@ -690,10 +692,10 @@ func (db *MsgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string,
|
|
|
|
//log.NewDebug(operationID, sourceID, "continue to", delStruct)
|
|
|
|
//log.NewDebug(operationID, sourceID, "continue to", delStruct)
|
|
|
|
// 继续递归 index+1
|
|
|
|
// 继续递归 index+1
|
|
|
|
seq, err := db.deleteMsgRecursion(ctx, sourceID, index+1, delStruct, remainTime)
|
|
|
|
seq, err := db.deleteMsgRecursion(ctx, sourceID, index+1, delStruct, remainTime)
|
|
|
|
return seq, utils.Wrap(err, "deleteMsg failed")
|
|
|
|
return seq, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetUserMinMaxSeqInMongoAndCache(ctx context.Context, userID string) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) {
|
|
|
|
func (db *msgDatabase) GetUserMinMaxSeqInMongoAndCache(ctx context.Context, userID string) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) {
|
|
|
|
minSeqMongo, maxSeqMongo, err = db.GetMinMaxSeqMongo(ctx, userID)
|
|
|
|
minSeqMongo, maxSeqMongo, err = db.GetMinMaxSeqMongo(ctx, userID)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return 0, 0, 0, 0, err
|
|
|
|
return 0, 0, 0, 0, err
|
|
|
@ -710,7 +712,7 @@ func (db *MsgDatabase) GetUserMinMaxSeqInMongoAndCache(ctx context.Context, user
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context, groupID string) (minSeqMongo, maxSeqMongo, maxSeqCache int64, err error) {
|
|
|
|
func (db *msgDatabase) GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context, groupID string) (minSeqMongo, maxSeqMongo, maxSeqCache int64, err error) {
|
|
|
|
minSeqMongo, maxSeqMongo, err = db.GetMinMaxSeqMongo(ctx, groupID)
|
|
|
|
minSeqMongo, maxSeqMongo, err = db.GetMinMaxSeqMongo(ctx, groupID)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return 0, 0, 0, err
|
|
|
|
return 0, 0, 0, err
|
|
|
@ -722,7 +724,7 @@ func (db *MsgDatabase) GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) GetMinMaxSeqMongo(ctx context.Context, sourceID string) (minSeqMongo, maxSeqMongo int64, err error) {
|
|
|
|
func (db *msgDatabase) GetMinMaxSeqMongo(ctx context.Context, sourceID string) (minSeqMongo, maxSeqMongo int64, err error) {
|
|
|
|
oldestMsgMongo, err := db.mgo.GetOldestMsg(ctx, sourceID)
|
|
|
|
oldestMsgMongo, err := db.mgo.GetOldestMsg(ctx, sourceID)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return 0, 0, err
|
|
|
|
return 0, 0, err
|
|
|
@ -744,10 +746,10 @@ func (db *MsgDatabase) GetMinMaxSeqMongo(ctx context.Context, sourceID string) (
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) {
|
|
|
|
func (db *msgDatabase) SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) {
|
|
|
|
return db.cache.SetGroupUserMinSeq(ctx, groupID, userID, minSeq)
|
|
|
|
return db.cache.SetGroupUserMinSeq(ctx, groupID, userID, minSeq)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (db *MsgDatabase) SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error) {
|
|
|
|
func (db *msgDatabase) SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error) {
|
|
|
|
return db.cache.SetUserMinSeq(ctx, userID, minSeq)
|
|
|
|
return db.cache.SetUserMinSeq(ctx, userID, minSeq)
|
|
|
|
}
|
|
|
|
}
|
|
|
|