121 lines
5.5 KiB
PHP
121 lines
5.5 KiB
PHP
<?php
|
||
// ============================================================
|
||
// API – Manajemen Data SPBU (Point / Marker)
|
||
// Mendukung: GET (list & detail), POST (create),
|
||
// PUT (update), DELETE (hapus)
|
||
// ============================================================
|
||
header('Content-Type: application/json; charset=utf-8');
|
||
header('Access-Control-Allow-Origin: *');
|
||
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
|
||
header('Access-Control-Allow-Headers: Content-Type');
|
||
|
||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit(0); }
|
||
|
||
require_once 'config.php';
|
||
|
||
$method = $_SERVER['REQUEST_METHOD'];
|
||
$input = json_decode(file_get_contents('php://input'), true) ?? [];
|
||
|
||
// ── Router ───────────────────────────────────────────────────
|
||
switch ($method) {
|
||
|
||
// ── READ ─────────────────────────────────────────────────
|
||
case 'GET':
|
||
if (isset($_GET['id'])) {
|
||
$id = (int) $_GET['id'];
|
||
$stmt = $conn->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);
|
||
}
|