Files
workspace/code/allapp/allapp-go/utils/redisx/helper.go
T
2026-03-03 17:28:56 +08:00

80 lines
1.5 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 int16) 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
}
// SpaceDelete 删除空间
func SpaceDelete(spaceID int64) error {
key := spaceMemberKey(spaceID)
return Client.Del(
context.Background(),
key,
).Err()
}