Add beacons/lookupByMac.php and beacons/wipe.php endpoints

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
John Mizerek 2026-03-16 19:13:21 -07:00
parent 04d09cfc4e
commit 5d9be247c8
2 changed files with 91 additions and 0 deletions

View file

@ -0,0 +1,47 @@
<?php
require_once __DIR__ . '/../helpers.php';
runAuth();
$data = readJsonBody();
$macAddress = trim($data['MACAddress'] ?? '');
if ($macAddress === '') {
apiAbort(['OK' => false, 'ERROR' => 'missing_mac', 'MESSAGE' => 'MACAddress is required']);
}
$q = queryOne("
SELECT
bh.ID AS BeaconHardwareID,
bh.HardwareId AS MACAddress,
bh.BusinessID,
bh.ServicePointID,
bh.ShardUUID AS UUID,
bh.Major,
bh.Minor,
bh.Status,
biz.Name AS BusinessName,
sp.Name AS ServicePointName
FROM BeaconHardware bh
LEFT JOIN Businesses biz ON biz.ID = bh.BusinessID
LEFT JOIN ServicePoints sp ON sp.ID = bh.ServicePointID
WHERE bh.HardwareId = ?
LIMIT 1
", [$macAddress]);
if (!$q || $q['Status'] !== 'assigned') {
jsonResponse(['OK' => false, 'ERROR' => 'not_found']);
}
jsonResponse([
'OK' => true,
'ERROR' => '',
'BEACON' => [
'BeaconID' => (int) $q['BeaconHardwareID'],
'BusinessID' => (int) $q['BusinessID'],
'BusinessName' => $q['BusinessName'] ?? '',
'BeaconName' => $q['ServicePointName'] ?? '',
'UUID' => $q['UUID'] ?? '',
'MACAddress' => $q['MACAddress'],
'ServicePointName' => $q['ServicePointName'] ?? '',
],
]);

44
api/beacons/wipe.php Normal file
View file

@ -0,0 +1,44 @@
<?php
require_once __DIR__ . '/../helpers.php';
runAuth();
global $businessId;
$data = readJsonBody();
$bizId = $businessId;
if ($bizId <= 0) $bizId = (int) ($data['BusinessID'] ?? 0);
if ($bizId <= 0) {
apiAbort(['OK' => false, 'ERROR' => 'no_business_selected']);
}
$beaconId = (int) ($data['BeaconID'] ?? 0);
if ($beaconId <= 0) {
apiAbort(['OK' => false, 'ERROR' => 'missing_beacon_id', 'MESSAGE' => 'BeaconID is required']);
}
$q = queryOne("
SELECT ID, BusinessID, ServicePointID FROM BeaconHardware
WHERE ID = ? AND BusinessID = ?
LIMIT 1
", [$beaconId, $bizId]);
if (!$q) {
apiAbort(['OK' => false, 'ERROR' => 'not_found', 'MESSAGE' => 'Beacon not found or does not belong to this business']);
}
$servicePointId = (int) ($q['ServicePointID'] ?? 0);
// Clear the minor from the service point so it can be re-provisioned
if ($servicePointId > 0) {
queryTimed("UPDATE ServicePoints SET BeaconMinor = NULL WHERE ID = ? AND BusinessID = ?", [$servicePointId, $bizId]);
}
// Mark hardware as unassigned
queryTimed("
UPDATE BeaconHardware
SET Status = 'unassigned', BusinessID = NULL, ServicePointID = NULL,
ShardUUID = NULL, Major = NULL, Minor = NULL, UpdatedAt = NOW()
WHERE ID = ?
", [$beaconId]);
jsonResponse(['OK' => true, 'ERROR' => '', 'BeaconID' => $beaconId]);