Files
2026-06-10 18:32:52 +07:00

152 lines
5.7 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// ============================================================
// api_jalan.php REST API CRUD Data Jalan (Polyline)
// GET api_jalan.php → semua data jalan
// GET api_jalan.php?id=N → satu data jalan
// POST api_jalan.php → tambah jalan
// PUT api_jalan.php?id=N → update jalan
// DELETE api_jalan.php?id=N → hapus jalan
// ============================================================
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'];
$id = isset($_GET['id']) ? (int) $_GET['id'] : null;
// ── GET ──────────────────────────────────────────────────────
if ($method === 'GET') {
$conn = getConnection();
if ($id) {
$stmt = $conn->prepare("SELECT * FROM jalan WHERE id = ?");
$stmt->bind_param('i', $id);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
if ($row) {
$row['id'] = (int) $row['id'];
$row['panjang_meter'] = (float) $row['panjang_meter'];
$row['geojson'] = json_decode($row['geojson']);
echo json_encode(['status' => 'success', 'data' => $row]);
} else {
http_response_code(404);
echo json_encode(['status' => 'error', 'message' => 'Data tidak ditemukan']);
}
$stmt->close();
} else {
$res = $conn->query("SELECT * FROM jalan ORDER BY created_at DESC");
$data = [];
while ($row = $res->fetch_assoc()) {
$row['id'] = (int) $row['id'];
$row['panjang_meter'] = (float) $row['panjang_meter'];
$row['geojson'] = json_decode($row['geojson']);
$data[] = $row;
}
echo json_encode(['status' => 'success', 'data' => $data]);
}
$conn->close();
exit;
}
// ── POST (Tambah) ─────────────────────────────────────────────
if ($method === 'POST') {
$body = json_decode(file_get_contents('php://input'), true);
$nama = trim($body['nama_jalan'] ?? '');
$status = $body['status_jalan'] ?? '';
$panjang = (float) ($body['panjang_meter'] ?? 0);
$geojson = isset($body['geojson'])
? json_encode($body['geojson'])
: null;
$valid_status = ['Nasional', 'Provinsi', 'Kabupaten'];
if (!$nama || !in_array($status, $valid_status) || !$geojson || $panjang <= 0) {
http_response_code(400);
echo json_encode(['status' => 'error', 'message' => 'Data tidak lengkap atau tidak valid']);
exit;
}
$conn = getConnection();
$stmt = $conn->prepare(
"INSERT INTO jalan (nama_jalan, status_jalan, panjang_meter, geojson)
VALUES (?, ?, ?, ?)"
);
$stmt->bind_param('ssds', $nama, $status, $panjang, $geojson);
if ($stmt->execute()) {
echo json_encode([
'status' => 'success',
'message' => 'Data jalan berhasil ditambahkan',
'id' => $stmt->insert_id
]);
} else {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => $stmt->error]);
}
$stmt->close();
$conn->close();
exit;
}
// ── PUT (Update) ──────────────────────────────────────────────
if ($method === 'PUT' && $id) {
$body = json_decode(file_get_contents('php://input'), true);
$nama = trim($body['nama_jalan'] ?? '');
$status = $body['status_jalan'] ?? '';
$panjang = (float) ($body['panjang_meter'] ?? 0);
$geojson = isset($body['geojson'])
? json_encode($body['geojson'])
: null;
$valid_status = ['Nasional', 'Provinsi', 'Kabupaten'];
if (!$nama || !in_array($status, $valid_status) || !$geojson || $panjang <= 0) {
http_response_code(400);
echo json_encode(['status' => 'error', 'message' => 'Data tidak lengkap atau tidak valid']);
exit;
}
$conn = getConnection();
$stmt = $conn->prepare(
"UPDATE jalan SET nama_jalan=?, status_jalan=?, panjang_meter=?, geojson=?
WHERE id=?"
);
$stmt->bind_param('ssdsi', $nama, $status, $panjang, $geojson, $id);
if ($stmt->execute()) {
echo json_encode(['status' => 'success', 'message' => 'Data jalan berhasil diperbarui']);
} else {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => $stmt->error]);
}
$stmt->close();
$conn->close();
exit;
}
// ── DELETE ────────────────────────────────────────────────────
if ($method === 'DELETE' && $id) {
$conn = getConnection();
$stmt = $conn->prepare("DELETE FROM jalan WHERE id=?");
$stmt->bind_param('i', $id);
if ($stmt->execute()) {
echo json_encode(['status' => 'success', 'message' => 'Data jalan berhasil dihapus']);
} else {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => $stmt->error]);
}
$stmt->close();
$conn->close();
exit;
}
http_response_code(405);
echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan']);