= $2 AND p.start_time <= $3 "; try { $result = pg_query_params($dbconn, $query, [$poly, $start, $end]); if ($result === false) { throw new Exception('Database query failed: ' . pg_last_error($dbconn)); } $data = pg_fetch_assoc($result); pg_free_result($result); header('Content-Type: application/json'); echo json_encode($data ?: new stdClass()); // Return empty JSON object if no results } catch (Exception $e) { send_error(500, 'An error occurred while processing the power request.', $e->getMessage()); } } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input_data = null; $request_type = null; $contentType = trim(strtolower($_SERVER['HTTP_CONTENT_TYPE'] ?? $_SERVER['CONTENT_TYPE'] ?? '')); if (strpos($contentType, 'application/json') === 0) { $raw_post_data = file_get_contents('php://input'); if ($raw_post_data === false || $raw_post_data === '') { send_error(400, 'Received empty request body or could not read input.', "Error: Could not read php://input or it was empty."); } $input_data = json_decode($raw_post_data, true); if (json_last_error() !== JSON_ERROR_NONE) { send_error(400, 'Invalid JSON payload received.', 'JSON Decode Error: ' . json_last_error_msg() . " | Raw data snippet: " . substr($raw_post_data, 0, 100)); } elseif (!is_array($input_data)) { send_error(400, 'Invalid JSON payload: Expected a JSON object.', "JSON Decode Warning: Result is not an array. Data: " . print_r($input_data, true)); } else { $request_type = $input_data['request_type'] ?? null; } } else { send_error(415, 'Unsupported Media Type. This endpoint requires application/json.', "Unsupported Media Type Received: " . $contentType); } if ($request_type === null) { if (is_array($input_data) && !isset($input_data['request_type'])) { send_error(400, 'Missing "request_type" field within the request payload.'); } else { send_error(400, 'Missing required parameter: request_type (or processing error).'); } } $dbconn = getDBConnection(); switch ($request_type) { // Retaining legacy endpoints from stormdata.php but pointing to new handlers if needed // For now, only implementing the 'power' endpoint for the new schema case 'power': handle_new_power_request($dbconn, $input_data); break; // The 'powernopoly' case from the original file can be implemented here if needed. // It would be similar to handle_new_power_request but without the ST_Within clause. /* // Legacy endpoints can be added here if they need to be migrated. case 'ohgo': // handle_ohgo_request($dbconn, $input_data); send_error(501, 'The "ohgo" request type is not yet implemented for newstormdata.'); break; case 'ohgonopoly': // handle_ohgo_request_no_poly($dbconn, $input_data); send_error(501, 'The "ohgonopoly" request type is not yet implemented for newstormdata.'); break; case 'wupoly': // handle_wu_request_poly($dbconn, $input_data); send_error(501, 'The "wupoly" request type is not yet implemented for newstormdata.'); break; case 'campoly': // handle_cam_request($dbconn, $input_data); send_error(501, 'The "campoly" request type is not yet implemented for newstormdata.'); break; */ default: send_error(400, 'Invalid request_type specified: ' . htmlspecialchars($request_type)); break; } pg_close($dbconn); } else { http_response_code(405); header('Allow: POST'); header('Content-Type: application/json; charset=utf-8'); echo json_encode(['error' => 'Invalid request method. Only POST is allowed.']); exit; } ?>