Fix tag date meta, rationalize camera converters

This commit is contained in:
Sam Becker 2023-10-04 19:30:40 -05:00
parent 436462001a
commit 7a333d7c3e
9 changed files with 25 additions and 27 deletions

View File

@ -13,12 +13,12 @@ import {
isPathTagPhotoShare,
isPathTagShare,
} from '@/site/paths';
import { getMakeModelFromCameraString } from '@/camera';
import { getCameraFromKey } from '@/camera';
const PHOTO_ID = 'UsKSGcbt';
const TAG = 'tag-name';
const CAMERA = 'fujifilm-x-t1';
const CAMERA_OBJECT = getMakeModelFromCameraString(CAMERA);
const CAMERA_OBJECT = getCameraFromKey(CAMERA);
const SHARE = 'share';
const PATH_ROOT = '/';

View File

@ -1,6 +1,6 @@
import { auth } from '@/auth';
import { getImageCacheHeadersForAuth, getPhotosCached } from '@/cache';
import { getMakeModelFromCameraString } from '@/camera';
import { getCameraFromKey } from '@/camera';
import {
IMAGE_OG_SMALL_SIZE,
MAX_PHOTOS_TO_SHOW_PER_TAG,
@ -15,7 +15,7 @@ export async function GET(
_: Request,
context: { params: { camera: string } },
) {
const camera = getMakeModelFromCameraString(context.params.camera);
const camera = getCameraFromKey(context.params.camera);
const [
photos,

View File

@ -1,4 +1,4 @@
import { getMakeModelFromCameraString } from '@/camera';
import { getCameraFromKey } from '@/camera';
import { Metadata } from 'next';
import { generateMetaForCamera } from '@/camera/meta';
import { GRID_THUMBNAILS_TO_SHOW_MAX } from '@/photo';
@ -18,7 +18,7 @@ interface CameraProps {
export async function generateMetadata({
params,
}: CameraProps): Promise<Metadata> {
const camera = getMakeModelFromCameraString(params.camera);
const camera = getCameraFromKey(params.camera);
const [
photos,
@ -57,7 +57,7 @@ export default async function CameraPage({
params,
searchParams,
}: CameraProps & PaginationParams) {
const camera = getMakeModelFromCameraString(params.camera);
const camera = getCameraFromKey(params.camera);
const {
photos,

View File

@ -1,4 +1,4 @@
import { cameraFromPhoto, getMakeModelFromCameraString } from '@/camera';
import { cameraFromPhoto, getCameraFromKey } from '@/camera';
import CameraShareModal from '@/camera/CameraShareModal';
import { generateMetaForCamera } from '@/camera/meta';
import { Metadata } from 'next';
@ -19,7 +19,7 @@ interface CameraProps {
export async function generateMetadata({
params,
}: CameraProps): Promise<Metadata> {
const camera = getMakeModelFromCameraString(params.camera);
const camera = getCameraFromKey(params.camera);
const [
photos,
@ -58,7 +58,7 @@ export default async function Share({
params,
searchParams,
}: CameraProps & PaginationParams) {
const cameraFromParams = getMakeModelFromCameraString(params.camera);
const cameraFromParams = getCameraFromKey(params.camera);
const {
photos,

View File

@ -20,6 +20,7 @@ export async function generateMetadata({
const [
photos,
count,
dateRange,
] = await getPhotosTagDataCached({
tag,
limit: GRID_THUMBNAILS_TO_SHOW_MAX,
@ -30,7 +31,7 @@ export async function generateMetadata({
title,
description,
images,
} = generateMetaForTag(tag, photos, count);
} = generateMetaForTag(tag, photos, count, dateRange);
return {
title,

8
src/cache/index.ts vendored
View File

@ -69,14 +69,14 @@ const getPhotoCacheTag = (photoId: string) => `photo-${photoId}`;
const getPhotoTagCountTag = (tag: string) =>
`${TAG_PHOTOS_COUNT}-${TAG_TAGS}-${tag}`;
const getPhotoCameraCountTag = ({ make, model }: Camera) =>
`${TAG_PHOTOS_COUNT}-${TAG_CAMERAS}-${createCameraKey(make, model)}`;
const getPhotoCameraCountTag = (camera: Camera) =>
`${TAG_PHOTOS_COUNT}-${TAG_CAMERAS}-${createCameraKey(camera)}`;
const getPhotoTagDateRangeTag = (tag: string) =>
`${TAG_PHOTOS_DATE_RANGE}-${TAG_TAGS}-${tag}`;
const getPhotoCameraDateRangeTag = ({ make, model }: Camera) =>
`${TAG_PHOTOS_DATE_RANGE}-${TAG_CAMERAS}-${createCameraKey(make, model)}`;
const getPhotoCameraDateRangeTag = (camera: Camera) =>
`${TAG_PHOTOS_DATE_RANGE}-${TAG_CAMERAS}-${createCameraKey(camera)}`;
export const revalidatePhotosTag = () =>
revalidateTag(TAG_PHOTOS);

View File

@ -8,12 +8,12 @@ export type Camera = {
model: string
};
export const createCameraKey = (make: string, model: string) =>
export const createCameraKey = ({ make, model }: Camera) =>
parameterize(`${make}-${model}`);
// Assumes no makes ('Fujifilm,' 'Apple,' 'Canon', etc.) have dashes
export const getMakeModelFromCameraString = (camera: string): Camera => {
const [make, model] = camera.toLowerCase().split(/[-| ](.*)/s);
export const getCameraFromKey = (cameraKey: string): Camera => {
const [make, model] = cameraKey.toLowerCase().split(/[-| ](.*)/s);
return { make, model };
};
@ -24,7 +24,7 @@ export const cameraFromPhoto = (
photo?.make && photo?.model
? { make: photo.make, model: photo.model }
: typeof fallback === 'string'
? getMakeModelFromCameraString(fallback)
? getCameraFromKey(fallback)
: fallback ?? CAMERA_PLACEHOLDER;
export const formatCameraText = ({ make, model }: Camera) =>

View File

@ -281,7 +281,7 @@ const sqlGetUniqueCameras = async () => sql`
WHERE hidden IS NOT TRUE
ORDER BY camera ASC
`.then(({ rows }) => rows.map(({ make, model }) => ({
cameraKey: createCameraKey(make, model),
cameraKey: createCameraKey({ make, model }),
camera: { make, model } as Camera,
})));

View File

@ -3,7 +3,7 @@ import { BASE_URL } from './config';
import {
Camera,
createCameraKey,
getMakeModelFromCameraString,
getCameraFromKey,
} from '@/camera';
// Prefixes
@ -81,11 +81,8 @@ export const pathForTag = (tag: string, next?: number) =>
export const pathForTagShare = (tag: string) =>
`${pathForTag(tag)}/${SHARE}`;
export const pathForCamera = ({ make, model }: Camera, next?: number) =>
pathWithNext(
`${PREFIX_CAMERA}/${createCameraKey(make, model)}`,
next,
);
export const pathForCamera = (camera: Camera, next?: number) =>
pathWithNext(`${PREFIX_CAMERA}/${createCameraKey(camera)}`, next);
export const pathForCameraShare = (camera: Camera) =>
`${pathForCamera(camera)}/${SHARE}`;
@ -177,7 +174,7 @@ export const getPathComponents = (pathname = ''): {
const tag = pathname.match(/^\/t\/([^/]+)/)?.[1];
const cameraString = pathname.match(/^\/shot-on\/([^/]+)/)?.[1];
const camera = cameraString
? getMakeModelFromCameraString(cameraString)
? getCameraFromKey(cameraString)
: undefined;
return {
photoId: (