完善用户数据同步,待完善同步确认
This commit is contained in:
parent
29e8151420
commit
8796ef784b
17
dao/user.go
17
dao/user.go
|
|
@ -35,7 +35,10 @@ func CreateUser(name, password, email, gender string, age int) uint {
|
|||
}
|
||||
|
||||
func DeleteUserByID(id int) int {
|
||||
DB.Delete(&User{}, id)
|
||||
res := DB.Delete(&User{}, id)
|
||||
if res.Error != nil {
|
||||
return 0
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
|
|
@ -98,8 +101,12 @@ func UpdateUserByID2(id int, req proto.UpdateUserInfoReq) {
|
|||
}
|
||||
|
||||
// 用户修改自己的信息
|
||||
func UpdateUserByID3(id int, req proto.UpdateUserInfoReq) {
|
||||
DB.Model(&User{}).Where("id = ?", id).Updates(User{Name: req.Username, Age: req.Age, Avatar: req.Avatar, Gender: req.Gender})
|
||||
func UpdateUserByID3(id int, req proto.UpdateUserInfoReq) error {
|
||||
res := DB.Model(&User{}).Where("id = ?", id).Updates(User{Name: req.Username, Age: req.Age, Avatar: req.Avatar, Gender: req.Gender})
|
||||
if res.Error != nil {
|
||||
return res.Error
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 用户数据同步-添加
|
||||
|
|
@ -130,8 +137,8 @@ func DeleteUserSync(req proto.UserDelID) uint {
|
|||
}
|
||||
|
||||
// 获取所有用户
|
||||
func GetAllUser() []proto.User {
|
||||
var users []proto.User
|
||||
func GetAllUser() []User {
|
||||
var users []User
|
||||
DB.Find(&users)
|
||||
return users
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ func SetUpUserGroup(router *gin.Engine) {
|
|||
userGroup.POST("/info", GetUserInfo)
|
||||
userGroup.POST("/update", UpdateUserInfo)
|
||||
userGroup.POST("/sync", GetSyncUserInfo)
|
||||
userGroup.POST("/delete", DeleteUser)
|
||||
}
|
||||
|
||||
type RLReq struct {
|
||||
|
|
@ -78,6 +79,23 @@ func GetUserInfo(c *gin.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
func DeleteUser(c *gin.Context) {
|
||||
var req GetUserInfoReq
|
||||
id, _ := c.Get("id")
|
||||
user_id := int(id.(float64))
|
||||
if err := c.ShouldBind(&req); err == nil {
|
||||
res := service.DeleteUserService(req.ID, user_id)
|
||||
if res != 0 {
|
||||
c.JSON(200, gin.H{"code": proto.SuccessCode, "message": "success", "data": res})
|
||||
} else {
|
||||
c.JSON(200, gin.H{"code": proto.OperationFailed, "message": "failed", "data": res})
|
||||
}
|
||||
} else {
|
||||
c.JSON(200, gin.H{"code": proto.ParameterError, "message": err, "data": "2"})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func UpdateUserInfo(c *gin.Context) {
|
||||
var req_data proto.UpdateUserInfoReq
|
||||
id, _ := c.Get("id")
|
||||
|
|
@ -353,31 +371,35 @@ func registerHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
type SyncUserReq struct {
|
||||
token string `json:"token" form:"token"`
|
||||
types int `json:"type" form:"type"` // 1为全量同步 2为增量同步
|
||||
Token string `json:"token" form:"token"`
|
||||
Types int `json:"type" form:"type"` // 1为全量同步 2为增量同步
|
||||
Device string `json:"device" form:"device"`
|
||||
}
|
||||
|
||||
func GetSyncUserInfo(c *gin.Context) {
|
||||
var req_data SyncUserReq
|
||||
if err := c.ShouldBind(&req_data); err == nil {
|
||||
if req_data.token == "" {
|
||||
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 worker.IsContainSet("super_permission_tokens", req_data.Token) {
|
||||
if proto.Config.SERVER_USER_TYPE == "master" {
|
||||
if req_data.types == 1 {
|
||||
if req_data.Types == 1 { //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()
|
||||
} else if req_data.Types == 2 { //2为增量同步
|
||||
if req_data.Device == "" || worker.IsContainSet("sync_devices_ids", req_data.Device) == false {
|
||||
c.JSON(200, gin.H{"code": proto.ParameterError, "message": "error", "data": "device is empty or not exist"})
|
||||
return
|
||||
}
|
||||
res := service.GetUserSyncData(req_data.Device)
|
||||
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{}})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"videoplayer/dao"
|
||||
|
|
@ -9,7 +10,15 @@ import (
|
|||
)
|
||||
|
||||
func CreateUser(name, password, email, gender string, age int) uint {
|
||||
return dao.CreateUser(name, password, email, gender, age)
|
||||
id := dao.CreateUser(name, password, email, gender, age)
|
||||
if id != 0 {
|
||||
//添加用户信息到同步列表
|
||||
err := setSyncUserDataSet("add", int(id))
|
||||
if err != nil {
|
||||
return id
|
||||
}
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
func GetUser(name, email, password string) dao.User {
|
||||
|
|
@ -48,8 +57,15 @@ func UpdateUser(user_id int, req proto.UpdateUserInfoReq) (int, error) {
|
|||
cur_user := dao.FindUserByID2(user_id)
|
||||
//fmt.Println("cur_user:", cur_user, "req:", req)
|
||||
if user_id == req.ID && cur_user.Role != "admin" {
|
||||
dao.UpdateUserByID3(user_id, req) //用户修改自己的信息,不能修改权限信息
|
||||
err := dao.UpdateUserByID3(user_id, req) //用户修改自己的信息,不能修改权限信息
|
||||
//添加修改用户信息到同步列表
|
||||
if err == nil {
|
||||
err2 := setSyncUserDataSet("update", user_id)
|
||||
if err2 != nil {
|
||||
return user_id, nil
|
||||
}
|
||||
}
|
||||
return user_id, err
|
||||
} else if cur_user.Role == "admin" {
|
||||
dao.UpdateUserByID2(req.ID, req)
|
||||
return req.ID, nil
|
||||
|
|
@ -58,6 +74,25 @@ func UpdateUser(user_id int, req proto.UpdateUserInfoReq) (int, error) {
|
|||
}
|
||||
}
|
||||
|
||||
func DeleteUserService(id, user_id int) int {
|
||||
res := 0
|
||||
if user_id == id {
|
||||
res = dao.DeleteUserByID(id)
|
||||
} else {
|
||||
user := dao.FindUserByID2(user_id)
|
||||
if user.Role == "admin" {
|
||||
res = dao.DeleteUserByID(id)
|
||||
}
|
||||
}
|
||||
if res != 0 {
|
||||
//添加删除用户信息到同步列表
|
||||
err := setSyncUserDataSet("delete", id)
|
||||
if err != nil {
|
||||
return res
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
func UserSyncDataFromMaster() {
|
||||
//从接口获取数据
|
||||
url := "http://" + proto.Config.MASTER_SERVER_DOMAIN + "/user/sync"
|
||||
|
|
@ -71,7 +106,7 @@ func UserSyncDataFromMaster() {
|
|||
|
||||
//添加用户
|
||||
for _, v := range add_users {
|
||||
res := dao.AddUserSync()
|
||||
res := dao.AddUserSync(v)
|
||||
if res == 0 {
|
||||
fail_ids = append(fail_ids, v.ID)
|
||||
}
|
||||
|
|
@ -93,10 +128,11 @@ 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")
|
||||
func GetUserSyncData(device string) proto.UserSyncResp {
|
||||
key := device + "_sync_user_ids"
|
||||
add_user_ids := worker.GetRedisSetMembers(key + "_add")
|
||||
update_user_ids := worker.GetRedisSetMembers(key + "_update")
|
||||
delete_user_ids := worker.GetRedisSetMembers(key + "_delete")
|
||||
add_users := []dao.User{}
|
||||
update_users := []dao.User{}
|
||||
delete_users := []proto.UserDelID{}
|
||||
|
|
@ -116,3 +152,24 @@ func GetUserSyncData() proto.UserSyncResp {
|
|||
}
|
||||
return proto.UserSyncResp{Add: add_users, Update: update_users, Delete: delete_users}
|
||||
}
|
||||
|
||||
func setSyncUserDataSet(t string, id int) error {
|
||||
devices := worker.GetRedisSetMembers("sync_devices_ids") //主服务器查看从服务器的设备列表
|
||||
var err error
|
||||
for _, device := range devices {
|
||||
key := device + "_sync_user_ids"
|
||||
if t == "add" {
|
||||
key_ := key + "_add"
|
||||
worker.SetRedisSetAdd(key_, strconv.Itoa(id))
|
||||
} else if t == "update" {
|
||||
key_ := key + "_update"
|
||||
worker.SetRedisSetAdd(key_, strconv.Itoa(id))
|
||||
} else if t == "delete" {
|
||||
key_ := key + "_delete"
|
||||
worker.SetRedisSetAdd(key_, strconv.Itoa(id))
|
||||
} else {
|
||||
err = errors.New("error")
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue