diff --git a/pages/admin.vue b/pages/admin.vue index 7dc7a68..be0a819 100644 --- a/pages/admin.vue +++ b/pages/admin.vue @@ -269,7 +269,7 @@ async function handleDelete() { deleting.value = true try { - await $fetch(`/api/sermons/${selectedSermonId.value}`, { + await $fetch(`/api/sermons/delete/${selectedSermonId.value}`, { method: 'DELETE' }) diff --git a/server/api/sermons/delete/[id].delete.ts b/server/api/sermons/delete/[id].delete.ts new file mode 100644 index 0000000..9c80e44 --- /dev/null +++ b/server/api/sermons/delete/[id].delete.ts @@ -0,0 +1,43 @@ +import { isAuthenticated } from '~/server/utils/auth' +import { getDatabase } from '~/server/utils/database' + +export default defineEventHandler(async (event) => { + // Check authentication + if (!isAuthenticated(event)) { + throw createError({ + statusCode: 401, + message: 'Unauthorized' + }) + } + + const id = getRouterParam(event, 'id') + + if (!id) { + throw createError({ + statusCode: 400, + message: 'Sermon ID is required' + }) + } + + try { + const db = getDatabase() + const result = db.prepare('DELETE FROM sermons WHERE id = ?').run(parseInt(id)) + + if (result.changes === 0) { + throw createError({ + statusCode: 404, + message: 'Sermon not found' + }) + } + + return { + success: true, + message: 'Sermon deleted successfully' + } + } catch (error: any) { + throw createError({ + statusCode: 500, + message: error.message || 'Failed to delete sermon' + }) + } +})