Suivez vos rivaux : les amis et un classement des amis
Suivez les joueurs que vous aimez battre, voyez-les classés dans leur propre onglet de classement, et gérez tout le monde depuis une nouvelle page Amis avec recherche par pseudo.

En clair
opolyx est plus amusant avec des gens que vous reconnaissez. Vous pouvez désormais suivre n’importe quel joueur — touchez Suivre sur son profil, ou trouvez-le par pseudo sur la nouvelle page Amis — et il apparaît dans un onglet de classement qui ne réunit que vous et les personnes que vous suivez.
Le suivi est à sens unique, comme sur la plupart des applis sociales : nul besoin qu’il vous suive en retour, et il n’y a rien à accepter. Un classement est de toute façon un palmarès public, donc suivre quelqu’un ne révèle rien qu’il n’ait déjà rendu visible.
- Suivre / ne plus suivre depuis n’importe quelle page de profil d’un seul bouton.
- Une nouvelle page Amis avec les onglets Abonnements et Abonnés et une recherche par pseudo pour trouver des joueurs.
- Un onglet Amis dans le classement vous classe, vous et tous ceux que vous suivez, par XP.
- Le nombre d’abonnés et d’abonnements s’affiche désormais en pastilles sur chaque profil.
Pour les curieux techniques
La migration 0033 ajoute une table follows — une arête dirigée (follower, followee) avec une garde anti-doublon sur la clé primaire, une vérification anti-auto-suivi et une suppression en cascade. Les lectures utilisent un RLS par ligne propre (chaque côté peut lire ses propres arêtes) ; les écritures passent par deux RPC security-definer basés sur auth.uid() et calqués sur create_game.
-- 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.Compter les abonnés d’un utilisateur quelconque est bloqué par ce RLS par ligne propre, donc la migration 0034 ajoute get_follow_counts(p_user) — une fonction security-definer renvoyant abonnés/abonnements. Comme les décomptes ne sont pas sensibles et que les profils sont en lecture publique (un profil s’affiche pour les visiteurs anonymes), elle est accordée à anon + authenticated — l’inverse des RPC d’écriture de 0033.
La requête du classement des Amis est simplement l’id du spectateur uni à tous ceux qu’il suit, classés par XP global. Les deux migrations ont été appliquées en production via l’API de gestion Supabase et vérifiées (droits : authenticated oui / anon non pour les écritures, anon oui pour les décomptes) avant la livraison du changement web.
