query( "SELECT id, nama_kerusakan, tingkat_kerusakan, deskripsi, latitude, longitude, created_at, updated_at FROM kerusakan_jalan ORDER BY created_at DESC" ); $data = []; while ($row = $res->fetch_assoc()) { $row['id'] = (int) $row['id']; $row['latitude'] = (float) $row['latitude']; $row['longitude'] = (float) $row['longitude']; $data[] = $row; } echo json_encode(['status' => 'success', 'data' => $data]); $conn->close(); exit; } // ── POST: Tambah titik kerusakan baru ───────────────────────── if ($method === 'POST') { $body = json_decode(file_get_contents('php://input'), true); $nama = trim($body['nama_kerusakan'] ?? ''); $tingkat = $body['tingkat_kerusakan'] ?? ''; $deskripsi = trim($body['deskripsi'] ?? ''); $lat = isset($body['latitude']) ? (float) $body['latitude'] : null; $lng = isset($body['longitude']) ? (float) $body['longitude'] : null; // Validasi tingkat kerusakan $allowedTingkat = ['Rusak Berat', 'Rusak Sedang', 'Rusak Ringan']; if (!in_array($tingkat, $allowedTingkat)) { $tingkat = 'Rusak Sedang'; } if (!$nama || $lat === null || $lng === null) { http_response_code(400); echo json_encode(['status' => 'error', 'message' => 'Nama dan koordinat wajib diisi']); exit; } $conn = getConnection(); $stmt = $conn->prepare( "INSERT INTO kerusakan_jalan (nama_kerusakan, tingkat_kerusakan, deskripsi, latitude, longitude) VALUES (?, ?, ?, ?, ?)" ); $stmt->bind_param('sssdd', $nama, $tingkat, $deskripsi, $lat, $lng); if ($stmt->execute()) { echo json_encode([ 'status' => 'success', 'message' => 'Titik kerusakan 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 titik kerusakan ─────────────────────────────── if ($method === 'PUT' && $id) { $body = json_decode(file_get_contents('php://input'), true); $nama = trim($body['nama_kerusakan'] ?? ''); $tingkat = $body['tingkat_kerusakan'] ?? ''; $deskripsi = trim($body['deskripsi'] ?? ''); $lat = isset($body['latitude']) ? (float) $body['latitude'] : null; $lng = isset($body['longitude']) ? (float) $body['longitude'] : null; $allowedTingkat = ['Rusak Berat', 'Rusak Sedang', 'Rusak Ringan']; if (!in_array($tingkat, $allowedTingkat)) { $tingkat = 'Rusak Sedang'; } if (!$nama || $lat === null || $lng === null) { http_response_code(400); echo json_encode(['status' => 'error', 'message' => 'Data tidak lengkap']); exit; } $conn = getConnection(); $stmt = $conn->prepare( "UPDATE kerusakan_jalan SET nama_kerusakan=?, tingkat_kerusakan=?, deskripsi=?, latitude=?, longitude=? WHERE id=?" ); $stmt->bind_param('sssddi', $nama, $tingkat, $deskripsi, $lat, $lng, $id); if ($stmt->execute()) { echo json_encode(['status' => 'success', 'message' => 'Titik kerusakan berhasil diperbarui']); } else { http_response_code(500); echo json_encode(['status' => 'error', 'message' => $stmt->error]); } $stmt->close(); $conn->close(); exit; } // ── DELETE: Hapus titik kerusakan ───────────────────────────── if ($method === 'DELETE' && $id) { $conn = getConnection(); $stmt = $conn->prepare("DELETE FROM kerusakan_jalan WHERE id=?"); $stmt->bind_param('i', $id); if ($stmt->execute()) { echo json_encode(['status' => 'success', 'message' => 'Titik kerusakan 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']);