Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014akYEuf44fM6EiUvrmoBzS
2.5 KiB
2.5 KiB
Architecture
Vue d'ensemble
Le système repose sur un flux simple, sans compte invité, avec Supabase comme unique backend (base de données + stockage de fichiers).
- Un événement est créé dans la table
eventsavec unslugunique (utilisé dans l'URL publique) et unadmin_token(utilisé pour l'accès admin). - Un QR code pointe vers l'URL publique d'upload de l'événement
(
/e/<slug>). - Un invité scanne le QR code, arrive sur la page d'upload, compresse ses
photos côté client, puis les envoie vers Supabase Storage. Une ligne est
créée dans la table
photospour chaque fichier. - L'organisateur (admin) accède à la galerie via une URL contenant son
admin_token(/admin/<slug>?token=...), consulte les photos, et peut déclencher un export ZIP de l'ensemble des photos de l'événement. - À J+7 après la date de l'événement (pas la date de création), les
photos et les métadonnées associées sont automatiquement supprimées,
que le ZIP ait été téléchargé ou non (voir
rgpd.mdetdecisions.md).
Schéma de flux
flowchart TD
A[Invité scanne le QR code] --> B[Page d'upload publique /e/slug]
B --> C[Compression image côté client]
C --> D[(Supabase Storage\nbucket photos)]
C --> E[(Table photos\nSupabase DB)]
D --> F[Galerie admin /admin/slug?token=...]
E --> F
F --> G[Export ZIP de toutes les photos]
H[Date événement + 7 jours] --> I[Suppression automatique\nphotos + storage]
E -.expire_at atteint.-> I
D -.expire_at atteint.-> I
Composants
| Composant | Rôle | Techno |
|---|---|---|
| Page upload (publique) | Formulaire de dépôt photo, sans auth | HTML/CSS/JS léger |
| Compression image | Réduction de poids avant envoi | Canvas API / lib légère côté client |
| Supabase Storage | Stockage des fichiers photo | Supabase Storage (bucket photos) |
| Supabase DB | Métadonnées événements et photos | Supabase Postgres |
| Page galerie admin | Consultation + export ZIP | HTML/CSS/JS léger |
| Job d'expiration | Suppression auto à J+7 | Fonction planifiée (Supabase Edge Function / cron), à définir |
Points à trancher avec Kévin avant implémentation
- Mécanisme exact du job d'expiration (cron Supabase, Edge Function planifiée, ou script sur le VPS existant).
- Génération et hébergement du QR code (généré à la volée ou stocké).
- Bibliothèque de compression image côté client (ou implémentation maison via Canvas API pour rester sobre en dépendances).