Workers Integration - Exemple d'utilisation
Ce document montre comment intégrer les nouveaux workers dans le code existant.
Exemple : Export asynchrone
Backend : Nouvel endpoint /export/async
Un nouvel endpoint a été ajouté pour les exports asynchrones utilisant le nouveau worker :
GET /api/export/async?entity=sessions&format=csv&fields=id,title,status
Réponse :
{
"exportJobId": "uuid-export-job",
"jobRunId": "uuid-job-run",
"message": "Export job queued successfully",
"status": "QUEUED",
"pollUrl": "/api/job-runs/uuid-job-run"
}
Frontend : Utilisation avec hooks
import { useState } from "react";
import { useJobRunStatus } from "@/client/job-runs/useJobRuns";
import { JobRunProgress } from "@/components/job-runs/JobRunProgress";
import { api } from "@/client/api";
function AsyncExportButton() {
const [jobRunId, setJobRunId] = useState<string | null>(null);
const { isCompleted, jobRun } = useJobRunStatus(jobRunId);
const handleExport = async () => {
try {
// Appeler le nouvel endpoint async
const response = await api.get("/export/async", {
entity: "sessions",
format: "csv",
fields: "id,title,status",
});
// Démarrer le polling
setJobRunId(response.jobRunId);
} catch (error) {
console.error("Failed to start export:", error);
}
};
const handleDownload = () => {
if (jobRun?.result?.fileObjectId) {
// Télécharger le fichier depuis R2
window.open(`/api/file-objects/${jobRun.result.fileObjectId}/download`);
}
};
return (
<div>
{!jobRunId && (
<button onClick={handleExport}>Export Sessions (Async)</button>
)}
{jobRunId && !isCompleted && (
<JobRunProgress jobRunId={jobRunId} />
)}
{isCompleted && (
<button onClick={handleDownload}>Download Export</button>
)}
</div>
);
}
Migration progressive
L'ancien endpoint /export reste disponible pour les exports synchrones rapides. Le nouvel endpoint /export/async est recommandé pour :
- Exports volumineux (> 1000 lignes)
- Exports complexes (ALL entity, PDF avec beaucoup de données)
- Meilleure UX : pas de timeout, feedback en temps réel
Comparaison
| Aspect | /export (sync) | /export/async (worker) |
|---|---|---|
| Timeout | 30s max | Pas de timeout |
| Feedback | Aucun | Polling automatique |
| Performance | Bloque la requête | Traitement en arrière-plan |
| UX | Attente passive | Progress bar + status |
| Recommandé pour | Petits exports | Exports volumineux |
Prochaines intégrations
D'autres endpoints peuvent être migrés vers les workers :
- AI Tasks : Utiliser
ai:runpour les tâches IA lourdes - Document Processing : Utiliser
doc:ingestetdoc:ocrpour les PDFs