Skip to content

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

  1. Un bouton Telecharger est disponible sur chaque fichier de la liste.
  2. 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 telechargement

4. 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 Telecharger est visible sur chaque ligne de Mes 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.js
    • front/src/__tests__/pages/upload/UploadPage.spec.js
    • front/src/__tests__/stores/files-store.spec.js
  • Tests unitaires back :
    • back/src/api/documents/document.service.spec.ts
    • back/src/domains/s3Helper/getFileUrl.spec.ts
  • Test E2E recommande :
    • depuis /upload, cliquer sur Telecharger et verifier l'evenement download Playwright.