Files
workspace/code/allapp/allapp-go/utils/redisx/helper.go
T
2026-02-26 17:31:08 +08:00

96 lines
1.8 KiB
Go

package redisx
import (
"context"
"errors"
"fmt"
"strconv"
"github.com/redis/go-redis/v9"
)
// 统一 key 生成函数
func spaceMemberKey(spaceID int64) string {
return fmt.Sprintf("space:member:%d", spaceID)
}
// SpaceAddOrUpdateMember 添加 / 更新成员角色
func SpaceAddOrUpdateMember(spaceID int64, userID int64, role int) error {
key := spaceMemberKey(spaceID)
return Client.HSet(
context.Background(),
key,
strconv.FormatInt(userID, 10),
role,
).Err()
}
// SpaceRemoveMember 删除成员
func SpaceRemoveMember(spaceID int64, userID int64) error {
key := spaceMemberKey(spaceID)
return Client.HDel(
context.Background(),
key,
strconv.FormatInt(userID, 10),
).Err()
}
// SpaceGetUserRole 获取成员角色
func SpaceGetUserRole(spaceID int64, userID int64) (int, bool, error) {
key := spaceMemberKey(spaceID)
val, err := Client.HGet(
context.Background(),
key,
strconv.FormatInt(userID, 10),
).Result()
if errors.Is(err, redis.Nil) {
return 0, false, nil
}
if err != nil {
return 0, false, err
}
role, err := strconv.Atoi(val)
if err != nil {
return 0, false, err
}
return role, true, nil
}
// SpaceIsMember 判断是否在空间
func SpaceIsMember(spaceID int64, userID int64) (bool, error) {
_, ok, err := SpaceGetUserRole(spaceID, userID)
return ok, err
}
// SpaceInitMembers 初始化用户成员
func SpaceInitMembers(spaceID int64, members map[int64]int) error {
key := spaceMemberKey(spaceID)
data := make(map[string]interface{})
for userID, role := range members {
data[strconv.FormatInt(userID, 10)] = role
}
return Client.HSet(
context.Background(),
key,
data,
).Err()
}
// SpaceDelete 删除空间
func SpaceDelete(spaceID int64) error {
key := spaceMemberKey(spaceID)
return Client.Del(
context.Background(),
key,
).Err()
}