功能
关注你的对手:好友与好友排行榜
关注你乐于击败的玩家,在专属的排行榜标签页里看到他们的排名,并在带昵称搜索的全新好友页面里管理所有人。

通俗版
opolyx 和你认识的人一起玩更有意思。现在你可以关注任何玩家——在其个人资料上点关注,或在全新的好友页面按昵称找到他——他就会出现在一个只包含你和你所关注之人的排行榜标签页里。
关注是单向的,就像大多数社交应用那样:不需要对方回关,也没有什么要接受。反正排行榜本就是一个公开排名,所以关注某人并不会泄露任何他没有事先公开的信息。
- 在任意个人资料页面用一个按钮即可关注 / 取消关注。
- 全新的好友页面带有「关注」和「粉丝」标签页,以及用于查找玩家的昵称搜索。
- 排行榜上的好友标签页会按 XP 为你和你关注的所有人排名。
- 粉丝数和关注数现在会以徽标形式显示在每个个人资料上。
访客和机器人被排除在搜索和排行榜之外,所以好友榜里永远只有你亲自选择关注的真实玩家。
技术细节
迁移 0033 新增了一个 follows 表——一条有向边 (follower, followee),带有主键去重守卫、禁止自关注的检查以及级联删除。读取使用按本行 RLS(每一方都能读取自己的边);写入则通过两个基于 auth.uid()、仿照 create_game 的 security-definer RPC。
sql
-- follow_user / unfollow_user: idempotent, auth.uid()-scoped, security definer
-- 0031 grant lesson applied: default privileges grant EXECUTE to anon —
-- revoke from public, anon FIRST, then grant execute to authenticated only.统计任意用户的粉丝会被那套按本行 RLS 挡住,因此迁移 0034 新增了 get_follow_counts(p_user)——一个返回粉丝/关注数的 security-definer 函数。由于这些计数并不敏感,而个人资料是公开可读的(匿名访客也能看到个人资料),所以它被授予 anon + authenticated——恰好与 0033 的写入 RPC 相反。
好友排行榜的查询就是把观看者的 id 与其关注的所有人取并集,再按全局 XP 排名。两个迁移都通过 Supabase 管理 API 应用到了生产环境并经过验证(授权:写入 authenticated 是 / anon 否,计数 anon 是),然后才发布网页端改动。
