0) { // Detail satu rumah ibadah $stmt = $db->prepare(" SELECT ri.id, ri.nama, ri.jenis, ri.alamat, ri.no_wa, ri.latitude, ri.longitude, ri.radius_meter, ri.created_at, u.id AS user_id, u.username, u.password_plain, u.created_at AS akun_dibuat, (SELECT COUNT(*) FROM penduduk_miskin pm WHERE pm.rumah_ibadah_id = ri.id AND pm.status_proximity = 'dalam_radius') AS pm_dalam_radius, (SELECT COUNT(*) FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id) AS total_penyaluran, (SELECT COUNT(*) FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id AND lb.tipe_bantuan = 'Pemberdayaan') AS bantuan_pemberdayaan, (SELECT COUNT(*) FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id AND lb.tipe_bantuan = 'Konsumtif') AS bantuan_konsumtif, (SELECT IFNULL(SUM(lb.nilai_bantuan), 0) FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id) AS total_nilai_bantuan, (SELECT COUNT(DISTINCT lb.penduduk_miskin_id) FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id) AS jumlah_penerima_unik, (SELECT lb.tanggal_bantuan FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id ORDER BY lb.tanggal_bantuan DESC LIMIT 1) AS tanggal_bantuan_terakhir FROM rumah_ibadah ri LEFT JOIN users u ON u.rumah_ibadah_id = ri.id WHERE ri.id = ? "); $stmt->bind_param('i', $id); $stmt->execute(); $row = $stmt->get_result()->fetch_assoc(); if (!$row) sendError('Data tidak ditemukan', 404); // Cast types $row['latitude'] = (float)$row['latitude']; $row['longitude'] = (float)$row['longitude']; $row['radius_meter'] = (int)$row['radius_meter']; $row['pm_dalam_radius'] = (int)$row['pm_dalam_radius']; $row['total_penyaluran'] = (int)$row['total_penyaluran']; $row['bantuan_pemberdayaan'] = (int)$row['bantuan_pemberdayaan']; $row['bantuan_konsumtif'] = (int)$row['bantuan_konsumtif']; $row['total_nilai_bantuan'] = (float)$row['total_nilai_bantuan']; $row['jumlah_penerima_unik'] = (int)$row['jumlah_penerima_unik']; // password_plain: null if no account if ($row['password_plain'] === null) $row['password_plain'] = null; // Ambil 5 riwayat bantuan terbaru $stmtLog = $db->prepare(" SELECT lb.tipe_bantuan, lb.sub_kategori, lb.tanggal_bantuan, lb.nilai_bantuan, pm.nama AS nama_penerima FROM log_bantuan lb JOIN penduduk_miskin pm ON pm.id = lb.penduduk_miskin_id WHERE lb.rumah_ibadah_id = ? ORDER BY lb.tanggal_bantuan DESC, lb.id DESC LIMIT 10 "); $stmtLog->bind_param('i', $id); $stmtLog->execute(); $logs = []; $resLog = $stmtLog->get_result(); while ($l = $resLog->fetch_assoc()) { $l['nilai_bantuan'] = $l['nilai_bantuan'] ? (float)$l['nilai_bantuan'] : null; $logs[] = $l; } $row['riwayat_bantuan'] = $logs; sendSuccess($row); } else { // Semua rumah ibadah dengan ringkasan statistik $sql = " SELECT ri.id, ri.nama, ri.jenis, ri.alamat, ri.no_wa, ri.latitude, ri.longitude, ri.radius_meter, ri.created_at, u.id AS user_id, u.username, (SELECT COUNT(*) FROM penduduk_miskin pm WHERE pm.rumah_ibadah_id = ri.id AND pm.status_proximity = 'dalam_radius') AS pm_dalam_radius, (SELECT COUNT(*) FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id) AS total_penyaluran, (SELECT IFNULL(SUM(lb.nilai_bantuan), 0) FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id) AS total_nilai_bantuan, (SELECT COUNT(DISTINCT lb.penduduk_miskin_id) FROM log_bantuan lb WHERE lb.rumah_ibadah_id = ri.id) AS jumlah_penerima_unik FROM rumah_ibadah ri LEFT JOIN users u ON u.rumah_ibadah_id = ri.id ORDER BY ri.created_at DESC "; $result = $db->query($sql); $rows = []; while ($r = $result->fetch_assoc()) { $r['latitude'] = (float)$r['latitude']; $r['longitude'] = (float)$r['longitude']; $r['radius_meter'] = (int)$r['radius_meter']; $r['pm_dalam_radius'] = (int)$r['pm_dalam_radius']; $r['total_penyaluran'] = (int)$r['total_penyaluran']; $r['total_nilai_bantuan'] = (float)$r['total_nilai_bantuan']; $r['jumlah_penerima_unik'] = (int)$r['jumlah_penerima_unik']; $rows[] = $r; } sendSuccess($rows); } break; // DELETE: Hapus akun user rumah ibadah (tidak hapus rumah ibadahnya) case 'DELETE': if ($id <= 0) sendError('ID wajib disertakan'); $stmt = $db->prepare("DELETE FROM users WHERE rumah_ibadah_id = ?"); $stmt->bind_param('i', $id); if ($stmt->execute()) { sendSuccess(null, $stmt->affected_rows > 0 ? 'Akun berhasil dihapus' : 'Tidak ada akun untuk dihapus'); } else { sendError('Gagal menghapus akun'); } break; default: sendError('Method tidak diizinkan', 405); }