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

112 lines
3.9 KiB
PHP

<?php
// api/data_persil.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_pemilik, no_sertifikat, jenis_hak,
luas_m2, keterangan,
CAST(geojson AS CHAR) AS geojson,
created_at
FROM data_parsil WHERE id = ?"
);
$stmt->bind_param('i', $id);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
if (!$row) sendError('Data tidak ditemukan', 404);
$row['geojson'] = json_decode($row['geojson']);
$row['luas_m2'] = (float)$row['luas_m2'];
sendSuccess($row);
} else {
$rows = [];
$res = $db->query(
"SELECT id, nama_pemilik, no_sertifikat, jenis_hak,
luas_m2, keterangan,
CAST(geojson AS CHAR) AS geojson,
created_at
FROM data_parsil ORDER BY created_at DESC"
);
while ($r = $res->fetch_assoc()) {
$r['geojson'] = json_decode($r['geojson']);
$r['luas_m2'] = (float)$r['luas_m2'];
$rows[] = $r;
}
sendSuccess($rows);
}
break;
case 'POST':
$body = getBody();
foreach (['nama_pemilik','jenis_hak','geojson','luas_m2'] as $f) {
if (!isset($body[$f])) sendError("Field '$f' wajib diisi");
}
$geo = is_array($body['geojson'])
? $body['geojson']
: json_decode($body['geojson'], true);
if (!$geo || $geo['type'] !== 'Polygon') {
sendError('GeoJSON harus bertipe Polygon');
}
$geoStr = json_encode($geo);
$luas = (float)$body['luas_m2'];
$stmt = $db->prepare(
"INSERT INTO data_parsil
(nama_pemilik, no_sertifikat, jenis_hak, luas_m2, keterangan, geojson)
VALUES (?, ?, ?, ?, ?, ?)"
);
$stmt->bind_param('sssdss',
$body['nama_pemilik'], $body['no_sertifikat'],
$body['jenis_hak'], $luas,
$body['keterangan'], $geoStr
);
executeOrFail($stmt, 'Gagal menyimpan data persil');
sendSuccess(['id' => $db->insert_id], 'Data persil 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);
$luas = (float)$body['luas_m2'];
$stmt = $db->prepare(
"UPDATE data_parsil
SET nama_pemilik=?, no_sertifikat=?, jenis_hak=?,
luas_m2=?, keterangan=?, geojson=?
WHERE id=?"
);
$stmt->bind_param('sssdssi',
$body['nama_pemilik'], $body['no_sertifikat'],
$body['jenis_hak'], $luas,
$body['keterangan'], $geoStr, $id
);
executeOrFail($stmt, 'Gagal memperbarui data persil');
sendSuccess(null, 'Data persil berhasil diperbarui');
break;
case 'DELETE':
if ($id <= 0) sendError('ID wajib disertakan');
$stmt = $db->prepare("DELETE FROM data_parsil WHERE id=?");
$stmt->bind_param('i', $id);
executeOrFail($stmt, 'Gagal menghapus data persil');
$stmt->affected_rows > 0
? sendSuccess(null, 'Data persil berhasil dihapus')
: sendError('Data tidak ditemukan', 404);
break;
default:
sendError('Method tidak diizinkan', 405);
}