videoplayer/service/userService.go

176 lines
4.4 KiB
Go
Raw Normal View History

package service
import (
"errors"
"regexp"
2024-12-11 17:43:44 +08:00
"strconv"
"videoplayer/dao"
"videoplayer/proto"
"videoplayer/worker"
)
2024-07-01 19:32:58 +08:00
func CreateUser(name, password, email, gender string, age int) uint {
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 {
emailRegex := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
re := regexp.MustCompile(emailRegex)
var user dao.User
if re.MatchString(name) {
user = dao.FindUserByEmail(name)
} else {
user = dao.FindUserByName(name)
}
if user.ID != 0 && user.Password == password {
return user
}
return dao.User{}
}
func ContainsUser(name, email string) bool {
user := dao.FindUserByName(name)
user2 := dao.FindUserByEmail(email)
if user.ID != 0 || user2.ID != 0 {
return true
}
return false
}
2024-06-28 10:38:55 +08:00
func GetUserByID(id int) []proto.User {
return dao.FindUserByID(id)
}
2024-06-28 10:38:55 +08:00
func GetUserByNameLike(name string) []proto.User {
return dao.FindUserByNameLike(name)
}
2024-10-06 16:35:54 +08:00
func UpdateUser(user_id int, req proto.UpdateUserInfoReq) (int, error) {
cur_user := dao.FindUserByID2(user_id)
//fmt.Println("cur_user:", cur_user, "req:", req)
2024-12-04 14:48:25 +08:00
if user_id == req.ID && cur_user.Role != "admin" {
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
2024-10-06 16:35:54 +08:00
} else if cur_user.Role == "admin" {
2024-10-06 16:41:29 +08:00
dao.UpdateUserByID2(req.ID, req)
2024-10-06 16:35:54 +08:00
return req.ID, nil
} else {
return 0, nil
}
}
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"
tokens := worker.GetRedisSetMembers("super_permission_tokens")
user_sync_data := worker.SyncDataFromMasterReq(url, tokens[0])
add_users := user_sync_data.Add
update_users := user_sync_data.Update
delete_users := user_sync_data.Delete
//未成功操作的id
var fail_ids []uint
//添加用户
for _, v := range add_users {
res := dao.AddUserSync(v)
if res == 0 {
fail_ids = append(fail_ids, v.ID)
}
}
//更新用户
for _, v := range update_users {
res := dao.UpdateUserSync(v)
if res == 0 {
fail_ids = append(fail_ids, v.ID)
}
}
//删除用户
for _, v := range delete_users {
res := dao.DeleteUserSync(v)
if res == 0 {
fail_ids = append(fail_ids, v.ID)
}
}
}
2024-12-11 17:43:44 +08:00
// 同步数据到主服务器-增删改数据
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")
2024-12-11 17:43:44 +08:00
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}
}
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
}