88 lines
2.0 KiB
TypeScript
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();
|
|
}
|