import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; export async function GET(request: Request) { try { const { searchParams } = new URL(request.url); const tahunAngkatan = searchParams.get('tahunAngkatan'); const jenisBeasiswa = searchParams.get('jenisBeasiswa'); let query = supabase .from('beasiswa_mahasiswa') .select(` nama_beasiswa, jenis_beasiswa, mahasiswa!inner( tahun_angkatan ) `) .eq('jenis_beasiswa', jenisBeasiswa); if (tahunAngkatan && tahunAngkatan !== 'all') { query = query.eq('mahasiswa.tahun_angkatan', tahunAngkatan); } const { data, error } = await query; if (error) { console.error('Supabase error:', error); return NextResponse.json( { error: 'Database error' }, { status: 500 } ); } // Group and count the data in JavaScript const groupedData = data.reduce((acc: any[], row: any) => { const tahunAngkatanValue = row.mahasiswa?.tahun_angkatan; const namaBeasiswa = row.nama_beasiswa; if (!namaBeasiswa || !tahunAngkatanValue) { return acc; } const existingGroup = acc.find( (item: any) => item.tahun_angkatan === tahunAngkatanValue && item.nama_beasiswa === namaBeasiswa ); if (existingGroup) { existingGroup.jumlah_nama_beasiswa++; } else { acc.push({ tahun_angkatan: tahunAngkatanValue, nama_beasiswa: namaBeasiswa, jumlah_nama_beasiswa: 1 }); } return acc; }, []); // Sort the results by tahun_angkatan ascending (as expected by component) const sortedData = groupedData.sort((a: any, b: any) => { if (a.tahun_angkatan !== b.tahun_angkatan) { return a.tahun_angkatan - b.tahun_angkatan; } return a.nama_beasiswa.localeCompare(b.nama_beasiswa); }); return NextResponse.json(sortedData); } catch (error) { console.error('Error fetching data:', error); return NextResponse.json( { error: 'Internal Server Error' }, { status: 500 } ); } }