diff --git a/app/api/mahasiswa/total/route.ts b/app/api/mahasiswa/total/route.ts index 5d99d4d..c2a525a 100644 --- a/app/api/mahasiswa/total/route.ts +++ b/app/api/mahasiswa/total/route.ts @@ -10,16 +10,10 @@ interface MahasiswaTotal { total_berprestasi: number; prestasi_akademik: number; prestasi_non_akademik: number; - ipk_rata_rata_aktif: number; - ipk_rata_rata_lulus: number; total_mahasiswa_aktif_lulus: number; -} - -interface IPKData { - nim: string; - mahasiswa: { - ipk: number; - }; + total_mahasiswa_beasiswa: number; + total_mahasiswa_beasiswa_pemerintah: number; + total_mahasiswa_beasiswa_non_pemerintah: number; } // Fungsi untuk menangani preflight request (OPTIONS) @@ -91,27 +85,22 @@ export async function GET() { .select('*', { count: 'exact', head: true }) .in('status_kuliah', ['Aktif', 'Lulus']); - // Get IPK rata-rata aktif - const { data: ipkAktifData } = await supabase - .from('mahasiswa') - .select('ipk') - .eq('status_kuliah', 'Aktif') - .not('ipk', 'is', null); + // Total mahasiswa beasiswa + const { count: totalMahasiswaBeasiswa } = await supabase + .from('beasiswa_mahasiswa') + .select('*', { count: 'exact', head: true }); - const ipkRataRataAktif = ipkAktifData && ipkAktifData.length > 0 - ? Math.round((ipkAktifData.reduce((sum, item: any) => sum + (item.ipk || 0), 0) / ipkAktifData.length) * 100) / 100 - : 0; + // Total mahasiswa beasiswa Pemerintah + const { count: totalMahasiswaBeasiswaPemerintah } = await supabase + .from('beasiswa_mahasiswa') + .select('*', { count: 'exact', head: true }) + .eq('jenis_beasiswa', 'Pemerintah'); - // Get IPK rata-rata lulus - const { data: ipkLulusData } = await supabase - .from('mahasiswa') - .select('ipk') - .eq('status_kuliah', 'Lulus') - .not('ipk', 'is', null); - - const ipkRataRataLulus = ipkLulusData && ipkLulusData.length > 0 - ? Math.round((ipkLulusData.reduce((sum, item: any) => sum + (item.ipk || 0), 0) / ipkLulusData.length) * 100) / 100 - : 0; + // Total mahasiswa beasiswa Non-Pemerintah + const { count: totalMahasiswaBeasiswaNonPemerintah } = await supabase + .from('beasiswa_mahasiswa') + .select('*', { count: 'exact', head: true }) + .eq('jenis_beasiswa', 'Non-Pemerintah'); const results: MahasiswaTotal = { total_mahasiswa: totalMahasiswa || 0, @@ -122,9 +111,10 @@ export async function GET() { total_berprestasi: totalBerprestasi || 0, prestasi_akademik: prestasiAkademik || 0, prestasi_non_akademik: prestasiNonAkademik || 0, - ipk_rata_rata_aktif: ipkRataRataAktif, - ipk_rata_rata_lulus: ipkRataRataLulus, total_mahasiswa_aktif_lulus: totalMahasiswaAktifLulus || 0, + total_mahasiswa_beasiswa: totalMahasiswaBeasiswa || 0, + total_mahasiswa_beasiswa_pemerintah: totalMahasiswaBeasiswaPemerintah || 0, + total_mahasiswa_beasiswa_non_pemerintah: totalMahasiswaBeasiswaNonPemerintah || 0, }; // Menambahkan header cache dan CORS diff --git a/app/page.tsx b/app/page.tsx index 839093c..97a3001 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -17,9 +17,10 @@ interface MahasiswaTotal { total_berprestasi: number; prestasi_akademik: number; prestasi_non_akademik: number; - ipk_rata_rata_aktif: number; - ipk_rata_rata_lulus: number; total_mahasiswa_aktif_lulus: number; + total_mahasiswa_beasiswa: number; + total_mahasiswa_beasiswa_pemerintah: number; + total_mahasiswa_beasiswa_non_pemerintah: number; } // Skeleton loading component @@ -50,11 +51,12 @@ export default function DashboardPage() { total_berprestasi: 0, prestasi_akademik: 0, prestasi_non_akademik: 0, - ipk_rata_rata_aktif: 0, - ipk_rata_rata_lulus: 0, - total_mahasiswa_aktif_lulus: 0 + total_mahasiswa_aktif_lulus: 0, + total_mahasiswa_beasiswa: 0, + total_mahasiswa_beasiswa_pemerintah: 0, + total_mahasiswa_beasiswa_non_pemerintah: 0 }); - const [selectedYear, setSelectedYear] = useState("all"); + const [loading, setLoading] = useState(true); const [error, setError] = useState(null); @@ -177,18 +179,19 @@ export default function DashboardPage() { - {/* Kartu Rata-rata IPK */} + {/* Kartu Mahasiswa Beasiswa */} - Rata-rata IPK + Mahasiswa Beasiswa -
{mahasiswaData.mahasiswa_aktif}
+
{mahasiswaData.total_mahasiswa_beasiswa}
- Aktif: {mahasiswaData.ipk_rata_rata_aktif} + Pemerintah: {mahasiswaData.total_mahasiswa_beasiswa_pemerintah} + Non-Pemerintah: {mahasiswaData.total_mahasiswa_beasiswa_non_pemerintah}
diff --git a/components/ui/Navbar.tsx b/components/ui/Navbar.tsx index a9bafb3..8d29a5b 100644 --- a/components/ui/Navbar.tsx +++ b/components/ui/Navbar.tsx @@ -3,7 +3,7 @@ import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { ThemeToggle } from '@/components/theme-toggle'; -import { Menu, ChevronDown, BarChart, Database, School, GraduationCap, Clock, BookOpen, Award, Home, LogOut, User } from 'lucide-react'; +import { Menu, ChevronDown, BarChart, Database, CircleCheck, School, GraduationCap, Clock, BookOpen, Award, Home, LogOut, User } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet'; import { @@ -127,7 +127,7 @@ const Navbar = () => { - + Status Kuliah diff --git a/public/next.svg b/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file