Blog
Feature
15 octobre 20256 min

Favoris, assignation et pièces jointes — les détails qui changent tout

Il y a les grandes features et il y a les "petits" ajouts qui rendent le produit vraiment utilisable.

Les favoris

Mettre une tâche en favori, c'est un toggle. Un booléen. Ça devrait prendre 30 minutes. En pratique : colonne, RLS, filtre feed, animation étoile, synchronisation Realtime. Le bounce de l'étoile m'a pris plus de temps que la logique métier.

L'assignation de tâches

Le modèle est une table de liaison collaborative.task_assignments. Le vrai défi c'est le FilterBar avec trois modes (Tout / Créées par moi / Assignées à moi) combiné avec le filtre hiérarchique de groupes.

Les pièces jointes — le choix architectural

Deux approches possibles : JSONB (simple, rapide) ou tables relationnelles (plus de travail, plus évolutif). J'ai choisi les tables relationnelles (privat.task_attachments, privat.memo_attachments) pour les performances de requêtage, la suppression en cascade propre et les RLS individuelles.

Le piège des URLs signées

Supabase Storage génère des URLs signées qui expirent après une heure. Ma solution : un StorageService.refreshAttachmentUrlsBatch() qui régénère les URLs en batch via le storage_path. C'est le genre de détail invisible — quand ça marche, personne ne le remarque. Quand ça casse, tout le monde le voit.