diff --git a/pages/admin.vue b/pages/admin.vue index cb8f187..7dc7a68 100644 --- a/pages/admin.vue +++ b/pages/admin.vue @@ -18,7 +18,53 @@
+ +
+

Manage Existing Sermons

+ +
+
+
+ + +
+ +
+ +
+ {{ deleteError }} +
+
+ {{ deleteSuccess }} +
+
+ +
+ No sermons available to manage. +
+
+ +
+

Create New Sermon

@@ -137,6 +183,16 @@ definePageMeta({ middleware: 'auth' }) +// Fetch all sermons for management +const { data: allSermons, refresh: refreshSermons } = await useFetch('/api/sermons') + +// Sermon management state +const selectedSermonId = ref('') +const deleteError = ref('') +const deleteSuccess = ref('') +const deleting = ref(false) + +// Create sermon form state const bibleReferences = ref(['']) const formData = ref({ date: '', @@ -205,6 +261,39 @@ async function handleSubmit() { } } +async function handleDelete() { + if (!selectedSermonId.value) return + + deleteError.value = '' + deleteSuccess.value = '' + deleting.value = true + + try { + await $fetch(`/api/sermons/${selectedSermonId.value}`, { + method: 'DELETE' + }) + + deleteSuccess.value = 'Sermon deleted successfully!' + selectedSermonId.value = '' + + // Refresh the sermon list + await refreshSermons() + } catch (e: any) { + deleteError.value = e.data?.message || 'Failed to delete sermon' + } finally { + deleting.value = false + } +} + +function formatDate(dateString: string) { + const date = new Date(dateString) + return date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric' + }) +} + async function handleLogout() { await $fetch('/api/auth/logout', { method: 'POST' }) await navigateTo('/login') diff --git a/server/api/sermons/[id].delete.ts b/server/api/sermons/[id].delete.ts new file mode 100644 index 0000000..9c80e44 --- /dev/null +++ b/server/api/sermons/[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' + }) + } +})