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électiononOpenChange: Gestion de l'état d'ouvertureopen: État d'ouverturetitleKey/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(utiliseExportFormatDialog) - 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(utilisePdfServiceet 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(utilisePdfServiceet 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(utilisePdfServiceet 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 :
- Parse le HTML avec
cheerio - Extrait les éléments structurés (titres, paragraphes, tableaux)
- Convertit en document Word avec
docx - 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 DOCXbackend/src/export/export.controller.ts- Support DOCXbackend/src/export/README.md- Documentation complètebackend/src/agent/agent-export.service.ts- Ajout PDF, CSV, Excel, TXTbackend/src/agent/agent.controller.ts- Endpoint unifié avec paramètreformatbackend/src/agent/agent.module.ts- AjoutPdfModulepour support PDFbackend/src/quotes-invoices/quotes.controller.ts- Support Word, conversion HTML→Wordbackend/src/quotes-invoices/invoices.controller.ts- Support Word, conversion HTML→Wordbackend/src/contract-templates/contract-templates.controller.ts- Support Word, CSV, Excelbackend/src/contract-templates/contract-templates.module.ts- AjoutStorageModulepour uploadsopenapi/components/export.yaml- Ajout format DOCXbackend/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'exportfrontend/src/pages/sessions/SessionViewPage/components/RoadmapExportDialog.tsx- Refactoriséfrontend/src/components/search/agent/exportConversation.ts- Fonction unifiée avec support multi-formatsfrontend/src/i18n/locales/fr/translation.json- Traductions FR pour exportsfrontend/src/i18n/locales/en/translation.json- Traductions EN pour exports
Prochaines Étapes
- ✅ Système centralisé créé
- ✅ Formats multiples supportés
- ✅ Documentation complète
- ✅ Types TypeScript générés
- ✅ Backend complet pour tous les exports (quotes, invoices, contracts)
- ⏳ Intégration frontend pour quotes/invoices/contracts avec ExportFormatDialog (optionnel)
- ⏳ Tests d'intégration (optionnel)
Notes Techniques
- Conversion HTML→Word : Utilise
cheeriopour parser etdocxpour 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