feat(03-04): add deleteImage form action

- Delete image files from filesystem (original + thumbnail)
- Delete image record from database
- Continue database deletion even if file deletion fails
- Returns success after cleanup
This commit is contained in:
Thomas Richter
2026-01-29 15:33:18 +01:00
parent 0acff1b438
commit b239862854

View File

@@ -1,7 +1,12 @@
import type { PageServerLoad, Actions } from './$types';
import { fail } from '@sveltejs/kit';
import { entryRepository, imageRepository } from '$lib/server/db/repository';
import { saveOriginal, saveThumbnail, ensureDirectories } from '$lib/server/images/storage';
import {
saveOriginal,
saveThumbnail,
ensureDirectories,
deleteImage as deleteImageFile
} from '$lib/server/images/storage';
import { generateThumbnail } from '$lib/server/images/thumbnails';
export const load: PageServerLoad = async ({ url }) => {
@@ -188,5 +193,33 @@ export const actions: Actions = {
console.error('Upload error:', err);
return fail(500, { error: 'Failed to save image' });
}
},
deleteImage: async ({ request }) => {
const formData = await request.formData();
const imageId = formData.get('imageId')?.toString();
if (!imageId) {
return fail(400, { error: 'Image ID required' });
}
// Get image to find extension for file deletion
const image = imageRepository.getById(imageId);
if (!image) {
return fail(404, { error: 'Image not found' });
}
// Delete files from filesystem
try {
await deleteImageFile(imageId, image.ext);
} catch (err) {
console.error('Failed to delete image files:', err);
// Continue to delete from database even if files missing
}
// Delete from database
imageRepository.delete(imageId);
return { success: true };
}
};