fix: thumbnails manquants dans les résultats de recherche

- meili.rs: corrige la désérialisation de la réponse paginée de
  Meilisearch (attendait Vec<Value>, l'API retourne {results:[...]}) —
  la suppression des documents obsolètes ne s'exécutait jamais, laissant
  d'anciens UUIDs qui généraient des 404 sur les thumbnails
- books.rs: fallback sur render_book_page_1 si le fichier thumbnail
  n'est plus accessible sur le disque (au lieu de 500)
- pages.rs: retourne 404 au lieu de 500 quand le fichier CBZ est absent
- search.rs + api.ts + BookCard: ajout série hits, statut lecture,
  pagination OFFSET, filtre reading_status, et placeholder onError

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 11:45:03 +01:00
parent 8261050943
commit 64347edabc
8 changed files with 185 additions and 33 deletions

View File

@@ -145,8 +145,13 @@ pub async fn sync_meili(pool: &PgPool, meili_url: &str, meili_master_key: &str)
if let Ok(response) = meili_response {
if response.status().is_success() {
if let Ok(meili_docs) = response.json::<Vec<serde_json::Value>>().await {
let meili_ids: std::collections::HashSet<String> = meili_docs
// Meilisearch returns { "results": [...], "offset": ..., "total": ... }
if let Ok(payload) = response.json::<serde_json::Value>().await {
let docs = payload.get("results")
.and_then(|v| v.as_array())
.cloned()
.unwrap_or_default();
let meili_ids: std::collections::HashSet<String> = docs
.into_iter()
.filter_map(|doc| doc.get("id").and_then(|id| id.as_str()).map(|s| s.to_string()))
.collect();