Files
Schule-Sportanmeldung-Backend/api/anmeldung/create.php
DOMINIK SCHRADER 007dfc57fd Initial Commit
2025-12-01 11:30:25 +01:00

63 lines
2.6 KiB
PHP

<?php
global $db;
try {
$data = json_decode(file_get_contents("php://input"), true);
if (!$data) { http_response_code(400); echo json_encode(['message'=>'Ungültige Daten']); exit; }
if (empty($data['vorname']) || empty($data['nachname']) || empty($data['email']) ||
empty($data['betrieb_id']) || empty($data['kurs_ids']) || !is_array($data['kurs_ids'])) {
http_response_code(400);
echo json_encode(['message' => 'Pflichtfelder fehlen']);
exit;
}
$db->beginTransaction();
$stmt = $db->prepare("INSERT INTO schueler (vorname, nachname, email, geburtsdatum, betrieb_id)
VALUES (:vorname, :nachname, :email, :geburtsdatum, :betrieb_id)");
$stmt->execute([
':vorname' => $data['vorname'],
':nachname' => $data['nachname'],
':email' => $data['email'],
':geburtsdatum' => $data['geburtsdatum'] ?? null,
':betrieb_id' => $data['betrieb_id']
]);
$schueler_id = (int)$db->lastInsertId();
$angemeldete_kurse = [];
foreach ($data['kurs_ids'] as $kurs_id) {
$check = $db->prepare("SELECT k.name, k.max_teilnehmer, COUNT(a.id) as belegt
FROM kurse k
LEFT JOIN anmeldungen a ON k.id = a.kurs_id
WHERE k.id = :kurs_id
GROUP BY k.id");
$check->execute([':kurs_id' => $kurs_id]);
$kurs = $check->fetch();
if (!$kurs) { $db->rollBack(); http_response_code(400); echo json_encode(['message'=>'Kurs nicht gefunden']); exit; }
if ((int)$kurs['belegt'] >= (int)$kurs['max_teilnehmer']) {
$db->rollBack(); http_response_code(400);
echo json_encode(['message' => "Kurs '{$kurs['name']}' ist bereits voll"]);
exit;
}
$insert = $db->prepare("INSERT INTO anmeldungen (schueler_id, kurs_id, anmeldedatum)
VALUES (:schueler_id, :kurs_id, NOW())");
$insert->execute([':schueler_id' => $schueler_id, ':kurs_id' => $kurs_id]);
$angemeldete_kurse[] = $kurs['name'];
}
$db->commit();
http_response_code(201);
echo json_encode([
'message' => 'Anmeldung erfolgreich',
'schueler_id' => $schueler_id,
'angemeldete_kurse' => $angemeldete_kurse
]);
} catch (Exception $e) {
if ($db->inTransaction()) { $db->rollBack(); }
error_log("Error in anmeldung/create.php: " . $e->getMessage());
http_response_code(500);
echo json_encode(['message' => 'Fehler bei der Anmeldung']);
}