關注你的對手:好友與好友排行榜
關注你樂於擊敗的玩家,在專屬的排行榜標籤頁裡看到他們的排名,並在帶暱稱搜尋的全新好友頁面裡管理所有人。

通俗版
opolyx 和你認識的人一起玩更有意思。現在你可以關注任何玩家——在其個人資料上點關注,或在全新的好友頁面按暱稱找到他——他就會出現在一個只包含你和你所關注之人的排行榜標籤頁裡。
關注是單向的,就像大多數社交 App 那樣:不需要對方回關,也沒有什麼要接受。反正排行榜本就是一個公開排名,所以關注某人並不會洩露任何他沒有事先公開的資訊。
- 在任意個人資料頁面用一個按鈕即可關注 / 取消關注。
- 全新的好友頁面帶有「關注」和「粉絲」標籤頁,以及用於查詢玩家的暱稱搜尋。
- 排行榜上的好友標籤頁會按 XP 為你和你關注的所有人排名。
- 粉絲數和關注數現在會以徽標形式顯示在每個個人資料上。
技術細節
遷移 0033 新增了一個 follows 表——一條有向邊 (follower, followee),帶有主鍵去重守衛、禁止自關注的檢查以及級聯刪除。讀取使用按本行 RLS(每一方都能讀取自己的邊);寫入則透過兩個基於 auth.uid()、仿照 create_game 的 security-definer RPC。
-- 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 是),然後才釋出網頁端改動。
