merge: fix(pendidikan) perbaiki jumlahPengajar & jumlahSiswa per jenjang di stats

This commit is contained in:
2026-05-07 12:34:30 +08:00
4 changed files with 18 additions and 13 deletions

View File

@@ -1401,6 +1401,15 @@ enum StatusLaporan {
Gagal Gagal
} }
model Pelapor {
id String @id @default(cuid())
nama String
alamat String
nomorTelepon String
image FileStorage @relation(fields: [imageId], references: [id])
imageId String
}
// ========================================= CCTV KEAMANAN ========================================= // // ========================================= CCTV KEAMANAN ========================================= //
enum StatusCctv { enum StatusCctv {
Online Online
@@ -1422,15 +1431,6 @@ model CctvKeamanan {
isActive Boolean @default(true) isActive Boolean @default(true)
} }
model Pelapor {
id String @id @default(cuid())
nama String
alamat String
nomorTelepon String
image FileStorage @relation(fields: [imageId], references: [id])
imageId String
}
// ========================================= TIPS KEAMANAN ========================================= // // ========================================= TIPS KEAMANAN ========================================= //
model MenuTipsKeamanan { model MenuTipsKeamanan {
id String @id @default(cuid()) id String @id @default(cuid())

View File

@@ -1,6 +1,6 @@
import { proxy } from "valtio"; import { proxy } from "valtio";
type PerJenjang = { nama: string; jumlahSiswa: number }; type PerJenjang = { nama: string; jumlahSiswa: number; jumlahPengajar: number };
type StatsPendidikan = { type StatsPendidikan = {
perJenjang: PerJenjang[]; perJenjang: PerJenjang[];

View File

@@ -1,6 +1,6 @@
import prisma from "@/lib/prisma"; import prisma from "@/lib/prisma";
type PerJenjang = { nama: string; jumlahSiswa: number }; type PerJenjang = { nama: string; jumlahSiswa: number, jumlahPengajar: number };
type StatsResult = { type StatsResult = {
perJenjang: PerJenjang[]; perJenjang: PerJenjang[];
@@ -21,7 +21,7 @@ export default async function pendidikanRingkasanStats(): Promise<{
lembagas: { lembagas: {
where: { isActive: true }, where: { isActive: true },
include: { include: {
_count: { select: { siswa: { where: { isActive: true } } } }, _count: { select: { siswa: { where: { isActive: true } }, pengajar: { where: { isActive: true } } } },
}, },
}, },
}, },
@@ -33,6 +33,7 @@ export default async function pendidikanRingkasanStats(): Promise<{
const perJenjang = jenjangList.map((j) => ({ const perJenjang = jenjangList.map((j) => ({
nama: j.nama, nama: j.nama,
jumlahSiswa: j.lembagas.reduce((acc, l) => acc + l._count.siswa, 0), jumlahSiswa: j.lembagas.reduce((acc, l) => acc + l._count.siswa, 0),
jumlahPengajar: j.lembagas.reduce((acc, l) => acc + l._count.pengajar, 0),
})); }));
return { return {

View File

@@ -4,3 +4,7 @@
"[Beasiswa] Ubah dataBeasiswa dari static ke dynamic (penerima & dana tersalurkan)","Pindahkan dataBeasiswa dari static array di luar komponen menjadi computed array di dalam Page(). Field 'Penerima Beasiswa' diambil dari statsBeasiswa.data.jumlahPenerima dan 'Dana Tersalurkan' dari statsBeasiswa.data.danaTersalurkan. Fallback '-' bila data belum tersedia.","TASK","MEDIUM","","","0.5","nicoarya20@gmail.com","" "[Beasiswa] Ubah dataBeasiswa dari static ke dynamic (penerima & dana tersalurkan)","Pindahkan dataBeasiswa dari static array di luar komponen menjadi computed array di dalam Page(). Field 'Penerima Beasiswa' diambil dari statsBeasiswa.data.jumlahPenerima dan 'Dana Tersalurkan' dari statsBeasiswa.data.danaTersalurkan. Fallback '-' bila data belum tersedia.","TASK","MEDIUM","","","0.5","nicoarya20@gmail.com",""
"[Beasiswa] Buat fungsi formatDana untuk konversi angka ke format pendek Indonesia","Buat helper function formatDana(value: string | number) di halaman beasiswa-desa/page.tsx. Konversi: >= 1T → XT, >= 1M (miliar) → XM, >= 1Jt → XJt, >= 1Rb → XRb. Desimal 1 angka hanya muncul jika ada sisa (misal 1.5Jt), bilangan bulat tanpa desimal (misal 2Jt).","TASK","MEDIUM","","","0.5","nicoarya20@gmail.com","" "[Beasiswa] Buat fungsi formatDana untuk konversi angka ke format pendek Indonesia","Buat helper function formatDana(value: string | number) di halaman beasiswa-desa/page.tsx. Konversi: >= 1T → XT, >= 1M (miliar) → XM, >= 1Jt → XJt, >= 1Rb → XRb. Desimal 1 angka hanya muncul jika ada sisa (misal 1.5Jt), bilangan bulat tanpa desimal (misal 2Jt).","TASK","MEDIUM","","","0.5","nicoarya20@gmail.com",""
"[Beasiswa] Terapkan formatDana ke field Dana Tersalurkan di dataBeasiswa","Terapkan formatDana(statsBeasiswa.data.danaTersalurkan) pada entry Dana Tersalurkan di array dataBeasiswa agar nilai dari API otomatis diformat ke representasi singkat (Rb/Jt/M/T).","TASK","MEDIUM","","","0.5","nicoarya20@gmail.com","" "[Beasiswa] Terapkan formatDana ke field Dana Tersalurkan di dataBeasiswa","Terapkan formatDana(statsBeasiswa.data.danaTersalurkan) pada entry Dana Tersalurkan di array dataBeasiswa agar nilai dari API otomatis diformat ke representasi singkat (Rb/Jt/M/T).","TASK","MEDIUM","","","0.5","nicoarya20@gmail.com",""
"[Pendidikan] Fix sintaks _count.select di stats.ts — gabungkan siswa & pengajar","Perbaiki sintaks object _count.select di src/app/api/[[...slugs]]/_lib/pendidikan/ringkasan/stats.ts. Field pengajar ditaruh di luar object select (menjadi dua object terpisah), diperbaiki menjadi satu object select dengan dua key: siswa dan pengajar, masing-masing dengan filter where isActive: true.","BUG","HIGH","","","0.5","nicoarya20@gmail.com",""
"[Pendidikan] Tambah jumlahPengajar per jenjang ke query _count dan map perJenjang","Tambah pengajar ke _count.select di query jenjangPendidikan agar jumlah pengajar per jenjang bisa dihitung. Tambah field jumlahPengajar ke hasil map perJenjang menggunakan reduce _count.pengajar dari setiap lembaga.","TASK","HIGH","","","0.5","nicoarya20@gmail.com",""
"[Pendidikan] Update type PerJenjang di stats.ts tambah jumlahPengajar","Tambah field jumlahPengajar: number ke type PerJenjang di src/app/api/[[...slugs]]/_lib/pendidikan/ringkasan/stats.ts agar sesuai dengan data yang dikembalikan oleh map perJenjang.","TASK","MEDIUM","","","0.5","nicoarya20@gmail.com",""
"[Pendidikan] Update type PerJenjang di ringkasan-pendidikan.ts tambah jumlahPengajar","Tambah field jumlahPengajar: number ke type PerJenjang di src/app/admin/(dashboard)/_state/pendidikan/ringkasan-pendidikan.ts agar cocok dengan shape response API stats pendidikan.","TASK","MEDIUM","","","0.5","nicoarya20@gmail.com",""
1 title description kind priority startsAt dueAt estimateHours assigneeEmail tagNames
4 [Beasiswa] Ubah dataBeasiswa dari static ke dynamic (penerima & dana tersalurkan) Pindahkan dataBeasiswa dari static array di luar komponen menjadi computed array di dalam Page(). Field 'Penerima Beasiswa' diambil dari statsBeasiswa.data.jumlahPenerima dan 'Dana Tersalurkan' dari statsBeasiswa.data.danaTersalurkan. Fallback '-' bila data belum tersedia. TASK MEDIUM 0.5 nicoarya20@gmail.com
5 [Beasiswa] Buat fungsi formatDana untuk konversi angka ke format pendek Indonesia Buat helper function formatDana(value: string | number) di halaman beasiswa-desa/page.tsx. Konversi: >= 1T → XT, >= 1M (miliar) → XM, >= 1Jt → XJt, >= 1Rb → XRb. Desimal 1 angka hanya muncul jika ada sisa (misal 1.5Jt), bilangan bulat tanpa desimal (misal 2Jt). TASK MEDIUM 0.5 nicoarya20@gmail.com
6 [Beasiswa] Terapkan formatDana ke field Dana Tersalurkan di dataBeasiswa Terapkan formatDana(statsBeasiswa.data.danaTersalurkan) pada entry Dana Tersalurkan di array dataBeasiswa agar nilai dari API otomatis diformat ke representasi singkat (Rb/Jt/M/T). TASK MEDIUM 0.5 nicoarya20@gmail.com
7 [Pendidikan] Fix sintaks _count.select di stats.ts — gabungkan siswa & pengajar Perbaiki sintaks object _count.select di src/app/api/[[...slugs]]/_lib/pendidikan/ringkasan/stats.ts. Field pengajar ditaruh di luar object select (menjadi dua object terpisah), diperbaiki menjadi satu object select dengan dua key: siswa dan pengajar, masing-masing dengan filter where isActive: true. BUG HIGH 0.5 nicoarya20@gmail.com
8 [Pendidikan] Tambah jumlahPengajar per jenjang ke query _count dan map perJenjang Tambah pengajar ke _count.select di query jenjangPendidikan agar jumlah pengajar per jenjang bisa dihitung. Tambah field jumlahPengajar ke hasil map perJenjang menggunakan reduce _count.pengajar dari setiap lembaga. TASK HIGH 0.5 nicoarya20@gmail.com
9 [Pendidikan] Update type PerJenjang di stats.ts tambah jumlahPengajar Tambah field jumlahPengajar: number ke type PerJenjang di src/app/api/[[...slugs]]/_lib/pendidikan/ringkasan/stats.ts agar sesuai dengan data yang dikembalikan oleh map perJenjang. TASK MEDIUM 0.5 nicoarya20@gmail.com
10 [Pendidikan] Update type PerJenjang di ringkasan-pendidikan.ts tambah jumlahPengajar Tambah field jumlahPengajar: number ke type PerJenjang di src/app/admin/(dashboard)/_state/pendidikan/ringkasan-pendidikan.ts agar cocok dengan shape response API stats pendidikan. TASK MEDIUM 0.5 nicoarya20@gmail.com