Thème
Stockage de fichiers
Présentation
Le stockage de fichiers est géré par Supabase Storage qui utilise MinIO comme moteur de stockage objet. Les fichiers sont organisés en buckets et accessibles via des URLs signées.
Buckets disponibles
| Bucket | Contenu |
|---|---|
| documents-chantier | Justificatifs de dépenses, documents de commandes, pièces jointes |
| photos-chantier | Photos des phases de chantier, photos du journal |
Organisation des fichiers
Les fichiers sont organisés selon la structure suivante :
documents-chantier/
{user_id}/
{chantier_id}/
depenses/
{depense_id}.pdf
commandes/
{bon_id}/
facture.pdf
phases/
{phase_id}/
photo.jpg
Accès aux fichiers
Les fichiers ne sont pas publics. L'accès se fait via des URLs signées avec une durée d'expiration.
// Générer une URL signée valide 5 minutes
const { data } = await db.storage
.from('documents-chantier')
.createSignedUrl(path, 300)
if (data?.signedUrl) window.open(data.signedUrl, '_blank')
Upload d'un fichier
// Upload d'un fichier
const { error } = await db.storage
.from('documents-chantier')
.upload(path, file)
Le chemin doit être unique. En cas de conflit, utiliser l'option upsert :
await db.storage
.from('documents-chantier')
.upload(path, file, { upsert: true })
Suppression d'un fichier
await db.storage
.from('documents-chantier')
.remove([path])
Limites
| Paramètre | Valeur |
|---|---|
| Taille maximale par fichier | 50 Mo |
| Types acceptés | PDF, JPG, PNG, WEBP, DOCX, XLSX |
| Durée maximale des URLs signées | 1 heure |
Table pieces_jointes
Chaque fichier uploadé est référencé dans la table pieces_jointes avec les informations suivantes :
| Colonne | Description |
|---|---|
| id | Identifiant unique |
| chantier_id | Chantier concerné |
| depense_id | Dépense associée si justificatif |
| bon_commande_id | Bon de commande associé |
| nom_fichier | Nom original du fichier |
| storage_path | Chemin dans le bucket |
| type_fichier | justificatif_depense, document_commande, photo_phase |
| uploaded_par | Email de l'utilisateur ayant uploadé |
| created_at | Date d'upload |
Maintenance
Les fichiers orphelins (non référencés dans pieces_jointes) peuvent être nettoyés périodiquement depuis la console Supabase :
https://supabase.waali.at
Storage > documents-chantier > Parcourir
