Capability Storage¶
Le CLI crée dès l'installation tous les fichiers et packages du blueprint complet de cette capability, avec des repères pour les développeurs et les IA. Les fichiers existants sont préservés lors d'une relance.
storage ajoute un port outbound pour stocker des fichiers et des blobs sans
coupler les use cases a un SDK cloud ou au filesystem local.
Pourquoi Un Port Dedie¶
Repository[T] persiste des entites metier: identifiants, statut, proprietaire,
droits, index et metadonnees utiles aux requetes. FileStoragePort persiste un
flux binaire: PDF, image, export, piece jointe ou resultat volumineux.
Les deux responsabilites restent separees:
| Besoin | Primitive |
|---|---|
| rechercher, filtrer, auditer une entite | Repository[T] |
| ecrire, lire ou supprimer un flux binaire | FileStoragePort |
| conserver le nom original, le statut, le tenant, l'auteur | entite metier |
| connaitre taille, checksum, etag, content-type provider | metadata storage |
Cette separation garde le domaine testable et rend le backend de fichiers
interchangeable: filesystem en local, puis S3, Azure Blob ou GCS en production.
Guide¶
| Page | Contenu |
|---|---|
| Quickstart filesystem | config locale, volume Docker et smoke test executable |
| Architecture | flux use case -> port -> adapter et frontiere avec Repository[T] |
| Configuration | YAML, secrets, export config et validation Pydantic |
| Securite | path traversal, noms utilisateurs, content-type, taille et permissions |
| Multitenant | bucket/container/prefix par tenant et implications d'isolation |
| Use case complet | upload, metadata metier, download et delete |
| Filesystem | adapter local et volumes Docker/Kubernetes |
| AWS S3 | config, MinIO, credentials, IAM minimal et smoke |
| Azure Blob | config, secrets, RBAC, Azurite et smoke |
| Google Cloud Storage | config, ADC/secrets, IAM et smoke |
Contrat Commun¶
Le domaine depend uniquement de FileStoragePort:
| Methode | Role |
|---|---|
put(key, content, content_type=None, metadata=None) |
stocke un flux async et retourne StoredObject |
get(key) |
retourne StoredObjectStream avec metadata et flux async |
stat(key) |
lit les metadata sans telecharger le contenu |
exists(key) |
teste l'existence d'un objet |
delete(key) |
supprime l'objet; les adapters cloud restent idempotents sur absent |
Les metadata exposees sont neutres: key, content_type, size, checksum,
etag, last_modified et custom.
Adapters Disponibles¶
| Adapter | Extra | Usage |
|---|---|---|
filesystem |
aucun | dev local, tests, Docker volume |
s3 |
arclith[s3] |
AWS S3 ou endpoint compatible comme MinIO |
azure-blob |
arclith[azure-blob] |
Azure Blob Storage |
gcs |
arclith[gcs] |
Google Cloud Storage |
Limites Hors Scope¶
Le port couvre les operations objet minimales. Les sujets suivants doivent etre traites dans le service consommateur ou dans l'infrastructure:
- antivirus et analyse de contenu;
- quotas par utilisateur ou tenant;
- lifecycle policies, retention legale et archivage froid;
- CDN, cache HTTP et invalidation edge;
- URLs signees et delegation de download direct;
- listing, recherche et indexation des objets;
- multipart/resumable upload expose au client final.
Validation¶
| Bash | |
|---|---|
Pour un premier flux executable, suivre le quickstart filesystem.