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:
@@ -1,7 +1,12 @@
|
|||||||
import type { PageServerLoad, Actions } from './$types';
|
import type { PageServerLoad, Actions } from './$types';
|
||||||
import { fail } from '@sveltejs/kit';
|
import { fail } from '@sveltejs/kit';
|
||||||
import { entryRepository, imageRepository } from '$lib/server/db/repository';
|
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';
|
import { generateThumbnail } from '$lib/server/images/thumbnails';
|
||||||
|
|
||||||
export const load: PageServerLoad = async ({ url }) => {
|
export const load: PageServerLoad = async ({ url }) => {
|
||||||
@@ -188,5 +193,33 @@ export const actions: Actions = {
|
|||||||
console.error('Upload error:', err);
|
console.error('Upload error:', err);
|
||||||
return fail(500, { error: 'Failed to save image' });
|
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 };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user