Fichiers joints aux specs et raffinages (stockage local/S3) #8
Labels
No labels
breaking
bug
ci
dependencies
documentation
feature
security
skip-changelog
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
thierryade/backend#8
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Associer des fichiers joints aux versions de specs et aux raffinages.
Stockage (configuration par variables d'env)
ATTACHMENTS_STORAGE=local|s3(défautlocal,MEDIA_ROOTexplicite).s3:S3_ENDPOINT_URL,S3_BUCKET_NAME,S3_ACCESS_KEY_ID(_FILE),S3_SECRET_ACCESS_KEY(_FILE), adressage path-style,default_acl=None(django-storages[s3]).https://s3.stationmyr.net, bucketthierryade-attachments).STATICFILES_STORAGE(supprimé depuis Django 5.1) vers un dictSTORAGEScomplet.Modèle
StoredFile:project,sha256(unique par projet),file,size,content_type,uploaded_by/at. Stocké une seule fois, immuable.Attachment: lienspec_versionXORrefinement→StoredFile(PROTECT),name,added_by/at. Uniques :(cible, stored_file)et(cible, name).CanWriteProject.Spec.reopen()recopie les liens (pas les fichiers) vers le nouveau brouillon.StoredFilesans aucun lien est supprimé physiquement (on_commit).Statut calculé (rien de stocké)
Comparaison avec la version N-1 de la même spec, par nom :
StoredFileen N-1 → hérité (renommé).Usages calculés
exists_in_specs,exists_in_refinements: specs/raffinages utilisant le fichier.exists_in_versions(spec): versions d'une spec utilisant le fichier.API
GET/POST/DELETE /api/attachments/(filtrespec_version/refinement),POST .../{id}/replace/, restauration d'un supprimé.GET /api/files/?project=&sha256=(détection de doublon avant envoi),GET /api/files/{id}/usages/,GET /api/files/{id}/versions/?spec=,GET /api/files/{id}/download/.deduplicated: true).Content-Disposition: attachment,nosniff, contournement HeadObject de Garage, taille maxATTACHMENTS_MAX_SIZE_MB(20).Déploiement
thierryade-attachments, cléthierryade, secretsthierryadeS3AccessKey/thierryadeS3SecretKey,deploy/docker-compose.yml+deploy/README.md.