Skip to content

BDD-57 — Prévisualisation avant chargement

1. User Story

En tant qu'administrateur,
Je veux prévisualiser les données d'un fichier avant de créer la source,
Afin de vérifier que le fichier est correct avant chargement en base.

2. Critères d'acceptance

  1. L'admin peut afficher un aperçu des 20 premières lignes du fichier.
  2. Les colonnes détectées sont listées avec leur type inféré (texte, nombre, date, booléen).
  3. L'admin peut valider ou corriger le type de chaque colonne avant chargement.
  4. L'aperçu est disponible avant toute action de chargement.

3. Périmètre fonctionnel

Frontend

  • Wizard de création source : front/src/components/sources/SourceCreationDialog.vue
  • Composant aperçu : front/src/components/sources/SourcePreviewPanel.vue
  • Store Pinia : front/src/stores/source-store.js
  • Tests composants : front/src/__tests__/components/sources/SourceCreationDialog.spec.js
  • Tests composants : front/src/__tests__/components/sources/SourcePreviewPanel.spec.js
  • Tests store : front/src/__tests__/stores/source-store.spec.js

Backend

  • Controller : back/src/api/sources/sources.controller.ts
  • Service principal : back/src/api/sources/sources.service.ts
  • Service parsing/inférence : back/src/api/sources/services/file-parser.service.ts
  • Service schéma/table : back/src/api/sources/services/schema-table.service.ts
  • DTO : back/src/api/sources/dto/source.dto.ts
  • Tests unitaires service : back/src/api/sources/sources.service.spec.ts
  • Tests unitaires parser : back/src/api/sources/services/file-parser.service.spec.ts
  • Tests unitaires schema table : back/src/api/sources/services/schema-table.service.spec.ts
  • Tests E2E controller : back/test/e2e/sources-controller.e2e-spec.ts

Endpoints

MéthodeRouteRôle
GET/sources/previewRetourne les colonnes détectées et un aperçu limité à 20 lignes
POST/sourcesCrée une source avec validation des types de colonnes choisis

4. Points de vérification

  • L'étape d'aperçu dans le wizard s'affiche avant l'action "Créer la source".
  • Lors de la sélection d'un dossier, la liste de fichiers visualise l'ensemble des fichiers de l'entreprise (dossier racine + sous-dossiers), et pas uniquement les fichiers du dossier racine.
  • L'appel GET /sources/preview est protégé par AuthGuard + AdminGuard.
  • La réponse d'aperçu contient headers, rows (max 20), et columns.
  • columns inclut au minimum name, inferredType, selectedType.
  • Le tableau d'aperçu affiche :
    • une ligne de sélection de type (text, number, date, boolean) par colonne,
    • les lignes de données,
    • une ligne finale ... pour signaler qu'il s'agit d'un extrait.
  • Le front envoie columns dans le payload de POST /sources.
  • Le backend applique le type choisi à la création SQL (TEXT, NUMERIC, TIMESTAMP, BOOLEAN).
  • En cas d'incohérence type/données, l'API renvoie un message métier explicite par colonne :
    • Le type <type> ne convient pas avec les données contenues dans la colonne <colonne>.

5. Tests associés

Tests unitaires back

  • back/src/api/sources/sources.service.spec.ts
    • getPreview : limite à 20 lignes, colonnes typées retournées, document introuvable.
    • createSource : transmission des types à loadTable, erreur métier si type invalide.
  • back/src/api/sources/services/file-parser.service.spec.ts
    • inferColumnTypes : inférence text/number/date/boolean.
    • inferDateFormats : détection du format dominant.
    • parseDateWithFormat : parsing date valide/invalide.
  • back/src/api/sources/services/schema-table.service.spec.ts
    • loadTable : mapping des types applicatifs vers types SQL.

Tests E2E back (Supertest)

  • back/test/e2e/sources-controller.e2e-spec.ts
    • GET /sources/preview : 401, 403, 400 UUID invalide, 404 document introuvable.
    • POST /sources : 400 si columns[].selectedType invalide.

Tests unitaires front

  • front/src/__tests__/components/sources/SourcePreviewPanel.spec.js
    • état vide,
    • affichage en-têtes + ligne ...,
    • émission update:type.
  • front/src/__tests__/components/sources/SourceCreationDialog.spec.js
    • open() charge les dossiers selon le rôle (admin / super-admin).
  • front/src/__tests__/stores/source-store.spec.js
    • createSource envoie bien le payload columns.