introduced supabase and experiment management UI (#23)

* introduced supabase and experiment management UI

* fixing cookie import
This commit is contained in:
Daniel Alves Rösel
2025-11-18 20:45:11 +01:00
committed by GitHub
parent ab8b8787a8
commit 894ce87a5d
18 changed files with 977 additions and 176 deletions

View File

@@ -1,10 +1,40 @@
import { NextResponse } from 'next/server';
import { getAllExperiments } from '@/lib/sessionStore';
import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@/utils/supabase/server';
import { cookies } from 'next/headers';
export async function GET() {
export async function GET(req: NextRequest) {
try {
const exps = getAllExperiments();
return NextResponse.json({ experiments: exps });
const cookieStore = await cookies();
const supabase = createClient(cookieStore);
const { searchParams } = new URL(req.url);
const id = searchParams.get('id');
if (id) {
const { data, error } = await supabase
.from('experiments')
.select(`
*,
task:tasks(*)
`)
.eq('id', id)
.single();
if (error) throw error;
return NextResponse.json({ experiment: data });
}
const { data, error } = await supabase
.from('experiments')
.select(`
*,
task:tasks(*)
`)
.order('created_at', { ascending: false });
if (error) throw error;
return NextResponse.json({ experiments: data || [] });
} catch (err: any) {
console.error('experiments list error:', err);
return NextResponse.json(
@@ -13,3 +43,44 @@ export async function GET() {
);
}
}
export async function POST(req: NextRequest) {
try {
const cookieStore = await cookies();
const supabase = createClient(cookieStore);
const body = await req.json();
const { subject_name, xp_human_only, xp_market_mode, xp_task_id } = body;
if (!subject_name) {
return NextResponse.json(
{ error: 'subject_name is required' },
{ status: 400 }
);
}
const { data, error } = await supabase
.from('experiments')
.insert([{
subject_name,
xp_human_only: xp_human_only ?? false,
xp_market_mode: xp_market_mode || null,
xp_task_id: xp_task_id || null,
}])
.select(`
*,
task:tasks(*)
`)
.single();
if (error) throw error;
return NextResponse.json({ experiment: data });
} catch (err: any) {
console.error('experiment creation error:', err);
return NextResponse.json(
{ error: err.message || 'unknown error' },
{ status: 500 }
);
}
}