Files
Abimanyu Ridho d9a01b7b68 Update struktur
2026-06-13 14:56:15 +07:00

112 lines
3.9 KiB
PHP

<?php
// api/data_jalan.php
require_once dirname(__DIR__, 2) . '/database.php';
require_once __DIR__ . '/helpers/response.php';
setCORSHeaders();
$db = getDB();
$method = getMethod();
requireWriteAuth($method);
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
switch ($method) {
case 'GET':
if ($id > 0) {
$stmt = $db->prepare(
"SELECT id, nama_jalan, status_jalan,
panjang_meter, keterangan,
CAST(geojson AS CHAR) AS geojson,
created_at
FROM data_jalan WHERE id = ?"
);
$stmt->bind_param('i', $id);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
if (!$row) sendError('Data tidak ditemukan', 404);
// Parse geojson string menjadi object
$row['geojson'] = json_decode($row['geojson']);
$row['panjang_meter'] = (float)$row['panjang_meter'];
sendSuccess($row);
} else {
$rows = [];
$res = $db->query(
"SELECT id, nama_jalan, status_jalan,
panjang_meter, keterangan,
CAST(geojson AS CHAR) AS geojson,
created_at
FROM data_jalan ORDER BY created_at DESC"
);
while ($r = $res->fetch_assoc()) {
$r['geojson'] = json_decode($r['geojson']);
$r['panjang_meter'] = (float)$r['panjang_meter'];
$rows[] = $r;
}
sendSuccess($rows);
}
break;
case 'POST':
$body = getBody();
foreach (['nama_jalan','status_jalan','geojson','panjang_meter'] as $f) {
if (!isset($body[$f])) sendError("Field '$f' wajib diisi");
}
// Validasi GeoJSON LineString
$geo = is_array($body['geojson'])
? $body['geojson']
: json_decode($body['geojson'], true);
if (!$geo || $geo['type'] !== 'LineString') {
sendError('GeoJSON harus bertipe LineString');
}
$geoStr = json_encode($geo);
$panjang = (float)$body['panjang_meter'];
$stmt = $db->prepare(
"INSERT INTO data_jalan
(nama_jalan, status_jalan, panjang_meter, keterangan, geojson)
VALUES (?, ?, ?, ?, ?)"
);
$stmt->bind_param('ssdss',
$body['nama_jalan'], $body['status_jalan'],
$panjang, $body['keterangan'], $geoStr
);
executeOrFail($stmt, 'Gagal menyimpan data jalan');
sendSuccess(['id' => $db->insert_id], 'Data jalan berhasil disimpan', 201);
break;
case 'PUT':
if ($id <= 0) sendError('ID wajib disertakan');
$body = getBody();
$geo = is_array($body['geojson'])
? $body['geojson']
: json_decode($body['geojson'], true);
$geoStr = json_encode($geo);
$panjang = (float)$body['panjang_meter'];
$stmt = $db->prepare(
"UPDATE data_jalan
SET nama_jalan=?, status_jalan=?,
panjang_meter=?, keterangan=?, geojson=?
WHERE id=?"
);
$stmt->bind_param('ssdssi',
$body['nama_jalan'], $body['status_jalan'],
$panjang, $body['keterangan'], $geoStr, $id
);
executeOrFail($stmt, 'Gagal memperbarui data jalan');
sendSuccess(null, 'Data jalan berhasil diperbarui');
break;
case 'DELETE':
if ($id <= 0) sendError('ID wajib disertakan');
$stmt = $db->prepare("DELETE FROM data_jalan WHERE id=?");
$stmt->bind_param('i', $id);
executeOrFail($stmt, 'Gagal menghapus data jalan');
$stmt->affected_rows > 0
? sendSuccess(null, 'Data jalan berhasil dihapus')
: sendError('Data tidak ditemukan', 404);
break;
default:
sendError('Method tidak diizinkan', 405);
}