Appearance
BDD-16 — Telechargement d'un fichier depose
📥 Ticket fonctionnel
Retrouver un fichier deja transmis
Depuis la liste de ses fichiers deposes, le client externe peut generer un lien temporaire et telecharger le fichier dans son format d'origine.
1. User Story
En tant que client externe,
Je veux telecharger un fichier que j'ai precedemment depose,
Afin de retrouver mon fichier si besoin.
2. Criteres d'acceptance
- Un bouton
Telechargerest disponible sur chaque fichier de la liste. - Le fichier est telecharge dans son format d'origine.
3. Flux fonctionnel
mermaid
sequenceDiagram
autonumber
participant U as 👤 Client externe
participant F as 🖥️ Front
participant API as 🧠 API NestJS
participant DB as 🗄️ prisma.tool
participant S3 as ☁️ Object Storage
U->>F: Clique "Telecharger"
F->>API: GET /documents/:uuid/download
API->>API: AuthGuard
API->>DB: Verifie users_documents.user_id
DB-->>API: bucket / path / name
API->>S3: Genere une URL pre-signee attachment
S3-->>API: URL temporaire
API-->>F: url + filename
F-->>U: Lance le telechargement4. Perimetre fonctionnel
- Bouton front :
front/src/components/documents/DocumentListItem.vue - Handler front :
front/src/pages/upload/UploadPage.vue - Store Pinia :
front/src/stores/files-store.js - Endpoint back :
GET /documents/:uuid/download - Controller back :
back/src/api/documents/document.controller.ts - Service back :
back/src/api/documents/document.service.ts - Helper S3 :
back/src/domains/s3Helper/getFileUrl.ts
5. Contrat API
Requete
http
GET /documents/:uuid/download
X-App-Access-Token: <app_access_token>Reponse
json
{
"url": "https://signed-url-temporaire",
"filename": "rapport-client.csv"
}Securite
Le backend verifie que le document appartient a l'utilisateur connecte via users_documents. Le document est identifie par son uuid public, pas par son ID numerique interne. Si le document n'existe pas ou n'appartient pas au user, l'API repond comme si la ressource etait introuvable.
6. Points de verification
- Le bouton
Telechargerest visible sur chaque ligne deMes fichiers deposes. - Le clic appelle
GET /documents/:uuid/download. - Le backend ne genere une URL que si le document appartient au user connecte.
- L'URL pre-signee utilise un
Content-Disposition: attachment. - Le nom de fichier conserve le nom original stocke en base.
- Une erreur utilisateur generique est affichee si la signature ou le telechargement echoue.
7. Tests associes
- Tests unitaires front :
front/src/__tests__/components/documents/DocumentListItem.spec.jsfront/src/__tests__/pages/upload/UploadPage.spec.jsfront/src/__tests__/stores/files-store.spec.js
- Tests unitaires back :
back/src/api/documents/document.service.spec.tsback/src/domains/s3Helper/getFileUrl.spec.ts
- Test E2E recommande :
- depuis
/upload, cliquer surTelechargeret verifier l'evenementdownloadPlaywright.
- depuis
