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']); ?>