Files
2026-06-10 22:07:47 +07:00

58 lines
2.7 KiB
PHP

<?php require_once __DIR__ . '/../config/db.php'; require_once __DIR__ . '/helpers.php';
$pdo = Database::getConnection();
$method = $_SERVER['REQUEST_METHOD'];
requireAdminForMutation();
switch ($method) {
case 'GET':
$stmt = $pdo->query("SELECT s.id, s.nama, s.deskripsi, s.buka_24_jam, s.created_at, ST_AsGeoJSON(s.geom) as geojson,
IFNULL(AVG(u.rating), 0) as avg_rating, COUNT(u.id) as total_ulasan
FROM spbu s
LEFT JOIN ulasan_fasilitas u ON u.fasilitas_id = s.id AND u.fasilitas_tipe = 'spbu'
GROUP BY s.id
ORDER BY s.id DESC");
$features = [];
while ($r = $stmt->fetch()) {
$features[] = [
'type'=>'Feature',
'geometry'=>json_decode($r['geojson']),
'properties'=>[
'id'=>$r['id'],
'nama'=>$r['nama'],
'deskripsi'=>$r['deskripsi'],
'buka_24_jam'=>(int)$r['buka_24_jam'],
'created_at'=>$r['created_at'],
'avg_rating'=>round($r['avg_rating'], 1),
'total_ulasan'=>$r['total_ulasan']
]
];
}
sendSuccess(['type'=>'FeatureCollection','features'=>$features], 'Data SPBU');
break;
case 'POST':
$d = getInput();
if (empty($d['nama']) || empty($d['geometry'])) sendError('Nama dan geometri wajib diisi');
$stmt = $pdo->prepare("INSERT INTO spbu (nama, deskripsi, buka_24_jam, geom) VALUES (?,?,?,ST_GeomFromGeoJSON(?))");
$stmt->execute([$d['nama'], $d['deskripsi']??'', (int)($d['buka_24_jam']??0), json_encode($d['geometry'])]);
sendSuccess(['id'=>$pdo->lastInsertId()], 'SPBU disimpan', 201);
break;
case 'PUT':
$d = getInput(); $id = $_GET['id'] ?? null;
if (!$id) sendError('ID wajib disertakan');
if (!empty($d['geometry'])) {
$stmt = $pdo->prepare("UPDATE spbu SET geom=ST_GeomFromGeoJSON(?) WHERE id=?");
$stmt->execute([json_encode($d['geometry']), $id]);
} else {
$stmt = $pdo->prepare("UPDATE spbu SET nama=?, deskripsi=?, buka_24_jam=? WHERE id=?");
$stmt->execute([$d['nama'], $d['deskripsi']??'', (int)($d['buka_24_jam']??0), $id]);
}
sendSuccess(null, 'SPBU diperbarui');
break;
case 'DELETE':
$id = $_GET['id'] ?? null;
if (!$id) sendError('ID wajib disertakan');
$pdo->prepare("DELETE FROM spbu WHERE id=?")->execute([$id]);
sendSuccess(null, 'SPBU dihapus');
break;
default: sendError('Method not allowed', 405);
}