Ajoute la V1 fonctionnelle : upload invité, galerie admin, QR code, backend Supabase
Schéma dédié `photobooth` (jamais exposé via PostgREST, accès exclusivement via fonctions SECURITY DEFINER dans public) avec RLS, policies Storage sur bucket privé event-photos, Edge Functions admin-gallery et expire-events, et job pg_cron d'expiration J+7. Le tout déployé et testé en conditions réelles sur le projet Supabase kevin-lecou-hub avant relecture sécurité (faille d'abus sur insert_public_photo corrigée en cours de route). Côté front : page upload invité (compression + HEIC + RGPD), galerie admin avec export ZIP, générateur de QR code autonome. Workflow n8n de purge Storage J+7 fourni (à activer manuellement côté n8n).
This commit is contained in:
@@ -17,3 +17,45 @@ par Kévin.
|
||||
compris si l'organisateur a déjà téléchargé le ZIP d'export des photos.
|
||||
- **Hébergement** : utilisation du **VPS existant de Kévin**
|
||||
(148.230.114.175), pas de nouvel hébergement dédié pour l'instant.
|
||||
|
||||
## 2026-09-16
|
||||
|
||||
- **Compression image côté client** : utilisation de la lib
|
||||
**`browser-image-compression`**, plutôt qu'une implémentation maison via
|
||||
Canvas API. Doit gérer l'orientation EXIF et les formats HEIC (iPhone).
|
||||
|
||||
## 2026-09-15 (bis)
|
||||
|
||||
- **Préfixage des tables** : le projet Supabase de photobooth-qr sera
|
||||
mutualisé avec les autres projets de Kévin (KOMI, KAZA...). Tables
|
||||
préfixées `pq_` (`pq_events`, `pq_photos`), conformément à la convention
|
||||
du CLAUDE.md global. Les fonctions Postgres exposées au front
|
||||
(`get_public_event`, `event_accepts_uploads`) restent sans préfixe : ce
|
||||
sont des points de contrat public, pas des tables internes.
|
||||
- **Bucket Supabase Storage `event-photos`** : bucket **privé** (pas de
|
||||
lecture publique). Convention de chemin : `{event_id}/{uuid}.{ext}`.
|
||||
Consultation admin exclusivement via URLs signées générées par l'Edge
|
||||
Function `service_role`. Aucune policy SELECT/UPDATE/DELETE publique sur
|
||||
`storage.objects`. Limité à `file_size_limit = 6 Mo` et
|
||||
`allowed_mime_types = image/jpeg` (aligné sur la sortie de compression
|
||||
du front, qui force tout en JPEG y compris les HEIC convertis).
|
||||
- **`pq_photos.url_storage`** : contrainte `CHECK` garantissant que le
|
||||
chemin commence par `event_id/`, pour empêcher qu'une ligne de l'event A
|
||||
pointe vers un fichier de l'event B (isolation multi-tenant), trouvé lors
|
||||
de la relecture sécurité du 2026-09-15.
|
||||
- **`get_public_event`** : renvoie l'événement même si son statut n'est pas
|
||||
`actif` (expiré/archivé), pour permettre au front d'afficher un message
|
||||
adapté. Risque jugé faible : les slugs sont partagés via QR code, donc
|
||||
non secrets par nature.
|
||||
|
||||
## 2026-09-16 (bis)
|
||||
|
||||
- **Déclenchement de la purge Storage à J+7** : **option n8n retenue**
|
||||
(plutôt que `pg_cron`+`pg_net`). Un workflow n8n planifié quotidien
|
||||
appelle l'Edge Function `expire-events` avec la `service_role` key
|
||||
(Credentials Store n8n), avec notification Telegram en cas d'échec.
|
||||
Cohérent avec la stack n8n déjà utilisée pour KOMI/KAZA, et le VPS n8n
|
||||
existant sert de point d'orchestration commun. Conception du workflow :
|
||||
`n8n/workflows/purge-storage-j7.json` (JSON importable, **non testé sur
|
||||
l'instance n8n réelle**, credentials à relier manuellement avant
|
||||
activation).
|
||||
|
||||
Reference in New Issue
Block a user