Files
2026-06-09 19:02:22 +07:00

193 lines
8.2 KiB
PHP

<?php
// ============================================================
// API DATA KEMISKINAN (Point / Marker)
// File: api_kemiskinan.php
// Fields: nama_kk, jumlah_kk, alamat, latitude, longitude
// ============================================================
require_once 'config.php';
$method = $_SERVER['REQUEST_METHOD'];
$id = isset($_GET['id']) ? (int)$_GET['id'] : null;
// ---- GET: Ambil semua data atau satu data ----
if ($method === 'GET') {
$db = getDB();
if ($id) {
$stmt = $db->prepare("SELECT id, nik, nama_kk, jumlah_kk, alamat, latitude, longitude, status_bantuan, kategori, skor_penghasilan, skor_rumah, skor_makan, tanggal_lahir, pendidikan, riwayat_penyakit FROM data_kemiskinan WHERE id = ?");
$stmt->bind_param('i', $id);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();
if ($result) {
// Cast tipe
$result['jumlah_kk'] = (int)$result['jumlah_kk'];
$result['latitude'] = (float)$result['latitude'];
$result['longitude'] = (float)$result['longitude'];
echo json_encode($result);
} else {
http_response_code(404);
echo json_encode(['error' => 'Data kemiskinan tidak ditemukan']);
}
} else {
$result = $db->query("SELECT id, nik, nama_kk, jumlah_kk, alamat, latitude, longitude, status_bantuan, kategori, skor_penghasilan, skor_rumah, skor_makan, tanggal_lahir, pendidikan, riwayat_penyakit FROM data_kemiskinan ORDER BY id DESC");
$rows = [];
while ($row = $result->fetch_assoc()) {
$row['jumlah_kk'] = (int)$row['jumlah_kk'];
$row['latitude'] = (float)$row['latitude'];
$row['longitude'] = (float)$row['longitude'];
$rows[] = $row;
}
echo json_encode($rows);
}
$db->close();
exit();
}
// ---- POST: Tambah data kemiskinan baru ----
if ($method === 'POST') {
$input = json_decode(file_get_contents('php://input'), true);
if (empty($input['nama_kk']) || !isset($input['jumlah_kk']) || empty($input['alamat'])
|| !isset($input['latitude']) || !isset($input['longitude'])) {
http_response_code(400);
echo json_encode(['error' => 'Data tidak lengkap. Field wajib: nama_kk, jumlah_kk, alamat, latitude, longitude']);
exit();
}
$nama_kk = trim($input['nama_kk']);
$nik = trim($input['nik'] ?? '');
$jumlah_kk = max(1, (int)$input['jumlah_kk']);
$alamat = trim($input['alamat']);
$latitude = (float)$input['latitude'];
$longitude = (float)$input['longitude'];
$tanggal_lahir = isset($input['tanggal_lahir']) && $input['tanggal_lahir'] !== '' ? $input['tanggal_lahir'] : null;
$pendidikan = isset($input['pendidikan']) ? trim($input['pendidikan']) : null;
$riwayat_penyakit = isset($input['riwayat_penyakit']) ? trim($input['riwayat_penyakit']) : null;
$kategori = isset($input['kategori']) ? trim($input['kategori']) : 'Miskin';
$skor_penghasilan = isset($input['skor_penghasilan']) ? (int)$input['skor_penghasilan'] : 0;
$skor_rumah = isset($input['skor_rumah']) ? (int)$input['skor_rumah'] : 0;
$skor_makan = isset($input['skor_makan']) ? (int)$input['skor_makan'] : 0;
$db = getDB();
$stmt = $db->prepare("INSERT INTO data_kemiskinan (nama_kk, nik, jumlah_kk, alamat, latitude, longitude, kategori, skor_penghasilan, skor_rumah, skor_makan, tanggal_lahir, pendidikan, riwayat_penyakit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param('ssisddsiiisss', $nama_kk, $nik, $jumlah_kk, $alamat, $latitude, $longitude, $kategori, $skor_penghasilan, $skor_rumah, $skor_makan, $tanggal_lahir, $pendidikan, $riwayat_penyakit);
if ($stmt->execute()) {
$new_id = $db->insert_id;
http_response_code(201);
echo json_encode([
'message' => 'Data kemiskinan berhasil disimpan',
'id' => $new_id,
'nama_kk' => $nama_kk,
'nik' => $nik,
'jumlah_kk' => $jumlah_kk,
'alamat' => $alamat,
'latitude' => $latitude,
'longitude' => $longitude,
'status_bantuan' => 'Belum',
'kategori' => $kategori,
'skor_penghasilan' => $skor_penghasilan,
'skor_rumah' => $skor_rumah,
'skor_makan' => $skor_makan,
'tanggal_lahir' => $tanggal_lahir,
'pendidikan' => $pendidikan,
'riwayat_penyakit' => $riwayat_penyakit
]);
} else {
http_response_code(500);
echo json_encode(['error' => 'Gagal menyimpan data: ' . $stmt->error]);
}
$db->close();
exit();
}
// ---- PUT: Update data kemiskinan ----
if ($method === 'PUT') {
if (!$id) {
http_response_code(400);
echo json_encode(['error' => 'ID diperlukan untuk update']);
exit();
}
$input = json_decode(file_get_contents('php://input'), true);
$db = getDB();
// Update posisi saja (drag marker)
if (isset($input['latitude']) && isset($input['longitude']) && !isset($input['nama_kk'])) {
$latitude = (float)$input['latitude'];
$longitude = (float)$input['longitude'];
$stmt = $db->prepare("UPDATE data_kemiskinan SET latitude = ?, longitude = ? WHERE id = ?");
$stmt->bind_param('ddi', $latitude, $longitude, $id);
} else {
// Full update
$nama_kk = trim($input['nama_kk'] ?? '');
$nik = trim($input['nik'] ?? '');
$jumlah_kk = max(1, (int)($input['jumlah_kk'] ?? 1));
$alamat = trim($input['alamat'] ?? '');
$latitude = (float)($input['latitude'] ?? 0);
$longitude = (float)($input['longitude'] ?? 0);
$tanggal_lahir = isset($input['tanggal_lahir']) && $input['tanggal_lahir'] !== '' ? $input['tanggal_lahir'] : null;
$pendidikan = isset($input['pendidikan']) ? trim($input['pendidikan']) : null;
$riwayat_penyakit = isset($input['riwayat_penyakit']) ? trim($input['riwayat_penyakit']) : null;
$kategori = isset($input['kategori']) ? trim($input['kategori']) : 'Miskin';
$skor_penghasilan = isset($input['skor_penghasilan']) ? (int)$input['skor_penghasilan'] : 0;
$skor_rumah = isset($input['skor_rumah']) ? (int)$input['skor_rumah'] : 0;
$skor_makan = isset($input['skor_makan']) ? (int)$input['skor_makan'] : 0;
if (empty($nama_kk) || empty($alamat)) {
http_response_code(400);
echo json_encode(['error' => 'nama_kk dan alamat wajib diisi']);
exit();
}
$stmt = $db->prepare("UPDATE data_kemiskinan SET nama_kk = ?, nik = ?, jumlah_kk = ?, alamat = ?, latitude = ?, longitude = ?, kategori = ?, skor_penghasilan = ?, skor_rumah = ?, skor_makan = ?, tanggal_lahir = ?, pendidikan = ?, riwayat_penyakit = ? WHERE id = ?");
$stmt->bind_param('ssisddsiiisssi', $nama_kk, $nik, $jumlah_kk, $alamat, $latitude, $longitude, $kategori, $skor_penghasilan, $skor_rumah, $skor_makan, $tanggal_lahir, $pendidikan, $riwayat_penyakit, $id);
}
if ($stmt->execute()) {
echo json_encode(['message' => 'Data kemiskinan berhasil diperbarui', 'id' => $id]);
} else {
http_response_code(500);
echo json_encode(['error' => 'Gagal memperbarui data: ' . $stmt->error]);
}
$db->close();
exit();
}
// ---- DELETE: Hapus data kemiskinan ----
if ($method === 'DELETE') {
if (!$id) {
http_response_code(400);
echo json_encode(['error' => 'ID diperlukan untuk hapus']);
exit();
}
$db = getDB();
$stmt = $db->prepare("DELETE FROM data_kemiskinan WHERE id = ?");
$stmt->bind_param('i', $id);
if ($stmt->execute()) {
if ($stmt->affected_rows > 0) {
echo json_encode(['message' => 'Data kemiskinan berhasil dihapus', 'id' => $id]);
} else {
http_response_code(404);
echo json_encode(['error' => 'Data tidak ditemukan']);
}
} else {
http_response_code(500);
echo json_encode(['error' => 'Gagal menghapus data: ' . $stmt->error]);
}
$db->close();
exit();
}
// Method tidak dikenal
http_response_code(405);
echo json_encode(['error' => 'Method tidak diizinkan']);
?>