First commit
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
// ============================================================
|
||||
// API DATA JALAN (Polyline/LineString)
|
||||
// File: api_jalan.php
|
||||
// Method: GET, POST, PUT, DELETE
|
||||
// ============================================================
|
||||
|
||||
require_once 'config.php';
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
$id = isset($_GET['id']) ? (int)$_GET['id'] : null;
|
||||
|
||||
// ---- GET: Ambil semua data atau satu data ----
|
||||
if ($method === 'GET') {
|
||||
$db = getDB();
|
||||
|
||||
if ($id) {
|
||||
// Get single
|
||||
$stmt = $db->prepare("SELECT id, nama_jalan, status, panjang_m, geojson FROM data_jalan WHERE id = ?");
|
||||
$stmt->bind_param('i', $id);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result()->fetch_assoc();
|
||||
if ($result) {
|
||||
$result['geojson'] = json_decode($result['geojson']); // decode jadi object
|
||||
echo json_encode($result);
|
||||
} else {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Data tidak ditemukan']);
|
||||
}
|
||||
} else {
|
||||
// Get all
|
||||
$result = $db->query("SELECT id, nama_jalan, status, panjang_m, geojson FROM data_jalan ORDER BY id DESC");
|
||||
$rows = [];
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$row['geojson'] = json_decode($row['geojson']);
|
||||
$rows[] = $row;
|
||||
}
|
||||
echo json_encode($rows);
|
||||
}
|
||||
$db->close();
|
||||
exit();
|
||||
}
|
||||
|
||||
// ---- POST: Tambah data jalan baru ----
|
||||
if ($method === 'POST') {
|
||||
$input = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
if (empty($input['nama_jalan']) || empty($input['status']) || empty($input['geojson'])) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'Data tidak lengkap. Field wajib: nama_jalan, status, geojson']);
|
||||
exit();
|
||||
}
|
||||
|
||||
$nama_jalan = trim($input['nama_jalan']);
|
||||
$status = $input['status'];
|
||||
$panjang_m = isset($input['panjang_m']) ? (float)$input['panjang_m'] : 0;
|
||||
$geojson = json_encode($input['geojson']); // simpan sebagai string JSON
|
||||
|
||||
// Validasi status
|
||||
$valid_status = ['Nasional', 'Provinsi', 'Kabupaten'];
|
||||
if (!in_array($status, $valid_status)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'Status tidak valid. Pilih: Nasional, Provinsi, atau Kabupaten']);
|
||||
exit();
|
||||
}
|
||||
|
||||
$db = getDB();
|
||||
$stmt = $db->prepare("INSERT INTO data_jalan (nama_jalan, status, panjang_m, geojson) VALUES (?, ?, ?, ?)");
|
||||
$stmt->bind_param('ssds', $nama_jalan, $status, $panjang_m, $geojson);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
$new_id = $db->insert_id;
|
||||
http_response_code(201);
|
||||
echo json_encode([
|
||||
'message' => 'Data jalan berhasil disimpan',
|
||||
'id' => $new_id,
|
||||
'nama_jalan'=> $nama_jalan,
|
||||
'status' => $status,
|
||||
'panjang_m' => $panjang_m
|
||||
]);
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Gagal menyimpan data: ' . $stmt->error]);
|
||||
}
|
||||
$db->close();
|
||||
exit();
|
||||
}
|
||||
|
||||
// ---- PUT: Update data jalan ----
|
||||
if ($method === 'PUT') {
|
||||
if (!$id) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'ID diperlukan untuk update']);
|
||||
exit();
|
||||
}
|
||||
|
||||
$input = json_decode(file_get_contents('php://input'), true);
|
||||
$db = getDB();
|
||||
|
||||
// Cek apakah hanya update geometri (saat edit di peta) atau full update
|
||||
if (isset($input['geojson']) && !isset($input['nama_jalan'])) {
|
||||
// Update hanya geometri & panjang (drag/edit di peta)
|
||||
$geojson = json_encode($input['geojson']);
|
||||
$panjang_m = isset($input['panjang_m']) ? (float)$input['panjang_m'] : 0;
|
||||
$stmt = $db->prepare("UPDATE data_jalan SET geojson = ?, panjang_m = ? WHERE id = ?");
|
||||
$stmt->bind_param('sdi', $geojson, $panjang_m, $id);
|
||||
} else {
|
||||
// Full update (edit atribut + geometri)
|
||||
$nama_jalan = trim($input['nama_jalan'] ?? '');
|
||||
$status = $input['status'] ?? '';
|
||||
$panjang_m = isset($input['panjang_m']) ? (float)$input['panjang_m'] : 0;
|
||||
$geojson = json_encode($input['geojson'] ?? []);
|
||||
|
||||
$valid_status = ['Nasional', 'Provinsi', 'Kabupaten'];
|
||||
if (!in_array($status, $valid_status)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'Status tidak valid']);
|
||||
exit();
|
||||
}
|
||||
|
||||
$stmt = $db->prepare("UPDATE data_jalan SET nama_jalan = ?, status = ?, panjang_m = ?, geojson = ? WHERE id = ?");
|
||||
$stmt->bind_param('ssdsi', $nama_jalan, $status, $panjang_m, $geojson, $id);
|
||||
}
|
||||
|
||||
if ($stmt->execute()) {
|
||||
echo json_encode(['message' => 'Data jalan berhasil diperbarui', 'id' => $id]);
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Gagal memperbarui data: ' . $stmt->error]);
|
||||
}
|
||||
$db->close();
|
||||
exit();
|
||||
}
|
||||
|
||||
// ---- DELETE: Hapus data jalan ----
|
||||
if ($method === 'DELETE') {
|
||||
if (!$id) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'ID diperlukan untuk hapus']);
|
||||
exit();
|
||||
}
|
||||
|
||||
$db = getDB();
|
||||
$stmt = $db->prepare("DELETE FROM data_jalan WHERE id = ?");
|
||||
$stmt->bind_param('i', $id);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
if ($stmt->affected_rows > 0) {
|
||||
echo json_encode(['message' => 'Data jalan berhasil dihapus', 'id' => $id]);
|
||||
} else {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Data tidak ditemukan']);
|
||||
}
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Gagal menghapus data: ' . $stmt->error]);
|
||||
}
|
||||
$db->close();
|
||||
exit();
|
||||
}
|
||||
|
||||
// Method tidak dikenal
|
||||
http_response_code(405);
|
||||
echo json_encode(['error' => 'Method tidak diizinkan']);
|
||||
?>
|
||||
Reference in New Issue
Block a user