feat(indexing): Lot 4 - Progression temps reel, Full Rebuild, Optimisations

- Ajout migrations DB: index_job_errors, library_monitoring, full_rebuild_type
- API: endpoints progression temps reel (/jobs/:id/stream), active jobs, details
- API: support full_rebuild avec suppression donnees existantes
- Indexer: logs detailles avec timing [SCAN][META][PARSER][BDD]
- Indexer: optimisation parsing PDF (lopdf -> pdfinfo) 235x plus rapide
- Indexer: corrections chemins LIBRARIES_ROOT_PATH pour dev local
- Backoffice: composants JobProgress, JobsIndicator (header), JobsList
- Backoffice: SSE streaming pour progression temps reel
- Backoffice: boutons Index/Index Full sur page libraries
- Backoffice: highlight job apres creation avec redirection
- Fix: parsing volume type i32, sync meilisearch cleanup

Perf: parsing PDF passe de 8.7s a 37ms
Perf: indexation 45 fichiers en ~15s vs plusieurs minutes avant
This commit is contained in:
2026-03-06 11:33:32 +01:00
parent 82294a1bee
commit 5f51955f4d
29 changed files with 1928 additions and 68 deletions

View File

@@ -0,0 +1,26 @@
-- Migration: Progression temps reel et erreurs d'indexation (T19 - Option 2)
-- Colonnes pour la progression temps reel dans index_jobs
ALTER TABLE index_jobs
ADD COLUMN IF NOT EXISTS current_file TEXT,
ADD COLUMN IF NOT EXISTS progress_percent INTEGER CHECK (progress_percent >= 0 AND progress_percent <= 100),
ADD COLUMN IF NOT EXISTS total_files INTEGER,
ADD COLUMN IF NOT EXISTS processed_files INTEGER DEFAULT 0;
-- Table pour stocker les erreurs d'indexation
CREATE TABLE IF NOT EXISTS index_job_errors (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
job_id UUID NOT NULL REFERENCES index_jobs(id) ON DELETE CASCADE,
file_path TEXT NOT NULL,
error_message TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_index_job_errors_job_id ON index_job_errors(job_id);
CREATE INDEX IF NOT EXISTS idx_index_job_errors_created_at ON index_job_errors(created_at);
COMMENT ON TABLE index_job_errors IS 'Stocke uniquement les erreurs d indexation pour debug';
COMMENT ON COLUMN index_jobs.current_file IS 'Fichier en cours de traitement (pour affichage temps reel)';
COMMENT ON COLUMN index_jobs.progress_percent IS 'Pourcentage de completion estime';
COMMENT ON COLUMN index_jobs.total_files IS 'Nombre total de fichiers a traiter (estimation)';
COMMENT ON COLUMN index_jobs.processed_files IS 'Nombre de fichiers deja traites';