'failure', 'message' => 'Unauthorized']); exit; } $raw = file_get_contents('php://input'); $input = json_decode($raw, true) ?: ($_SERVER['REQUEST_METHOD'] === 'GET' ? $_GET : []); $phone = preg_replace('/\D+/', '', $input['phone'] ?? ''); $limit = min(max((int)($input['limit'] ?? 5), 1), 20); if (empty($phone)) { http_response_code(400); echo json_encode(['status' => 'failure', 'message' => 'phone is required']); exit; } $mainDb = Database::get('main'); $rideDb = Database::get('ride'); global $encryptionHelper; // Resolve user $encryptedPhone = $encryptionHelper->encryptData($phone); $driver = $mainDb->prepare("SELECT id, 'driver' AS type FROM driver WHERE phone = :p LIMIT 1"); $driver->execute([':p' => $encryptedPhone]); $user = $driver->fetch(PDO::FETCH_ASSOC); if (!$user) { $passenger = $mainDb->prepare("SELECT id, 'passenger' AS type FROM passengers WHERE phone = :p LIMIT 1"); $passenger->execute([':p' => $encryptedPhone]); $user = $passenger->fetch(PDO::FETCH_ASSOC); } if (!$user) { http_response_code(404); echo json_encode(['status' => 'failure', 'message' => 'User not found']); exit; } $col = $user['type'] === 'driver' ? 'driver_id' : 'passenger_id'; $stmt = $rideDb->prepare(" SELECT id, start_location, end_location, date, time, endtime, price, price_for_driver, price_for_passenger, status, paymentMethod, carType, distance, created_at FROM ride WHERE $col = :uid ORDER BY created_at DESC LIMIT :lim "); $stmt->bindValue(':uid', $user['id'], PDO::PARAM_STR); $stmt->bindValue(':lim', $limit, PDO::PARAM_INT); $stmt->execute(); $rides = $stmt->fetchAll(PDO::FETCH_ASSOC); echo json_encode([ 'status' => 'success', 'user' => [ 'id' => $user['id'], 'type' => $user['type'], ], 'rides' => $rides, ], JSON_UNESCAPED_UNICODE);