fix: cascade experiment removal to experiment_calibration

This commit is contained in:
averel10
2026-04-02 08:34:59 +02:00
parent 01c95658f4
commit 5d42882f96
2 changed files with 33 additions and 0 deletions

View File

@@ -2,6 +2,7 @@
import db from '@/lib/db';
import { experiment } from '@/lib/model/experiment';
import { experiment_calibration } from '@/lib/model/experiment_calibration';
import { annotation } from '@/lib/model/annotation';
import { participant } from '@/lib/model/participant';
import { and, eq } from 'drizzle-orm';
@@ -108,6 +109,9 @@ export async function deleteExperiment(id: number) {
}
try {
// Delete all experiment_calibration records first
await db.delete(experiment_calibration).where(eq(experiment_calibration.experimentId, id));
// Delete the experiment
await db.delete(experiment).where(eq(experiment.id, id));

View File

@@ -6,6 +6,12 @@ import Modal from '@/components/Modal';
import { Dataset } from '@/lib/model/dataset';
import { getAllDatasets } from '@/app/actions/datasets';
const ANNOTATION_TOOLS = [
{ value: 'quality-choice', label: 'Quality Choice' },
{ value: 'binary', label: 'Binary' },
// Future tools can be added here
];
interface CreateExperimentModalProps {
datasetId?: number;
}
@@ -15,6 +21,7 @@ export default function CreateExperimentModal({ datasetId }: CreateExperimentMod
const [name, setName] = useState('');
const [description, setDescription] = useState('');
const [selectedDatasetId, setSelectedDatasetId] = useState<number | ''>(datasetId || '');
const [annotationTool, setAnnotationTool] = useState('quality-choice');
const [onboardingEnabled, setOnboardingEnabled] = useState(false);
const [calibrationEnabled, setCalibrationEnabled] = useState(false);
const [loading, setLoading] = useState(false);
@@ -64,12 +71,14 @@ export default function CreateExperimentModal({ datasetId }: CreateExperimentMod
name: name.trim(),
description: description.trim() || undefined,
datasetId: Number(selectedDatasetId),
annotationTool,
onboardingEnabled,
calibrationEnabled
});
setName('');
setDescription('');
setSelectedDatasetId(datasetId || '');
setAnnotationTool('quality-choice');
setOnboardingEnabled(false);
setCalibrationEnabled(false);
setSuccess(true);
@@ -92,6 +101,7 @@ export default function CreateExperimentModal({ datasetId }: CreateExperimentMod
setName('');
setDescription('');
setSelectedDatasetId(datasetId || '');
setAnnotationTool('quality-choice');
setOnboardingEnabled(false);
setCalibrationEnabled(false);
setError(null);
@@ -162,6 +172,25 @@ export default function CreateExperimentModal({ datasetId }: CreateExperimentMod
/>
</div>
<div>
<label htmlFor="annotationTool" className="block text-sm font-medium mb-2">
Annotation Tool
</label>
<select
id="annotationTool"
value={annotationTool}
onChange={(e) => setAnnotationTool(e.target.value)}
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
disabled={loading}
>
{ANNOTATION_TOOLS.map((tool) => (
<option key={tool.value} value={tool.value}>
{tool.label}
</option>
))}
</select>
</div>
{!datasetId && (
<div>
<label htmlFor="datasetId" className="block text-sm font-medium mb-2">