diff --git a/internal/api/route.go b/internal/api/route.go index 42d7a7744..8bfea5cca 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -77,6 +77,11 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive userRouterGroup.POST("/subscribe_users_status", ParseToken, u.SubscriberStatus) userRouterGroup.POST("/get_users_status", ParseToken, u.GetUserStatus) userRouterGroup.POST("/get_subscribe_users_status", ParseToken, u.GetSubscribeUsersStatus) + + userRouterGroup.POST("/process_user_command_add", ParseToken, u.ProcessUserCommandAdd) + userRouterGroup.POST("/process_user_command_delete", ParseToken, u.ProcessUserCommandDelete) + userRouterGroup.POST("/process_user_command_update", ParseToken, u.ProcessUserCommandUpdate) + userRouterGroup.POST("/process_user_command_get", ParseToken, u.ProcessUserCommandGet) } // friend routing group friendRouterGroup := r.Group("/friend", ParseToken) diff --git a/internal/api/user.go b/internal/api/user.go index b2aca8e11..8350d1711 100644 --- a/internal/api/user.go +++ b/internal/api/user.go @@ -200,4 +200,22 @@ func (u *UserApi) GetSubscribeUsersStatus(c *gin.Context) { a2r.Call(user.UserClient.GetSubscribeUsersStatus, u.Client, c) } -// Get +// ProcessUserCommandAdd user general function add +func (u *UserApi) ProcessUserCommandAdd(c *gin.Context) { + a2r.Call(user.UserClient.ProcessUserCommandAdd, u.Client, c) +} + +// ProcessUserCommandDelete user general function delete +func (u *UserApi) ProcessUserCommandDelete(c *gin.Context) { + a2r.Call(user.UserClient.ProcessUserCommandDelete, u.Client, c) +} + +// ProcessUserCommandUpdate user general function update +func (u *UserApi) ProcessUserCommandUpdate(c *gin.Context) { + a2r.Call(user.UserClient.ProcessUserCommandUpdate, u.Client, c) +} + +// ProcessUserCommandGet user general function get +func (u *UserApi) ProcessUserCommandGet(c *gin.Context) { + a2r.Call(user.UserClient.ProcessUserCommandGet, u.Client, c) +} diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index 4ce5a5443..636cbaacd 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -200,6 +200,5 @@ func CallbackAfterRevokeMsg(ctx context.Context, req *pbchat.RevokeMsgReq) error if err := http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackAfterRevokeMsg); err != nil { return err } - utils.StructFieldNotNilReplace(req, resp) return nil } diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 77da408aa..6129214d5 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -334,3 +334,48 @@ func (s *userServer) GetSubscribeUsersStatus(ctx context.Context, } return &pbuser.GetSubscribeUsersStatusResp{StatusList: onlineStatusList}, nil } + +// ProcessUserCommandAdd user general function add +func (s *userServer) ProcessUserCommandAdd(ctx context.Context, req *pbuser.ProcessUserCommandAddReq) (*pbuser.ProcessUserCommandAddResp, error) { + // 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) + if err != nil { + return nil, err + } + + return &pbuser.ProcessUserCommandAddResp{}, nil +} + +// ProcessUserCommandDelete user general function delete +func (s *userServer) ProcessUserCommandDelete(ctx context.Context, req *pbuser.ProcessUserCommandDeleteReq) (*pbuser.ProcessUserCommandDeleteResp, error) { + // Assuming you have a method in s.UserDatabase to delete a user command + err := s.UserDatabase.DeleteUserCommand(ctx, req.UserID, req.Type, req.Uuid) + if err != nil { + return nil, err + } + + return &pbuser.ProcessUserCommandDeleteResp{}, nil +} + +// ProcessUserCommandUpdate user general function update +func (s *userServer) ProcessUserCommandUpdate(ctx context.Context, req *pbuser.ProcessUserCommandUpdateReq) (*pbuser.ProcessUserCommandUpdateResp, error) { + // 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) + if err != nil { + return nil, err + } + + return &pbuser.ProcessUserCommandUpdateResp{}, nil +} + +// ProcessUserCommandGet user general function get +func (s *userServer) ProcessUserCommandGet(ctx context.Context, req *pbuser.ProcessUserCommandGetReq) (*pbuser.ProcessUserCommandGetResp, error) { + // Fetch user commands from the database + commands, err := s.UserDatabase.GetUserCommands(ctx, req.UserID, req.Type) + if err != nil { + return nil, err + } + + // The commands variable is already a map[string]string, so you can directly return it + return &pbuser.ProcessUserCommandGetResp{UuidValue: commands}, nil +} diff --git a/pkg/common/db/controller/user.go b/pkg/common/db/controller/user.go index ca703b729..c4ffd47d5 100644 --- a/pkg/common/db/controller/user.go +++ b/pkg/common/db/controller/user.go @@ -68,6 +68,12 @@ type UserDatabase interface { GetUserStatus(ctx context.Context, userIDs []string) ([]*user.OnlineStatus, error) // SetUserStatus Set the user status and store the user status in redis 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 + DeleteUserCommand(ctx context.Context, userID string, Type int32, UUID string) error + UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error + GetUserCommands(ctx context.Context, userID string, Type int32) (map[string]string, error) } type userDatabase struct { @@ -227,3 +233,16 @@ 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) 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) GetUserCommands(ctx context.Context, userID string, Type int32) (map[string]string, error) { + commands, err := u.userDB.GetUserCommands(ctx, userID, Type) + return commands, err +} diff --git a/pkg/common/db/mgo/user.go b/pkg/common/db/mgo/user.go index 4a53cb3c4..570d64a81 100644 --- a/pkg/common/db/mgo/user.go +++ b/pkg/common/db/mgo/user.go @@ -73,6 +73,67 @@ 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}}) } +type UserCommand struct { + UserID string `bson:"userID"` + Type int32 `bson:"type"` + Commands map[string]string `bson:"commands"` +} + +func (u *UserMgo) AddUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error { + collection := u.coll.Database().Collection("userCommands") + + filter := bson.M{"userID": userID, "type": Type} + update := bson.M{"$set": bson.M{"commands." + UUID: value}} + options := options.Update().SetUpsert(true) + + _, err := collection.UpdateOne(ctx, filter, update, options) + if err != nil { + return err + } + return nil +} +func (u *UserMgo) DeleteUserCommand(ctx context.Context, userID string, Type int32, UUID string) error { + collection := u.coll.Database().Collection("userCommands") + + filter := bson.M{"userID": userID, "type": Type} + update := bson.M{"$unset": bson.M{"commands." + UUID: ""}} + + _, err := collection.UpdateOne(ctx, filter, update) + if err != nil { + return err + } + return nil +} +func (u *UserMgo) UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error { + collection := u.coll.Database().Collection("userCommands") + + // Create a filter to identify the document + filter := bson.M{"userID": userID, "type": Type} + + // Create an update statement to set the new value for the command + update := bson.M{"$set": bson.M{"commands." + UUID: value}} + + // Perform the update operation + _, err := collection.UpdateOne(ctx, filter, update) + if err != nil { + return err + } + + return nil +} + +func (u *UserMgo) GetUserCommands(ctx context.Context, userID string, Type int32) (map[string]string, error) { + collection := u.coll.Database().Collection("userCommands") + + filter := bson.M{"userID": userID, "type": Type} + var result UserCommand + err := collection.FindOne(ctx, filter).Decode(&result) + if err != nil { + return nil, err + } + return result.Commands, nil +} + func (u *UserMgo) CountRangeEverydayTotal(ctx context.Context, start time.Time, end time.Time) (map[string]int64, error) { pipeline := bson.A{ bson.M{ diff --git a/pkg/common/db/table/relation/user.go b/pkg/common/db/table/relation/user.go index 1f26d751f..e39cb442e 100644 --- a/pkg/common/db/table/relation/user.go +++ b/pkg/common/db/table/relation/user.go @@ -60,4 +60,9 @@ type UserModelInterface interface { CountTotal(ctx context.Context, before *time.Time) (count int64, err error) // 获取范围内用户增量 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 + DeleteUserCommand(ctx context.Context, userID string, Type int32, UUID string) error + UpdateUserCommand(ctx context.Context, userID string, Type int32, UUID string, value string) error + GetUserCommands(ctx context.Context, userID string, Type int32) (map[string]string, error) }