62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
|
|
import { getLogger } from '@kit/shared/logger';
|
|
import { getSupabaseServerAdminClient } from '@kit/supabase/server-admin-client';
|
|
|
|
export async function POST(request: Request) {
|
|
const logger = await getLogger();
|
|
|
|
try {
|
|
const body = await request.json();
|
|
const { courseId, firstName, lastName, email, phone } = body;
|
|
|
|
if (!courseId || !firstName || !lastName || !email) {
|
|
return NextResponse.json(
|
|
{ error: 'Kurs-ID, Vorname, Nachname und E-Mail sind erforderlich' },
|
|
{ status: 400 },
|
|
);
|
|
}
|
|
|
|
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
|
|
return NextResponse.json(
|
|
{ error: 'Ungültige E-Mail-Adresse' },
|
|
{ status: 400 },
|
|
);
|
|
}
|
|
|
|
const supabase = getSupabaseServerAdminClient();
|
|
|
|
const { error } = await supabase.from('course_participants').insert({
|
|
course_id: courseId,
|
|
first_name: firstName,
|
|
last_name: lastName,
|
|
email,
|
|
phone: phone || null,
|
|
status: 'enrolled',
|
|
enrolled_at: new Date().toISOString(),
|
|
});
|
|
|
|
if (error) {
|
|
logger.error(
|
|
{ error, context: 'course-register-insert' },
|
|
'[course-register] Insert error',
|
|
);
|
|
return NextResponse.json(
|
|
{ error: 'Anmeldung fehlgeschlagen' },
|
|
{ status: 500 },
|
|
);
|
|
}
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: 'Anmeldung erfolgreich',
|
|
});
|
|
} catch (err) {
|
|
logger.error(
|
|
{ error: err, context: 'course-register' },
|
|
'[course-register] Error',
|
|
);
|
|
return NextResponse.json({ error: 'Serverfehler' }, { status: 500 });
|
|
}
|
|
}
|