Files
2026-06-10 19:23:50 +07:00

147 lines
5.3 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_kerusakan.php REST API untuk Titik Kerusakan Jalan
// Endpoint:
// GET api_kerusakan.php → ambil semua titik kerusakan
// POST api_kerusakan.php → tambah titik baru
// PUT api_kerusakan.php?id=N → update titik
// DELETE api_kerusakan.php?id=N → hapus titik
// ============================================================
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: Ambil semua titik kerusakan ──────────────────────────
if ($method === 'GET') {
$conn = getConnection();
$res = $conn->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']);