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>
2.8 KiB
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).unrar≠unar. - 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 viaPOST /index/jobs/:id/thumbnails/checkup. - Workspace Cargo : les dépendances externes sont définies dans le
Cargo.tomlracine, 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.mdpour les conventions de code détaillées (error handling, patterns sqlx, async/tokio). DesAGENTS.mdspécifiques existent dansapps/api/,apps/indexer/,apps/backoffice/,crates/parsers/.