Initialisation du projet photobooth-qr
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014akYEuf44fM6EiUvrmoBzS
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# 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).
|
||||
|
||||
1. Un événement est créé dans la table `events` avec un `slug` unique (utilisé
|
||||
dans l'URL publique) et un `admin_token` (utilisé pour l'accès admin).
|
||||
2. Un QR code pointe vers l'URL publique d'upload de l'événement
|
||||
(`/e/<slug>`).
|
||||
3. 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 `photos` pour chaque fichier.
|
||||
4. 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.
|
||||
5. À 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.md` et `decisions.md`).
|
||||
|
||||
## Schéma de flux
|
||||
|
||||
```mermaid
|
||||
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).
|
||||
Reference in New Issue
Block a user