80 lines
1.5 KiB
Go
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()
|
|
}
|