From 29e8151420f7655cc7a112d8f013160d4e72425d Mon Sep 17 00:00:00 2001 From: junleea <354425203@qq.com> Date: Wed, 11 Dec 2024 17:43:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=95=B0=E6=8D=AE=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/user.go | 7 +++++++ handler/user.go | 42 ++++++++++++++++++++++++++++++++++++++++++ proto/user_req.go | 8 ++++++++ service/userService.go | 26 ++++++++++++++++++++++++++ 4 files changed, 83 insertions(+) diff --git a/dao/user.go b/dao/user.go index c474040..c6236b2 100644 --- a/dao/user.go +++ b/dao/user.go @@ -128,3 +128,10 @@ func DeleteUserSync(req proto.UserDelID) uint { } return req.ID } + +// 获取所有用户 +func GetAllUser() []proto.User { + var users []proto.User + DB.Find(&users) + return users +} diff --git a/handler/user.go b/handler/user.go index 11023d0..03a44e0 100644 --- a/handler/user.go +++ b/handler/user.go @@ -26,6 +26,7 @@ func SetUpUserGroup(router *gin.Engine) { userGroup.POST("/search", SearchHandler) userGroup.POST("/info", GetUserInfo) userGroup.POST("/update", UpdateUserInfo) + userGroup.POST("/sync", GetSyncUserInfo) } type RLReq struct { @@ -350,3 +351,44 @@ func registerHandler(c *gin.Context) { c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": data}) return } + +type SyncUserReq struct { + token string `json:"token" form:"token"` + types int `json:"type" form:"type"` // 1为全量同步 2为增量同步 +} + +func GetSyncUserInfo(c *gin.Context) { + var req_data SyncUserReq + if err := c.ShouldBind(&req_data); err == nil { + if req_data.token == "" { + c.JSON(200, gin.H{"code": proto.ParameterError, "message": "error", "data": "token is empty"}) + return + } else { + if worker.IsContainSet("super_permission_tokens", req_data.token) { + if proto.Config.SERVER_USER_TYPE == "master" { + if req_data.types == 1 { + add_users := dao.GetAllUser() + resp := proto.UserSyncResp{} + resp.Add = add_users + c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": resp}) + } else if req_data.types == 2 { + res := service.GetUserSyncData() + c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": res}) + } else { + c.JSON(200, gin.H{"code": proto.ParameterError, "message": "type is error", "data": proto.UserSyncResp{}}) + } + + } else { + c.JSON(200, gin.H{"code": proto.NoPermission, "message": "no permission,server is not master", "data": proto.UserSync{}}) + } + } else { + c.JSON(200, gin.H{"code": proto.NoPermission, "message": "error", "data": "no permission"}) + return + } + } + + } else { + c.JSON(200, gin.H{"error": err.Error(), "code": proto.ParameterError, "message": "error"}) + return + } +} diff --git a/proto/user_req.go b/proto/user_req.go index eea57ec..1aa18e8 100644 --- a/proto/user_req.go +++ b/proto/user_req.go @@ -2,6 +2,7 @@ package proto import ( "time" + "videoplayer/dao" ) type UpdateUserInfoReq struct { @@ -33,6 +34,13 @@ type CronInfo struct { Every int `json:"every" form:"every"` //每隔多少秒执行一次,小于等于0表示不执行,时间粒度为10s } +// 用户数据同步 +type UserSyncResp struct { + Update []dao.User `json:"update" form:"update"` //更新用户 + Add []dao.User `json:"add" form:"add"` //添加用户 + Delete []UserDelID `json:"delete" form:"delete"` //删除用户 +} + // 用户数据同步 type UserSync struct { Update []UserAddOrUpdate `json:"update" form:"update"` //更新用户 diff --git a/service/userService.go b/service/userService.go index eae4339..ba5acbe 100644 --- a/service/userService.go +++ b/service/userService.go @@ -2,6 +2,7 @@ package service import ( "regexp" + "strconv" "videoplayer/dao" "videoplayer/proto" "videoplayer/worker" @@ -90,3 +91,28 @@ func UserSyncDataFromMaster() { } } } + +// 同步数据到主服务器-增删改数据 +func GetUserSyncData() proto.UserSyncResp { + add_user_ids := worker.GetRedisSetMembers("sync_add_user_ids") + update_user_ids := worker.GetRedisSetMembers("sync_update_user_ids") + delete_user_ids := worker.GetRedisSetMembers("sync_delete_user_ids") + add_users := []dao.User{} + update_users := []dao.User{} + delete_users := []proto.UserDelID{} + for _, v := range add_user_ids { + id, _ := strconv.Atoi(v) + user := dao.FindUserByUserID(id) + add_users = append(add_users, user) + } + for _, v := range update_user_ids { + id, _ := strconv.Atoi(v) + user := dao.FindUserByUserID(id) + update_users = append(update_users, user) + } + for _, v := range delete_user_ids { + id, _ := strconv.Atoi(v) + delete_users = append(delete_users, proto.UserDelID{ID: uint(id)}) + } + return proto.UserSyncResp{Add: add_users, Update: update_users, Delete: delete_users} +}