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.
70 lines
1.8 KiB
70 lines
1.8 KiB
package model
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"github.com/openimsdk/tools/log"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
VersionStateInsert = iota + 1
|
|
VersionStateDelete
|
|
VersionStateUpdate
|
|
)
|
|
|
|
type VersionLogElem struct {
|
|
EID string `bson:"e_id"`
|
|
State int32 `bson:"state"`
|
|
Version uint `bson:"version"`
|
|
LastUpdate time.Time `bson:"last_update"`
|
|
}
|
|
|
|
type VersionLogTable struct {
|
|
ID primitive.ObjectID `bson:"_id"`
|
|
DID string `bson:"d_id"`
|
|
Logs []VersionLogElem `bson:"logs"`
|
|
Version uint `bson:"version"`
|
|
Deleted uint `bson:"deleted"`
|
|
LastUpdate time.Time `bson:"last_update"`
|
|
}
|
|
|
|
func (v *VersionLogTable) VersionLog() *VersionLog {
|
|
return &VersionLog{
|
|
ID: v.ID,
|
|
DID: v.DID,
|
|
Logs: v.Logs,
|
|
Version: v.Version,
|
|
Deleted: v.Deleted,
|
|
LastUpdate: v.LastUpdate,
|
|
LogLen: len(v.Logs),
|
|
}
|
|
}
|
|
|
|
type VersionLog struct {
|
|
ID primitive.ObjectID `bson:"_id"`
|
|
DID string `bson:"d_id"`
|
|
Logs []VersionLogElem `bson:"logs"`
|
|
Version uint `bson:"version"`
|
|
Deleted uint `bson:"deleted"`
|
|
LastUpdate time.Time `bson:"last_update"`
|
|
LogLen int `bson:"log_len"`
|
|
}
|
|
|
|
func (v *VersionLog) DeleteAndChangeIDs() (insertIds, deleteIds, updateIds []string) {
|
|
for _, l := range v.Logs {
|
|
switch l.State {
|
|
case VersionStateInsert:
|
|
insertIds = append(insertIds, l.EID)
|
|
case VersionStateDelete:
|
|
deleteIds = append(deleteIds, l.EID)
|
|
case VersionStateUpdate:
|
|
updateIds = append(updateIds, l.EID)
|
|
default:
|
|
log.ZError(context.Background(), "invalid version status found", errors.New("dirty database data"), "objID", v.ID.Hex(), "did", v.DID, "elem", l)
|
|
}
|
|
}
|
|
return
|
|
}
|