diff --git a/src/app/actions/datasets.ts b/src/app/actions/datasets.ts index 20c4ef2..8297c42 100644 --- a/src/app/actions/datasets.ts +++ b/src/app/actions/datasets.ts @@ -4,6 +4,7 @@ import db from '@/lib/db'; import { dataset } from '@/lib/model/dataset'; import { eq } from 'drizzle-orm'; import { revalidatePath } from 'next/cache'; +import { removeAllDatasetEntries } from './remove-dataset-entries'; import { requireAdmin } from '@/lib/auth'; export async function createDataset({ name, description }: { name: string; description?: string }) { @@ -64,3 +65,24 @@ export async function updateDataset( throw new Error('Failed to update dataset'); } } + +export async function deleteDataset(id: number) { + const result = await requireAdmin(); + if (!result.authenticated || !result.admin) { + throw new Error('Unauthorized'); + } + + try { + // Remove all entries and their files using the existing action + await removeAllDatasetEntries(id); + + // Then delete the dataset itself + await db.delete(dataset).where(eq(dataset.id, id)); + + revalidatePath('/admin'); + return { success: true }; + } catch (error) { + console.error('Error deleting dataset:', error); + throw new Error('Failed to delete dataset'); + } +} diff --git a/src/app/admin/datasets/[id]/page.tsx b/src/app/admin/datasets/[id]/page.tsx index e85d3db..21fd494 100644 --- a/src/app/admin/datasets/[id]/page.tsx +++ b/src/app/admin/datasets/[id]/page.tsx @@ -6,6 +6,7 @@ import EditableDatasetHeader from '@/components/EditableDatasetHeader'; import DatasetEntriesList from '@/components/DatasetEntriesList'; import UploadDatasetEntriesModal from '@/components/UploadDatasetEntriesModal'; import RemoveAllEntriesButton from '@/components/RemoveAllEntriesButton'; +import DeleteDatasetButton from '@/components/DeleteDatasetButton'; import { requireAdmin } from '@/lib/auth'; import { redirect } from 'next/navigation'; @@ -69,6 +70,7 @@ export default async function DatasetPage({ params }: DatasetPageProps) {
+ This will permanently delete the dataset and all of its entries. This action cannot be undone. +
+ + {error && ( +