fix: improve revalidation logic by decoding path and invalidating cache after updates

This commit is contained in:
Marco Pedone 2025-10-17 19:48:28 +02:00
parent 6ae1993e8d
commit 054b9eff9a
4 changed files with 15 additions and 3 deletions

View file

@ -135,12 +135,20 @@ export const AnnuncioEditForm = ({ data }: { data: Annunci }) => {
const { mutateAsync: revalidate } = const { mutateAsync: revalidate } =
api.settings.revalidateAnnuncio.useMutation({ api.settings.revalidateAnnuncio.useMutation({
onSettled: async () => { onSettled: async () => {
await utils.annunci.getAnnuncio.invalidate({ cod: data.codice });
await utils.annunci.getAnnuncioById_rawImgUrls.invalidate({
id: data.id,
});
toast.success("Revalidazione completata"); toast.success("Revalidazione completata");
}, },
}); });
const { mutateAsync: update } = api.settings.updateAnnuncio.useMutation({ const { mutateAsync: update } = api.settings.updateAnnuncio.useMutation({
onSettled: async () => { onSettled: async () => {
await utils.annunci.getAnnuncio.invalidate({ cod: data.codice });
await utils.annunci.getAnnuncioById_rawImgUrls.invalidate({
id: data.id,
});
toast.success( toast.success(
"L'aggiornamento dell'annuncio è stata richiesta con successo,\n potrebbero volerci alcuni minuti prima che le modifiche siano visibili.", "L'aggiornamento dell'annuncio è stata richiesta con successo,\n potrebbero volerci alcuni minuti prima che le modifiche siano visibili.",
{ {

View file

@ -8,7 +8,7 @@ export default async function handler(
if (req.query.secret !== env.REVALIDATION_SECRET) { if (req.query.secret !== env.REVALIDATION_SECRET) {
return res.status(401).json({ message: "Invalid token" }); return res.status(401).json({ message: "Invalid token" });
} }
const path = req.query.path as string; const path = decodeURIComponent(req.query.path as string);
if (!path) { if (!path) {
return res.status(400).json({ message: "Missing path parameter" }); return res.status(400).json({ message: "Missing path parameter" });

View file

@ -17,9 +17,10 @@ import { api } from "~/utils/api";
const Admin_Annunci: NextPageWithLayout = () => { const Admin_Annunci: NextPageWithLayout = () => {
const { data, isLoading, refetch } = api.annunci.getAnnunciList.useQuery(); const { data, isLoading, refetch } = api.annunci.getAnnunciList.useQuery();
const utils = api.useUtils();
const { mutateAsync: update } = api.settings.updateAllAnnunci.useMutation({ const { mutateAsync: update } = api.settings.updateAllAnnunci.useMutation({
onSettled: async () => { onSettled: async () => {
await utils.annunci.getAnnunciList.invalidate();
toast.success( toast.success(
"La revalidazione dell'annuncio è stata richiesta con successo,\n potrebbero volerci alcuni minuti prima che le modifiche siano visibili.", "La revalidazione dell'annuncio è stata richiesta con successo,\n potrebbero volerci alcuni minuti prima che le modifiche siano visibili.",
{ {
@ -31,6 +32,7 @@ const Admin_Annunci: NextPageWithLayout = () => {
const { mutateAsync: revalidate } = const { mutateAsync: revalidate } =
api.settings.revalidateAllAnnunci.useMutation({ api.settings.revalidateAllAnnunci.useMutation({
onSettled: async () => { onSettled: async () => {
await utils.annunci.getAnnunciList.invalidate();
toast.success("Revalidazione completata"); toast.success("Revalidazione completata");
}, },
}); });

View file

@ -1,7 +1,9 @@
import { env } from "~/env.mjs";
export const revalidate = async (path: string) => { export const revalidate = async (path: string) => {
try { try {
const res = await fetch( const res = await fetch(
`${process.env.NEXT_PUBLIC_BASE_URL}/api/revalidation?secret=${process.env.REVALIDATION_SECRET}&path=${path}`, `${env.NEXT_PUBLIC_BASE_URL}/api/revalidation?secret=${env.REVALIDATION_SECRET}&path=${encodeURIComponent(path)}`,
{ {
method: "GET", method: "GET",
}, },