initial commit
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
// api/data_jalan.php
|
||||
require_once __DIR__ . '/config/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);
|
||||
}
|
||||
Reference in New Issue
Block a user