Vercel/src/photo/actions.ts
2023-10-14 12:21:09 -05:00

88 lines
2.0 KiB
TypeScript

'use server';
import {
sqlDeletePhoto,
sqlInsertPhoto,
sqlDeletePhotoTagGlobally,
sqlUpdatePhoto,
sqlRenamePhotoTagGlobally,
} from '@/services/postgres';
import { convertFormDataToPhoto } from './form';
import { redirect } from 'next/navigation';
import {
convertUploadToPhoto,
deleteBlobPhoto,
} from '@/services/blob';
import {
revalidateAllKeys,
revalidateBlobKey,
revalidatePhotosKey,
} from '@/cache';
import { PATH_ADMIN_PHOTOS, PATH_ADMIN_TAGS } from '@/site/paths';
export async function createPhotoAction(formData: FormData) {
const photo = convertFormDataToPhoto(formData, true);
const updatedUrl = await convertUploadToPhoto(photo.url, photo.id);
if (updatedUrl) { photo.url = updatedUrl; }
await sqlInsertPhoto(photo);
revalidateAllKeys();
redirect(PATH_ADMIN_PHOTOS);
}
export async function updatePhotoAction(formData: FormData) {
const photo = convertFormDataToPhoto(formData);
await sqlUpdatePhoto(photo);
revalidatePhotosKey();
redirect(PATH_ADMIN_PHOTOS);
}
export async function deletePhotoAction(formData: FormData) {
await Promise.all([
deleteBlobPhoto(formData.get('url') as string),
sqlDeletePhoto(formData.get('id') as string),
]);
revalidatePhotosKey();
};
export async function deletePhotoTagGloballyAction(formData: FormData) {
const tag = formData.get('tag') as string;
await sqlDeletePhotoTagGlobally(tag);
revalidatePhotosKey();
}
export async function renamePhotoTagGloballyAction(formData: FormData) {
const tag = formData.get('tag') as string;
const updatedTag = formData.get('updatedTag') as string;
if (tag && updatedTag && tag !== updatedTag) {
await sqlRenamePhotoTagGlobally(tag, updatedTag);
revalidatePhotosKey();
redirect(PATH_ADMIN_TAGS);
}
}
export async function deleteBlobPhotoAction(formData: FormData) {
await deleteBlobPhoto(formData.get('url') as string);
revalidateBlobKey();
if (formData.get('redirectToPhotos') === 'true') {
redirect(PATH_ADMIN_PHOTOS);
}
};
export async function syncCacheAction() {
revalidateAllKeys();
}