Appearance
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
- L'admin peut afficher un aperçu des 20 premières lignes du fichier.
- Les colonnes détectées sont listées avec leur type inféré (texte, nombre, date, booléen).
- L'admin peut valider ou corriger le type de chaque colonne avant chargement.
- 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éthode | Route | Rôle |
|---|---|---|
GET | /sources/preview | Retourne les colonnes détectées et un aperçu limité à 20 lignes |
POST | /sources | Cré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/previewest protégé parAuthGuard+AdminGuard. - La réponse d'aperçu contient
headers,rows(max 20), etcolumns. columnsinclut au minimumname,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.
- une ligne de sélection de type (
- Le front envoie
columnsdans le payload dePOST /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.tsgetPreview: 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.tsinferColumnTypes: 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.tsloadTable: mapping des types applicatifs vers types SQL.
Tests E2E back (Supertest)
back/test/e2e/sources-controller.e2e-spec.tsGET /sources/preview: 401, 403, 400 UUID invalide, 404 document introuvable.POST /sources: 400 sicolumns[].selectedTypeinvalide.
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.jsopen()charge les dossiers selon le rôle (admin / super-admin).
front/src/__tests__/stores/source-store.spec.jscreateSourceenvoie bien le payloadcolumns.
