diff --git a/go.mod b/go.mod index 9bcfb2c70..f11701ef6 100644 --- a/go.mod +++ b/go.mod @@ -157,6 +157,7 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect ) replace ( - github.com/OpenIMSDK/protocol v0.0.42 => github.com/AndrewZuo01/protocol v0.0.0-20240105021040-57f7d4a07674 + github.com/OpenIMSDK/protocol v0.0.42 => github.com/AndrewZuo01/protocol v0.0.0-20240105073553-6549825a1ead + ) \ No newline at end of file diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 7933be29b..bef53ad00 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -379,8 +379,16 @@ func (s *userServer) GetSubscribeUsersStatus(ctx context.Context, // ProcessUserCommandAdd user general function add func (s *userServer) ProcessUserCommandAdd(ctx context.Context, req *pbuser.ProcessUserCommandAddReq) (*pbuser.ProcessUserCommandAddResp, error) { + var value string + if req.Value != nil { + value = req.Value.Value + } + var ex string + if req.Ex != nil { + value = req.Ex.Value + } // Assuming you have a method in s.UserDatabase to add a user command - err := s.UserDatabase.AddUserCommand(ctx, req.UserID, req.Type, req.Uuid, req.Value) + err := s.UserDatabase.AddUserCommand(ctx, req.UserID, req.Type, req.Uuid, value, ex) if err != nil { return nil, err } @@ -409,8 +417,18 @@ func (s *userServer) ProcessUserCommandDelete(ctx context.Context, req *pbuser.P // ProcessUserCommandUpdate user general function update func (s *userServer) ProcessUserCommandUpdate(ctx context.Context, req *pbuser.ProcessUserCommandUpdateReq) (*pbuser.ProcessUserCommandUpdateResp, error) { + val := make(map[string]any) + + // Map fields from eax to val + if req.Value != nil { + val["value"] = req.Value.Value + } + if req.Ex != nil { + val["ex"] = req.Ex.Value + } + // Assuming you have a method in s.UserDatabase to update a user command - err := s.UserDatabase.UpdateUserCommand(ctx, req.UserID, req.Type, req.Uuid, req.Value) + err := s.UserDatabase.UpdateUserCommand(ctx, req.UserID, req.Type, req.Uuid, val) if err != nil { return nil, err } @@ -439,6 +457,7 @@ func (s *userServer) ProcessUserCommandGet(ctx context.Context, req *pbuser.Proc Uuid: command.Uuid, Value: command.Value, CreateTime: command.CreateTime, + Ex: command.Ex, }) } @@ -463,6 +482,7 @@ func (s *userServer) ProcessUserCommandGetAll(ctx context.Context, req *pbuser.P Uuid: command.Uuid, Value: command.Value, CreateTime: command.CreateTime, + Ex: command.Ex, }) } diff --git a/pkg/common/db/controller/user.go b/pkg/common/db/controller/user.go index a8955ca99..d6fc91935 100644 --- a/pkg/common/db/controller/user.go +++ b/pkg/common/db/controller/user.go @@ -74,9 +74,9 @@ type UserDatabase interface { SetUserStatus(ctx context.Context, userID string, status, platformID int32) error //CRUD user command - AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error + AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string, ex string) error DeleteUserCommand(ctx context.Context, userID string, Type int32, UUID string) error - UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error + UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, val map[string]any) error GetUserCommands(ctx context.Context, userID string, Type int32) ([]*user.CommandInfoResp, error) GetAllUserCommands(ctx context.Context, userID string) ([]*user.AllCommandInfoResp, error) } @@ -247,14 +247,14 @@ func (u *userDatabase) GetUserStatus(ctx context.Context, userIDs []string) ([]* func (u *userDatabase) SetUserStatus(ctx context.Context, userID string, status, platformID int32) error { return u.cache.SetUserStatus(ctx, userID, status, platformID) } -func (u *userDatabase) AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error { - return u.userDB.AddUserCommand(ctx, userID, Type, UUID, value) +func (u *userDatabase) AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string, ex string) error { + return u.userDB.AddUserCommand(ctx, userID, Type, UUID, value, ex) } func (u *userDatabase) DeleteUserCommand(ctx context.Context, userID string, Type int32, UUID string) error { return u.userDB.DeleteUserCommand(ctx, userID, Type, UUID) } -func (u *userDatabase) UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error { - return u.userDB.UpdateUserCommand(ctx, userID, Type, UUID, value) +func (u *userDatabase) UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, val map[string]any) error { + return u.userDB.UpdateUserCommand(ctx, userID, Type, UUID, val) } func (u *userDatabase) GetUserCommands(ctx context.Context, userID string, Type int32) ([]*user.CommandInfoResp, error) { commands, err := u.userDB.GetUserCommand(ctx, userID, Type) diff --git a/pkg/common/db/mgo/user.go b/pkg/common/db/mgo/user.go index 7121c18ec..50546703f 100644 --- a/pkg/common/db/mgo/user.go +++ b/pkg/common/db/mgo/user.go @@ -92,7 +92,7 @@ func (u *UserMgo) CountTotal(ctx context.Context, before *time.Time) (count int6 return mgoutil.Count(ctx, u.coll, bson.M{"create_time": bson.M{"$lt": before}}) } -func (u *UserMgo) AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error { +func (u *UserMgo) AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string, ex string) error { collection := u.coll.Database().Collection("userCommands") // Create a new document instead of updating an existing one @@ -102,11 +102,13 @@ func (u *UserMgo) AddUserCommand(ctx context.Context, userID string, Type int32, "uuid": UUID, "createTime": time.Now().Unix(), // assuming you want the creation time in Unix timestamp "value": value, + "ex": ex, } _, err := collection.InsertOne(ctx, doc) return err } + func (u *UserMgo) DeleteUserCommand(ctx context.Context, userID string, Type int32, UUID string) error { collection := u.coll.Database().Collection("userCommands") @@ -115,11 +117,15 @@ func (u *UserMgo) DeleteUserCommand(ctx context.Context, userID string, Type int _, err := collection.DeleteOne(ctx, filter) return err } -func (u *UserMgo) UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error { +func (u *UserMgo) UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, val map[string]any) error { + if len(val) == 0 { + return nil + } + collection := u.coll.Database().Collection("userCommands") filter := bson.M{"userID": userID, "type": Type, "uuid": UUID} - update := bson.M{"$set": bson.M{"value": value}} + update := bson.M{"$set": val} _, err := collection.UpdateOne(ctx, filter, update) return err @@ -143,6 +149,7 @@ func (u *UserMgo) GetUserCommand(ctx context.Context, userID string, Type int32) UUID string `bson:"uuid"` Value string `bson:"value"` CreateTime int64 `bson:"createTime"` + Ex string `bson:"ex"` } if err := cursor.Decode(&document); err != nil { @@ -154,6 +161,7 @@ func (u *UserMgo) GetUserCommand(ctx context.Context, userID string, Type int32) Uuid: document.UUID, Value: document.Value, CreateTime: document.CreateTime, + Ex: document.Ex, } commands = append(commands, commandInfo) @@ -184,6 +192,7 @@ func (u *UserMgo) GetAllUserCommand(ctx context.Context, userID string) ([]*user UUID string `bson:"uuid"` Value string `bson:"value"` CreateTime int64 `bson:"createTime"` + Ex string `bson:"ex"` } if err := cursor.Decode(&document); err != nil { @@ -195,6 +204,7 @@ func (u *UserMgo) GetAllUserCommand(ctx context.Context, userID string) ([]*user Uuid: document.UUID, Value: document.Value, CreateTime: document.CreateTime, + Ex: document.Ex, } commands = append(commands, commandInfo) diff --git a/pkg/common/db/table/relation/user.go b/pkg/common/db/table/relation/user.go index 1c0a68c16..d35d399a6 100644 --- a/pkg/common/db/table/relation/user.go +++ b/pkg/common/db/table/relation/user.go @@ -63,9 +63,9 @@ type UserModelInterface interface { // 获取范围内用户增量 CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) //CRUD user command - AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error + AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string, ex string) error DeleteUserCommand(ctx context.Context, userID string, Type int32, UUID string) error - UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error + UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, val map[string]any) error GetUserCommand(ctx context.Context, userID string, Type int32) ([]*user.CommandInfoResp, error) GetAllUserCommand(ctx context.Context, userID string) ([]*user.AllCommandInfoResp, error) }