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() }