En lugar de servidor local de archivos (multer, express.static), usar Supabase Storage.
- Sin reinventar la rueda: Storage incluido en Supabase
- CDN, escalable, backups
- URLs públicas o firmadas
- RLS por bucket/carpeta
Bucket privado para fotos de perfil. Política RLS: solo usuarios autenticados.
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/profile/avatar/upload-url | Devuelve { path, token } para subir foto |
| GET | /api/profile/avatar-url | Devuelve signed URL para mostrar foto actual |
- Cliente llama
POST /api/profile/avatar/upload-urlcon{ contentType?, extension? } - Backend devuelve
{ path, token }(path:{userId}/avatar.{ext}) - Cliente sube:
supabase.storage.from('profile-pictures').uploadToSignedUrl(path, token, file) - Cliente actualiza perfil:
PUT /api/profilecon{ avatar: path }
- Cliente llama
GET /api/profile/avatar-urlpara obtener URL firmada (1h de validez) - Si no hay avatar, responde
{ url: null }
No se requiere multer ni carpeta /uploads en el backend.