feat(sosial-dashboard): tambah API ringkasan pendidikan & beasiswa + CRUD event budaya - bump 0.1.55
- API GET /api/pendidikan/ringkasan/stats: siswa per jenjang, jumlah lembaga & pengajar - API GET /api/pendidikan/beasiswa/ringkasan/stats: jumlah penerima, dana, tahun ajaran - Schema + migration: model EventBudaya (nama, tanggal, lokasi, deskripsi) - API CRUD /api/desa/eventbudaya: create, find-many, findUnique, updt, del - State admin: eventBudaya.ts (valtio proxy, create/findMany/edit/delete) - Admin CMS: /admin/desa/event-budaya (list, create, edit) - Navbar: tambah entry Desa_9 Event Budaya di semua role - Seeder: 8 event budaya Bali untuk Desa Darmasaba Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
46
src/app/api/[[...slugs]]/_lib/pendidikan/ringkasan/stats.ts
Normal file
46
src/app/api/[[...slugs]]/_lib/pendidikan/ringkasan/stats.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
type PerJenjang = { nama: string; jumlahSiswa: number };
|
||||
|
||||
type StatsResult = {
|
||||
perJenjang: PerJenjang[];
|
||||
jumlahLembaga: number;
|
||||
jumlahPengajar: number;
|
||||
};
|
||||
|
||||
export default async function pendidikanRingkasanStats(): Promise<{
|
||||
success: boolean;
|
||||
data?: StatsResult;
|
||||
message?: string;
|
||||
}> {
|
||||
try {
|
||||
const [jenjangList, jumlahLembaga, jumlahPengajar] = await Promise.all([
|
||||
prisma.jenjangPendidikan.findMany({
|
||||
where: { isActive: true },
|
||||
include: {
|
||||
lembagas: {
|
||||
where: { isActive: true },
|
||||
include: {
|
||||
_count: { select: { siswa: { where: { isActive: true } } } },
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
prisma.lembaga.count({ where: { isActive: true } }),
|
||||
prisma.pengajar.count({ where: { isActive: true } }),
|
||||
]);
|
||||
|
||||
const perJenjang = jenjangList.map((j) => ({
|
||||
nama: j.nama,
|
||||
jumlahSiswa: j.lembagas.reduce((acc, l) => acc + l._count.siswa, 0),
|
||||
}));
|
||||
|
||||
return {
|
||||
success: true,
|
||||
data: { perJenjang, jumlahLembaga, jumlahPengajar },
|
||||
};
|
||||
} catch (e) {
|
||||
console.error("pendidikanRingkasanStats error:", e);
|
||||
return { success: false, message: "Gagal menghitung statistik pendidikan" };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user