prepare( 'SELECT u.id, u.name, u.email, u.created_at, o.name AS organization_name FROM users u LEFT JOIN organizations o ON o.id = u.organization_id WHERE u.id = ?' ); $stmt->execute([$userId]); $customer = $stmt->fetch(); if (!$customer) { api_error(404, 'CUSTOMER_NOT_FOUND', 'Der Kunde wurde nicht gefunden.'); } $email = $customer['email']; $isGuest = false; } else { if ($email === '') { api_error(422, 'CUSTOMER_IDENTIFIER_REQUIRED', 'Bitte userId oder email angeben.'); } $ticketStmt = $pdo->prepare( 'SELECT MAX(requester_name) AS name, MIN(created_at) AS created_at FROM tickets WHERE requester_email = ? AND user_id IS NULL' ); $ticketStmt->execute([$email]); $guestRow = $ticketStmt->fetch(); if (!$guestRow || $guestRow['name'] === null) { api_error(404, 'CUSTOMER_NOT_FOUND', 'Der Kunde wurde nicht gefunden.'); } $customer = [ 'id' => null, 'name' => $guestRow['name'], 'email' => $email, 'created_at' => $guestRow['created_at'], 'organization_name' => null, ]; $isGuest = true; } $ticketStmt = $pdo->prepare( "SELECT t.*, p.name AS priority_name, p.color AS priority_color, d.name AS department_name, s.name AS staff_name FROM tickets t JOIN priorities p ON p.id = t.priority_id JOIN departments d ON d.id = t.department_id LEFT JOIN staff s ON s.id = t.assigned_staff_id WHERE t.requester_email = ? OR t.user_id = ? ORDER BY t.created_at DESC LIMIT 100" ); $ticketStmt->execute([$email, $userId]); $tickets = array_map('api_ticket_summary', $ticketStmt->fetchAll()); api_json([ 'customer' => [ 'id' => $customer['id'] !== null ? (int) $customer['id'] : null, 'name' => $customer['name'], 'email' => $customer['email'], 'organizationName' => $customer['organization_name'], 'isGuest' => $isGuest, 'createdAt' => $customer['created_at'], ], 'tickets' => $tickets, ]);