Files
stripstream-librarian/CLAUDE.md
Froidefond Julien 389d71b42f refactor: replace Meilisearch with PostgreSQL full-text search
Remove Meilisearch dependency entirely. Search is now handled by
PostgreSQL ILIKE with pg_trgm indexes, joining series_metadata for
series-level authors. No external search engine needed.

- Replace search.rs Meilisearch HTTP calls with PostgreSQL queries
- Remove meili.rs from indexer, sync_meili call from job pipeline
- Remove MEILI_URL/MEILI_MASTER_KEY from config, state, env files
- Remove meilisearch service from docker-compose.yml
- Add migration 0027: drop sync_metadata, enable pg_trgm, add indexes
- Remove search resync button/endpoint (no longer needed)
- Update all documentation (CLAUDE.md, README.md, AGENTS.md, PLAN.md)

API contract unchanged — same SearchResponse shape returned.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 10:59:25 +01:00

2.8 KiB

Stripstream Librarian

Gestionnaire de bibliothèque de bandes dessinées/ebooks. Workspace Cargo multi-crates avec backoffice Next.js.

Architecture

Service Dossier Port local
API REST (axum) apps/api/ 7080
Indexer (background) apps/indexer/ 7081
Backoffice (Next.js) apps/backoffice/ 7082
PostgreSQL infra 6432

Crates partagés : crates/core (config env), crates/parsers (CBZ/CBR/PDF).

Commandes

# Build
cargo build                     # workspace entier
cargo build -p api              # crate spécifique
cargo build --release           # version optimisée

# Linting / format
cargo clippy
cargo fmt

# Tests
cargo test
cargo test -p parsers

# Infra (dépendances uniquement) — docker-compose.yml est à la racine
docker compose up -d postgres

# Backoffice dev
cd apps/backoffice && npm install && npm run dev  # http://localhost:7082

# Migrations
sqlx migrate run  # DATABASE_URL doit être défini

Environnement

cp .env.example .env  # puis éditer les valeurs REQUIRED

Variables requises au démarrage : DATABASE_URL, API_BOOTSTRAP_TOKEN.

Gotchas

  • Dépendances système : 4 outils requis — unrar (CBR listing), unar (CBR extraction), pdfinfo (PDF page count), pdftoppm (PDF rendu). unrarunar.
  • Port backoffice : npm run dev écoute sur 7082, pas 3000.
  • LIBRARIES_ROOT_PATH : les chemins en DB commencent par /libraries/ ; en dev local, définir cette variable pour remapper vers le dossier réel.
  • Thumbnails : stockés dans THUMBNAIL_DIRECTORY (défaut /data/thumbnails), générés par l'API (pas l'indexer) — l'indexer déclenche un checkup via POST /index/jobs/:id/thumbnails/checkup.
  • Workspace Cargo : les dépendances externes sont définies dans le Cargo.toml racine, pas dans les crates individuels.
  • Migrations : dossier infra/migrations/, géré par sqlx. Toujours migrer avant de démarrer les services.
  • Recherche : full-text via PostgreSQL (ILIKE + pg_trgm), pas de moteur de recherche externe.

Fichiers clés

Fichier Rôle
crates/core/src/config.rs Config depuis env (API, Indexer, AdminUI)
crates/parsers/src/lib.rs Détection format, extraction métadonnées
apps/api/src/books.rs Endpoints CRUD livres
apps/api/src/search.rs Recherche full-text PostgreSQL
apps/api/src/pages.rs Rendu pages + cache LRU
apps/indexer/src/scanner.rs Scan filesystem
infra/migrations/*.sql Schéma DB

Voir AGENTS.md pour les conventions de code détaillées (error handling, patterns sqlx, async/tokio). Des AGENTS.md spécifiques existent dans apps/api/, apps/indexer/, apps/backoffice/, crates/parsers/.