112 lines
3.9 KiB
PHP
112 lines
3.9 KiB
PHP
<?php
|
|
// api/data_parsil.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_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 parsil');
|
|
sendSuccess(['id' => $db->insert_id], 'Data parsil 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 parsil');
|
|
sendSuccess(null, 'Data parsil 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 parsil');
|
|
$stmt->affected_rows > 0
|
|
? sendSuccess(null, 'Data parsil berhasil dihapus')
|
|
: sendError('Data tidak ditemukan', 404);
|
|
break;
|
|
|
|
default:
|
|
sendError('Method tidak diizinkan', 405);
|
|
} |