Aller au contenu principal

Système d'Export Centralisé

Vue d'ensemble

Le système d'export a été complètement refactorisé pour centraliser tous les exports de l'application et supporter plusieurs formats (PDF, Word/DOCX, CSV, Excel) pour tous les types de données.

Formats Supportés

PDF

  • Utilisation : Impression et partage
  • Content-Type : application/pdf
  • Extension : .pdf
  • Disponible pour : Tous les exports

Word (DOCX)

  • Utilisation : Édition et modification
  • Content-Type : application/vnd.openxmlformats-officedocument.wordprocessingml.document
  • Extension : .docx
  • Disponible pour : Tous les exports

CSV

  • Utilisation : Tableurs et analyse de données
  • Content-Type : text/csv
  • Extension : .csv
  • Disponible pour : Tous les exports (sauf "all" entity)

Excel (XLSX)

  • Utilisation : Analyse de données avancée
  • Content-Type : application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • Extension : .xlsx
  • Disponible pour : Tous les exports

JSON

  • Utilisation : Sauvegarde et accès programmatique
  • Content-Type : application/json
  • Extension : .json
  • Disponible pour : Tous les exports

Architecture

Backend

Service Centralisé : ExportService

  • Fichier : backend/src/export/export.service.ts
  • Responsabilités :
    • Export de sessions, contacts, quotes, invoices
    • Génération de tous les formats (CSV, DOCX, Excel, JSON, PDF)
    • Gestion centralisée de la logique d'export

Contrôleur : ExportController

  • Fichier : backend/src/export/export.controller.ts
  • Endpoint : GET /api/export?entity={entity}&format={format}
  • Entités supportées : sessions, contacts, quotes, invoices, all

Frontend

Composant Réutilisable : ExportFormatDialog

  • Fichier : frontend/src/components/export/ExportFormatDialog.tsx
  • Utilisation : Dialog réutilisable pour sélectionner le format d'export
  • Props :
    • availableFormats : Formats disponibles (optionnel, par défaut tous)
    • onFormatSelect : Callback lors de la sélection
    • onOpenChange : Gestion de l'état d'ouverture
    • open : État d'ouverture
    • titleKey / descriptionKey : Clés de traduction personnalisables

Exports Spécifiques

1. Roadmap Export (Sessions)

Backend :

  • Endpoint : GET /api/sessions/:id/roadmap?format={format}
  • Formats : pdf, docx
  • Service : SessionRoadmapService

Frontend :

  • Composant : RoadmapExportDialog (utilise ExportFormatDialog)
  • Fichier : frontend/src/pages/sessions/SessionViewPage/components/RoadmapExportDialog.tsx

2. Conversation Export (Agent)

Backend :

  • Endpoint : GET /api/agent/conversations/:conversationId/export?format={format}
  • Formats : pdf, docx, csv, excel, txt
  • Service : AgentExportService

Frontend :

  • Fonction : exportConversation(format)
  • Fichier : frontend/src/components/search/agent/exportConversation.ts

3. Quotes Export

Backend :

  • Endpoint : GET /api/quotes/:id/export?format={format}
  • Formats : pdf, docx
  • Service : QuotesController (utilise PdfService et conversion HTML→Word)

Frontend :

  • À intégrer avec ExportFormatDialog

4. Invoices Export

Backend :

  • Endpoint : GET /api/invoices/:id/export?format={format}
  • Formats : pdf, docx
  • Service : InvoicesController (utilise PdfService et conversion HTML→Word)

Frontend :

  • À intégrer avec ExportFormatDialog

5. Contract Templates Export

Backend :

  • Endpoint : GET /api/contract-templates/:id/export?format={format}
  • Formats : pdf, docx, csv, excel
  • Service : ContractTemplatesController (utilise PdfService et conversion HTML→Word)

Frontend :

  • À intégrer avec ExportFormatDialog

6. Generic Data Export

Backend :

  • Endpoint : GET /api/export?entity={entity}&format={format}
  • Entités : sessions, contacts, quotes, invoices, all
  • Formats : csv, docx, excel, json, pdf
  • Service : ExportService

Frontend :

  • Composant : ExportButton (utilise déjà le système)
  • Fichier : frontend/src/components/molecules/ExportButton.tsx

Conversion HTML → Word

Pour les exports qui génèrent du HTML (quotes, invoices, contract templates), une méthode utilitaire htmlToWordDocument a été créée qui :

  1. Parse le HTML avec cheerio
  2. Extrait les éléments structurés (titres, paragraphes, tableaux)
  3. Convertit en document Word avec docx
  4. Préserve la structure et le formatage

Limitations :

  • Conversion simplifiée (pas de styles complexes)
  • Pour une meilleure qualité, considérer une bibliothèque dédiée HTML→DOCX

Traductions

Toutes les traductions sont centralisées sous export.formats.* :

{
"export": {
"title": "Exporter",
"description": "Choisissez le format d'export",
"formats": {
"pdf": { "title": "PDF", "description": "..." },
"docx": { "title": "Word (DOCX)", "description": "..." },
"csv": { "title": "CSV", "description": "..." },
"excel": { "title": "Excel (XLSX)", "description": "..." },
"json": { "title": "JSON", "description": "..." }
}
}
}

Utilisation

Backend

// Export sessions as Word
const buffer = await exportService.exportSessions(
userId,
ExportFormatValues.DOCX
);

Frontend

import { ExportFormatDialog } from "@/components/export";

<ExportFormatDialog
availableFormats={["pdf", "docx"]}
onFormatSelect={(format) => handleExport(format)}
onOpenChange={setOpen}
open={isOpen}
titleKey="sessions.roadmap.export.title"
descriptionKey="sessions.roadmap.export.description"
/>;

Fichiers Modifiés/Créés

Backend

  • backend/src/export/export.service.ts - Ajout support DOCX
  • backend/src/export/export.controller.ts - Support DOCX
  • backend/src/export/README.md - Documentation complète
  • backend/src/agent/agent-export.service.ts - Ajout PDF, CSV, Excel, TXT
  • backend/src/agent/agent.controller.ts - Endpoint unifié avec paramètre format
  • backend/src/agent/agent.module.ts - Ajout PdfModule pour support PDF
  • backend/src/quotes-invoices/quotes.controller.ts - Support Word, conversion HTML→Word
  • backend/src/quotes-invoices/invoices.controller.ts - Support Word, conversion HTML→Word
  • backend/src/contract-templates/contract-templates.controller.ts - Support Word, CSV, Excel
  • backend/src/contract-templates/contract-templates.module.ts - Ajout StorageModule pour uploads
  • openapi/components/export.yaml - Ajout format DOCX
  • backend/src/_generated/types.gen.ts - Types régénérés avec DOCX

Frontend

  • frontend/src/components/export/ExportFormatDialog.tsx - Composant centralisé
  • frontend/src/components/export/index.ts - Fichier d'export
  • frontend/src/pages/sessions/SessionViewPage/components/RoadmapExportDialog.tsx - Refactorisé
  • frontend/src/components/search/agent/exportConversation.ts - Fonction unifiée avec support multi-formats
  • frontend/src/i18n/locales/fr/translation.json - Traductions FR pour exports
  • frontend/src/i18n/locales/en/translation.json - Traductions EN pour exports

Prochaines Étapes

  1. ✅ Système centralisé créé
  2. ✅ Formats multiples supportés
  3. ✅ Documentation complète
  4. ✅ Types TypeScript générés
  5. ✅ Backend complet pour tous les exports (quotes, invoices, contracts)
  6. ⏳ Intégration frontend pour quotes/invoices/contracts avec ExportFormatDialog (optionnel)
  7. ⏳ Tests d'intégration (optionnel)

Notes Techniques

  • Conversion HTML→Word : Utilise cheerio pour parser et docx pour générer
  • Performance : Les exports sont asynchrones et gèrent de gros volumes
  • Stockage : Tous les fichiers sont uploadés sur R2 avec URLs signées
  • Sécurité : Tous les exports sont filtrés par owner_id