import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; export async function GET(request: Request) { try { const { searchParams } = new URL(request.url); const jenisBeasiswa = searchParams.get('jenisBeasiswa'); const { data, error } = await supabase .from('mahasiswa') .select(` tahun_angkatan, ipk, beasiswa_mahasiswa!inner( jenis_beasiswa ) `) .eq('beasiswa_mahasiswa.jenis_beasiswa', jenisBeasiswa); if (error) { console.error('Supabase error:', error); return NextResponse.json( { error: 'Database error' }, { status: 500 } ); } // Kelompokkan dan hitung statistik di JavaScript const groupedData = data.reduce((acc: any[], row: any) => { const tahunAngkatan = row.tahun_angkatan; const ipk = row.ipk; if (!ipk) return acc; const existingGroup = acc.find( (item: any) => item.tahun_angkatan === tahunAngkatan ); if (existingGroup) { existingGroup.total_mahasiswa_beasiswa++; existingGroup.total_ipk += ipk; } else { acc.push({ tahun_angkatan: tahunAngkatan, total_mahasiswa_beasiswa: 1, total_ipk: ipk }); } return acc; }, []); // Hitung rata-rata IPK dan format hasil const result = groupedData.map((group: any) => ({ tahun_angkatan: group.tahun_angkatan, total_mahasiswa_beasiswa: group.total_mahasiswa_beasiswa, rata_rata_ipk: Math.round((group.total_ipk / group.total_mahasiswa_beasiswa) * 100) / 100 })); // Urutkan berdasarkan tahun_angkatan ascending const sortedData = result.sort((a: any, b: any) => a.tahun_angkatan - b.tahun_angkatan); return NextResponse.json(sortedData); } catch (error) { console.error('Error fetching data:', error); return NextResponse.json( { error: 'Internal Server Error' }, { status: 500 } ); } }