prepare("SELECT * FROM data_spbu WHERE id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $row = $stmt->get_result()->fetch_assoc(); if ($row) { $row['geojson'] = json_decode($row['geojson']); $row['buka_24jam'] = (bool) $row['buka_24jam']; jsonResponse(['status' => 'success', 'data' => $row]); } else { jsonResponse(['status' => 'error', 'message' => 'Data tidak ditemukan'], 404); } } else { $rows = $conn->query("SELECT * FROM data_spbu ORDER BY id DESC")->fetch_all(MYSQLI_ASSOC); foreach ($rows as &$r) { $r['geojson'] = json_decode($r['geojson']); $r['buka_24jam'] = (bool) $r['buka_24jam']; } jsonResponse(['status' => 'success', 'data' => $rows]); } break; // ── CREATE ─────────────────────────────────────────────── case 'POST': $nama_spbu = clean($input['nama_spbu'] ?? ''); $telepon = clean($input['telepon'] ?? ''); $buka_24jam = isset($input['buka_24jam']) ? (int)(bool)$input['buka_24jam'] : 0; $lat = (float) ($input['lat'] ?? 0); $lng = (float) ($input['lng'] ?? 0); $geojson = $input['geojson'] ?? null; if (!$nama_spbu || !$geojson) { jsonResponse(['status' => 'error', 'message' => 'Field nama_spbu dan geojson wajib diisi'], 400); } $geojsonStr = is_string($geojson) ? $geojson : json_encode($geojson); $sql = "INSERT INTO data_spbu (nama_spbu, telepon, buka_24jam, lat, lng, geojson) VALUES (?, ?, ?, ?, ?, ?)"; $stmt = $conn->prepare($sql); $stmt->bind_param('ssidds', $nama_spbu, $telepon, $buka_24jam, $lat, $lng, $geojsonStr); if ($stmt->execute()) { jsonResponse(['status' => 'success', 'message' => 'Data SPBU berhasil ditambahkan', 'id' => $conn->insert_id], 201); } else { jsonResponse(['status' => 'error', 'message' => $conn->error], 500); } break; // ── UPDATE ─────────────────────────────────────────────── case 'PUT': $id = (int) ($input['id'] ?? 0); $nama_spbu = clean($input['nama_spbu'] ?? ''); $telepon = clean($input['telepon'] ?? ''); $buka_24jam = isset($input['buka_24jam']) ? (int)(bool)$input['buka_24jam'] : 0; $lat = (float) ($input['lat'] ?? 0); $lng = (float) ($input['lng'] ?? 0); $geojson = $input['geojson'] ?? null; if (!$id || !$nama_spbu || !$geojson) { jsonResponse(['status' => 'error', 'message' => 'Field id, nama_spbu dan geojson wajib diisi'], 400); } $geojsonStr = is_string($geojson) ? $geojson : json_encode($geojson); $sql = "UPDATE data_spbu SET nama_spbu=?, telepon=?, buka_24jam=?, lat=?, lng=?, geojson=? WHERE id=?"; $stmt = $conn->prepare($sql); $stmt->bind_param('ssiddsi', $nama_spbu, $telepon, $buka_24jam, $lat, $lng, $geojsonStr, $id); if ($stmt->execute()) { jsonResponse(['status' => 'success', 'message' => 'Data SPBU berhasil diperbarui']); } else { jsonResponse(['status' => 'error', 'message' => $conn->error], 500); } break; // ── DELETE ─────────────────────────────────────────────── case 'DELETE': $id = (int) ($_GET['id'] ?? ($input['id'] ?? 0)); if (!$id) { jsonResponse(['status' => 'error', 'message' => 'Parameter id wajib diisi'], 400); } $stmt = $conn->prepare("DELETE FROM data_spbu WHERE id = ?"); $stmt->bind_param('i', $id); if ($stmt->execute() && $stmt->affected_rows > 0) { jsonResponse(['status' => 'success', 'message' => 'Data SPBU berhasil dihapus']); } else { jsonResponse(['status' => 'error', 'message' => 'Data tidak ditemukan atau gagal dihapus'], 404); } break; default: jsonResponse(['status' => 'error', 'message' => 'Method tidak diizinkan'], 405); }