Harden Project 01 public endpoints
This commit is contained in:
@@ -6,8 +6,8 @@ require_once '../../koneksi.php';
|
||||
$result = $conn->query("SELECT id, nama_jalan, status_jalan, geojson, panjang_meter FROM data_jalan ORDER BY id DESC");
|
||||
|
||||
if (!$result) {
|
||||
echo json_encode(['status' => 'error', 'message' => $conn->error]);
|
||||
exit;
|
||||
error_log('Project 01 road read failed: ' . $conn->error);
|
||||
json_error('Gagal memuat data jalan.', 500);
|
||||
}
|
||||
|
||||
$data = [];
|
||||
@@ -21,4 +21,4 @@ echo json_encode([
|
||||
'data' => $data
|
||||
]);
|
||||
|
||||
$conn->close();
|
||||
$conn->close();
|
||||
|
||||
+20
-19
@@ -1,27 +1,28 @@
|
||||
<?php
|
||||
// api/jalan/hapus.php — Hapus data jalan
|
||||
header('Content-Type: application/json');
|
||||
require_once '../../auth/helper.php';
|
||||
|
||||
require_admin_post();
|
||||
require_once '../../koneksi.php';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Method not allowed']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$id = (int) ($_POST['id'] ?? 0);
|
||||
if (!$id) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'ID tidak valid']);
|
||||
exit;
|
||||
$id = (int)($_POST['id'] ?? 0);
|
||||
if ($id <= 0) {
|
||||
json_error('ID tidak valid.', 400);
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare("DELETE FROM data_jalan WHERE id = ?");
|
||||
$stmt->bind_param('i', $id);
|
||||
|
||||
if ($stmt->execute() && $stmt->affected_rows > 0) {
|
||||
echo json_encode(['status' => 'success', 'message' => 'Data jalan berhasil dihapus']);
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Data tidak ditemukan atau gagal dihapus']);
|
||||
if (!$stmt) {
|
||||
error_log('Project 01 road delete prepare failed: ' . $conn->error);
|
||||
json_error('Gagal menghapus data jalan.', 500);
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
$conn->close();
|
||||
$stmt->bind_param('i', $id);
|
||||
if (!$stmt->execute()) {
|
||||
error_log('Project 01 road delete failed: ' . $stmt->error);
|
||||
json_error('Gagal menghapus data jalan.', 500);
|
||||
}
|
||||
|
||||
if ($stmt->affected_rows <= 0) {
|
||||
json_error('Data jalan tidak ditemukan.', 404);
|
||||
}
|
||||
|
||||
json_success(['message' => 'Data jalan berhasil dihapus']);
|
||||
|
||||
+30
-47
@@ -1,56 +1,39 @@
|
||||
<?php
|
||||
// api/jalan/simpan.php — Simpan data jalan baru
|
||||
header('Content-Type: application/json');
|
||||
require_once '../../auth/helper.php';
|
||||
require_once '../../includes/validation.php';
|
||||
|
||||
require_admin_post();
|
||||
require_once '../../koneksi.php';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Method not allowed']);
|
||||
exit;
|
||||
}
|
||||
$nama = clean_string($_POST['nama_jalan'] ?? '', 150);
|
||||
$statusJalan = validate_enum($_POST['status_jalan'] ?? '', ['Nasional', 'Provinsi', 'Kabupaten']);
|
||||
$geojsonRaw = trim($_POST['geojson'] ?? '');
|
||||
$decoded = decode_geojson($geojsonRaw);
|
||||
$panjang = max(0, (float)($_POST['panjang_meter'] ?? 0));
|
||||
|
||||
$nama = trim($_POST['nama_jalan'] ?? '');
|
||||
$status_jalan = trim($_POST['status_jalan'] ?? '');
|
||||
$geojson = trim($_POST['geojson'] ?? '');
|
||||
$panjang = (float) ($_POST['panjang_meter'] ?? 0);
|
||||
|
||||
$allowed_status = ['Nasional', 'Provinsi', 'Kabupaten'];
|
||||
|
||||
if (!$nama) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Nama jalan tidak boleh kosong']);
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!in_array($status_jalan, $allowed_status)) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Status jalan tidak valid']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Validasi JSON
|
||||
json_decode($geojson);
|
||||
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Data geometri tidak valid']);
|
||||
exit;
|
||||
if ($nama === '' || $statusJalan === null || $decoded === null || !validate_geojson_geometry($decoded, ['LineString'])) {
|
||||
json_error('Data jalan tidak valid.', 400);
|
||||
}
|
||||
|
||||
$stmt = $conn->prepare("INSERT INTO data_jalan (nama_jalan, status_jalan, geojson, panjang_meter) VALUES (?, ?, ?, ?)");
|
||||
$stmt->bind_param('sssd', $nama, $status_jalan, $geojson, $panjang);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
$id = $conn->insert_id;
|
||||
echo json_encode([
|
||||
'status' => 'success',
|
||||
'message' => 'Data jalan berhasil disimpan',
|
||||
'data' => [
|
||||
'id' => $id,
|
||||
'nama_jalan' => $nama,
|
||||
'status_jalan' => $status_jalan,
|
||||
'geojson' => $geojson,
|
||||
'panjang_meter' => $panjang
|
||||
]
|
||||
]);
|
||||
} else {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan: ' . $stmt->error]);
|
||||
if (!$stmt) {
|
||||
error_log('Project 01 road insert prepare failed: ' . $conn->error);
|
||||
json_error('Gagal menyimpan data jalan.', 500);
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
$conn->close();
|
||||
$stmt->bind_param('sssd', $nama, $statusJalan, $geojsonRaw, $panjang);
|
||||
if (!$stmt->execute()) {
|
||||
error_log('Project 01 road insert failed: ' . $stmt->error);
|
||||
json_error('Gagal menyimpan data jalan.', 500);
|
||||
}
|
||||
|
||||
json_success([
|
||||
'message' => 'Data jalan berhasil disimpan',
|
||||
'data' => [
|
||||
'id' => $conn->insert_id,
|
||||
'nama_jalan' => $nama,
|
||||
'status_jalan' => $statusJalan,
|
||||
'geojson' => $geojsonRaw,
|
||||
'panjang_meter' => $panjang,
|
||||
],
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user