Add back page revalidations

This commit is contained in:
Sam Becker 2023-10-14 22:30:49 -05:00
parent 953bb8ebbe
commit cd55777e02
4 changed files with 54 additions and 15 deletions

View File

@ -1,4 +1,4 @@
import { revalidatePhotosAndBlobKeys } from '@/cache'; import { revalidatePhotosAndBlobKeys, revalidateAdminPaths } from '@/cache';
import { ACCEPTED_PHOTO_FILE_TYPES } from '@/photo'; import { ACCEPTED_PHOTO_FILE_TYPES } from '@/photo';
import { isUploadPathnameValid } from '@/services/blob'; import { isUploadPathnameValid } from '@/services/blob';
import { handleUpload, type HandleUploadBody } from '@vercel/blob/client'; import { handleUpload, type HandleUploadBody } from '@vercel/blob/client';
@ -26,12 +26,13 @@ export async function POST(request: Request): Promise<NextResponse> {
// This argument is required, but doesn't seem to fire // This argument is required, but doesn't seem to fire
onUploadCompleted: async () => { onUploadCompleted: async () => {
revalidatePhotosAndBlobKeys(); revalidatePhotosAndBlobKeys();
revalidateAdminPaths();
}, },
}); });
revalidatePhotosAndBlobKeys(); revalidatePhotosAndBlobKeys();
revalidateAdminPaths();
return NextResponse.json(jsonResponse); return NextResponse.json(jsonResponse);
} catch (error) { } catch (error) {
revalidatePhotosAndBlobKeys();
return NextResponse.json( return NextResponse.json(
{ error: (error as Error).message }, { error: (error as Error).message },
{ status: 400 }, { status: 400 },

19
src/cache/index.ts vendored
View File

@ -1,4 +1,4 @@
import { revalidateTag, unstable_cache } from 'next/cache'; import { revalidatePath, revalidateTag, unstable_cache } from 'next/cache';
import { import {
GetPhotosOptions, GetPhotosOptions,
getPhoto, getPhoto,
@ -17,6 +17,7 @@ import { parseCachedPhotosDates, parseCachedPhotoDates } from '@/photo';
import { getBlobPhotoUrls, getBlobUploadUrls } from '@/services/blob'; import { getBlobPhotoUrls, getBlobUploadUrls } from '@/services/blob';
import { AuthSession } from 'next-auth'; import { AuthSession } from 'next-auth';
import { Camera, createCameraKey } from '@/camera'; import { Camera, createCameraKey } from '@/camera';
import { PATHS_ADMIN, PATHS_TO_CACHE } from '@/site/paths';
const KEY_PHOTOS = 'photos'; const KEY_PHOTOS = 'photos';
const KEY_PHOTOS_COUNT = `${KEY_PHOTOS}-count`; const KEY_PHOTOS_COUNT = `${KEY_PHOTOS}-count`;
@ -95,15 +96,23 @@ export const revalidateBlobKey = () =>
revalidateTag(KEY_BLOB); revalidateTag(KEY_BLOB);
export const revalidatePhotosAndBlobKeys = () => { export const revalidatePhotosAndBlobKeys = () => {
revalidateTag(KEY_PHOTOS); revalidatePhotosKey();
revalidateTag(KEY_BLOB); revalidateBlobKey();
}; };
export const revalidateAllKeys = () => { export const revalidateAllKeys = () => {
revalidatePhotosKey(); revalidatePhotosAndBlobKeys();
revalidateTagsKey(); revalidateTagsKey();
revalidateCamerasKey(); revalidateCamerasKey();
revalidateBlobKey(); };
export const revalidateAllKeysAndPaths = () => {
revalidateAllKeys();
PATHS_TO_CACHE.forEach(path => revalidatePath(path));
};
export const revalidateAdminPaths = () => {
PATHS_ADMIN.forEach(path => revalidatePath(path));
}; };
export const getPhotosCached: typeof getPhotos = (...args) => export const getPhotosCached: typeof getPhotos = (...args) =>

View File

@ -14,7 +14,8 @@ import {
deleteBlobPhoto, deleteBlobPhoto,
} from '@/services/blob'; } from '@/services/blob';
import { import {
revalidateAllKeys, revalidateAdminPaths,
revalidateAllKeysAndPaths,
revalidateBlobKey, revalidateBlobKey,
revalidatePhotosKey, revalidatePhotosKey,
} from '@/cache'; } from '@/cache';
@ -29,7 +30,7 @@ export async function createPhotoAction(formData: FormData) {
await sqlInsertPhoto(photo); await sqlInsertPhoto(photo);
revalidateAllKeys(); revalidateAllKeysAndPaths();
redirect(PATH_ADMIN_PHOTOS); redirect(PATH_ADMIN_PHOTOS);
} }
@ -51,6 +52,7 @@ export async function deletePhotoAction(formData: FormData) {
]); ]);
revalidatePhotosKey(); revalidatePhotosKey();
revalidateAdminPaths();
}; };
export async function deletePhotoTagGloballyAction(formData: FormData) { export async function deletePhotoTagGloballyAction(formData: FormData) {
@ -59,6 +61,7 @@ export async function deletePhotoTagGloballyAction(formData: FormData) {
await sqlDeletePhotoTagGlobally(tag); await sqlDeletePhotoTagGlobally(tag);
revalidatePhotosKey(); revalidatePhotosKey();
revalidateAdminPaths();
} }
export async function renamePhotoTagGloballyAction(formData: FormData) { export async function renamePhotoTagGloballyAction(formData: FormData) {
@ -76,6 +79,7 @@ export async function deleteBlobPhotoAction(formData: FormData) {
await deleteBlobPhoto(formData.get('url') as string); await deleteBlobPhoto(formData.get('url') as string);
revalidateBlobKey(); revalidateBlobKey();
revalidateAdminPaths();
if (formData.get('redirectToPhotos') === 'true') { if (formData.get('redirectToPhotos') === 'true') {
redirect(PATH_ADMIN_PHOTOS); redirect(PATH_ADMIN_PHOTOS);
@ -83,5 +87,5 @@ export async function deleteBlobPhotoAction(formData: FormData) {
}; };
export async function syncCacheAction() { export async function syncCacheAction() {
revalidateAllKeys(); revalidateAllKeysAndPaths();
} }

View File

@ -6,11 +6,6 @@ import {
getCameraFromKey, getCameraFromKey,
} from '@/camera'; } from '@/camera';
// Prefixes
export const PREFIX_PHOTO = '/p';
export const PREFIX_TAG = '/tag';
export const PREFIX_CAMERA = '/shot-on';
// Core paths // Core paths
export const PATH_ROOT = '/'; export const PATH_ROOT = '/';
export const PATH_GRID = '/grid'; export const PATH_GRID = '/grid';
@ -18,6 +13,16 @@ export const PATH_ADMIN = '/admin';
export const PATH_SIGN_IN = '/sign-in'; export const PATH_SIGN_IN = '/sign-in';
export const PATH_OG = '/og'; export const PATH_OG = '/og';
// Path prefixes
export const PREFIX_PHOTO = '/p';
export const PREFIX_TAG = '/tag';
export const PREFIX_CAMERA = '/shot-on';
// Dynamic paths
const PATH_PHOTO_DYNAMIC = `${PREFIX_PHOTO}/:photoId`;
const PATH_TAG_DYNAMIC = `${PREFIX_TAG}/:tag`;
const PATH_CAMERA_DYNAMIC = `${PREFIX_CAMERA}/:camera`;
// Admin paths // Admin paths
export const PATH_ADMIN_PHOTOS = `${PATH_ADMIN}/photos`; export const PATH_ADMIN_PHOTOS = `${PATH_ADMIN}/photos`;
export const PATH_ADMIN_UPLOADS = `${PATH_ADMIN}/uploads`; export const PATH_ADMIN_UPLOADS = `${PATH_ADMIN}/uploads`;
@ -31,6 +36,26 @@ const SHARE = 'share';
const NEXT = 'next'; const NEXT = 'next';
const EDIT = 'edit'; const EDIT = 'edit';
export const PATHS_ADMIN = [
PATH_ADMIN,
PATH_ADMIN_PHOTOS,
PATH_ADMIN_UPLOADS,
PATH_ADMIN_TAGS,
PATH_ADMIN_UPLOAD,
PATH_ADMIN_UPLOAD_BLOB,
PATH_ADMIN_CONFIGURATION,
];
export const PATHS_TO_CACHE = [
PATH_ROOT,
PATH_GRID,
PATH_OG,
PATH_PHOTO_DYNAMIC,
PATH_TAG_DYNAMIC,
PATH_CAMERA_DYNAMIC,
...PATHS_ADMIN,
];
// Absolute paths // Absolute paths
export const ABSOLUTE_PATH_FOR_HOME_IMAGE = `${BASE_URL}/home-image`; export const ABSOLUTE_PATH_FOR_HOME_IMAGE = `${BASE_URL}/home-image`;