Complete port of all 163 API endpoints from Lucee/CFML to PHP 8.3. Shared helpers in api/helpers.php (DB, auth, request/response, security). PDO prepared statements throughout. Same JSON response shapes as CFML.
45 lines
988 B
PHP
45 lines
988 B
PHP
<?php
|
|
require_once __DIR__ . '/../helpers.php';
|
|
runAuth();
|
|
|
|
$data = readJsonBody();
|
|
$query = trim($data['Query'] ?? '');
|
|
$excludeBusinessID = (int) ($data['ExcludeBusinessID'] ?? 0);
|
|
|
|
if (strlen($query) < 2) {
|
|
apiAbort(['OK' => false, 'ERROR' => 'query_too_short', 'MESSAGE' => 'Search query must be at least 2 characters.']);
|
|
}
|
|
|
|
$params = [];
|
|
$sql = "SELECT ID, Name FROM Businesses WHERE 1=1";
|
|
|
|
if (is_numeric($query)) {
|
|
$sql .= " AND ID = ?";
|
|
$params[] = (int) $query;
|
|
} else {
|
|
$sql .= " AND Name LIKE ?";
|
|
$params[] = '%' . $query . '%';
|
|
}
|
|
|
|
if ($excludeBusinessID > 0) {
|
|
$sql .= " AND ID != ?";
|
|
$params[] = $excludeBusinessID;
|
|
}
|
|
|
|
$sql .= " ORDER BY Name LIMIT 20";
|
|
|
|
$rows = queryTimed($sql, $params);
|
|
|
|
$businesses = [];
|
|
foreach ($rows as $row) {
|
|
$businesses[] = [
|
|
'BusinessID' => (int) $row['ID'],
|
|
'Name' => $row['Name'],
|
|
];
|
|
}
|
|
|
|
jsonResponse([
|
|
'OK' => true,
|
|
'Count' => count($businesses),
|
|
'Businesses' => $businesses,
|
|
]);
|