diff --git a/src/app/actions/experiment.ts b/src/app/actions/experiment.ts index 89b5edc..c5acdcc 100644 --- a/src/app/actions/experiment.ts +++ b/src/app/actions/experiment.ts @@ -2,6 +2,8 @@ import db from '@/lib/db'; import { experiment } from '@/lib/model/experiment'; +import { annotation } from '@/lib/model/annotation'; +import { participant } from '@/lib/model/participant'; import { and, eq } from 'drizzle-orm'; import { revalidatePath } from 'next/cache'; import { auth, requireAdmin } from '@/lib/auth'; @@ -144,3 +146,24 @@ export async function getExperimentById(id: number) { throw new Error('Failed to fetch experiment'); } } + +export async function clearExperimentData(id: number) { + const result = await requireAdmin(); + if (!result.authenticated || !result.admin) { + throw new Error('Unauthorized'); + } + + try { + // Delete all annotations for this experiment + await db.delete(annotation).where(eq(annotation.experimentId, id)); + + // Delete all participants for this experiment + await db.delete(participant).where(eq(participant.experimentId, id)); + + revalidatePath(`/admin/experiments/${id}`); + return { success: true }; + } catch (error) { + console.error('Error clearing experiment data:', error); + throw new Error('Failed to clear experiment data'); + } +} diff --git a/src/app/admin/experiments/[id]/page.tsx b/src/app/admin/experiments/[id]/page.tsx index a664425..b4f5941 100644 --- a/src/app/admin/experiments/[id]/page.tsx +++ b/src/app/admin/experiments/[id]/page.tsx @@ -4,6 +4,7 @@ import { experiment } from '@/lib/model/experiment'; import { eq } from 'drizzle-orm'; import EditableExperimentHeader from '@/components/EditableExperimentHeader'; import DeleteExperimentButton from '@/components/DeleteExperimentButton'; +import ClearExperimentDataButton from '@/components/ClearExperimentDataButton'; import UploadCalibrationModal from '@/components/UploadCalibrationModal'; import CalibrationListModal from '@/components/CalibrationListModal'; import { requireAdmin } from '@/lib/auth'; @@ -68,6 +69,7 @@ export default async function ExperimentPage({ params }: ExperimentPageProps) {
+ This will permanently delete all annotations and participant data for this experiment. This action cannot be undone. +
+ + {error && ( +