From eb0c2150e523e39c3b08e7a84f7ab7132d1ce23f Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 19 Feb 2026 11:28:39 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20r=C3=A9soudre=20le=20cache=20Next.js=20q?= =?UTF-8?q?ui=20bloquait=20la=20mise=20=C3=A0=20jour=20des=20images?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - app/macon/page.tsx + app/paysagiste/page.tsx : ajout de export const revalidate = 60 pour activer l'ISR (les pages étaient générées statiquement à la build, getSiteImages() n'était jamais rappelé entre deux déploiements) - app/api/admin/site-images/route.ts : appel de revalidatePath() après chaque PUT réussi pour purger immédiatement le cache de la page concernée (macon_, paysagiste_ → leur page démo, sinon → /) Résultat : la page se met à jour dans la seconde qui suit la sauvegarde dans l'admin, sans attendre le délai de 60s https://claude.ai/code/session_01PzA98VhLMmsHpzs7gnLHGs --- app/api/admin/site-images/route.ts | 15 +++++++++++++++ app/macon/page.tsx | 2 ++ app/paysagiste/page.tsx | 2 ++ 3 files changed, 19 insertions(+) diff --git a/app/api/admin/site-images/route.ts b/app/api/admin/site-images/route.ts index 81c4d05..ac0cbc6 100644 --- a/app/api/admin/site-images/route.ts +++ b/app/api/admin/site-images/route.ts @@ -1,8 +1,17 @@ import { NextRequest, NextResponse } from "next/server"; +import { revalidatePath } from "next/cache"; import { createClient, createAdminClient } from "@/lib/supabase/server"; import { DEFAULT_IMAGES, updateSiteImage } from "@/lib/site-images"; import type { Profile } from "@/types/database.types"; +/** Pages à invalider selon le préfixe de la clé image */ +function getPathsToRevalidate(key: string): string[] { + if (key.startsWith("macon_")) return ["/macon"]; + if (key.startsWith("paysagiste_")) return ["/paysagiste"]; + // Clés de la page d'accueil (hero_portrait, about_photo, process_*, demo_*) + return ["/"]; +} + interface SiteImageRow { key: string; url: string; @@ -119,5 +128,11 @@ export async function PUT(request: NextRequest) { ); } + // Invalider immédiatement le cache Next.js des pages concernées + const paths = getPathsToRevalidate(key); + for (const path of paths) { + revalidatePath(path); + } + return NextResponse.json({ success: true }); } diff --git a/app/macon/page.tsx b/app/macon/page.tsx index 8e82548..fc1626d 100644 --- a/app/macon/page.tsx +++ b/app/macon/page.tsx @@ -3,6 +3,8 @@ import Link from "next/link"; import MaconClient from "./MaconClient"; import { getSiteImages } from "@/lib/site-images"; +export const revalidate = 60; + export const metadata: Metadata = { title: "Ma\u00e7onnerie & Extension de Maison \u00e0 Orchies, Cysoing, Saint-Amand-les-Eaux | Artisan Ma\u00e7on Nord (59)", diff --git a/app/paysagiste/page.tsx b/app/paysagiste/page.tsx index 2a13f6e..0580c63 100644 --- a/app/paysagiste/page.tsx +++ b/app/paysagiste/page.tsx @@ -4,6 +4,8 @@ import Button from "@/components/ui/Button"; import PaysagisteClient from "./PaysagisteClient"; import { getSiteImages } from "@/lib/site-images"; +export const revalidate = 60; + export const metadata: Metadata = { title: "Démo Site Paysagiste - Conception & Entretien Espaces Verts", description: