import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; interface PrestasiData { tahun_angkatan: number; jk: string; jumlah_mahasiswa_prestasi: number; } export async function GET(request: Request) { try { const { searchParams } = new URL(request.url); const jenisPrestasi = searchParams.get('jenisPrestasi'); const { data, error } = await supabase .from('mahasiswa') .select(` tahun_angkatan, jk, prestasi_mahasiswa!inner( jenis_prestasi ) `) .eq('prestasi_mahasiswa.jenis_prestasi', jenisPrestasi); if (error) { console.error('Error fetching data:', error); return NextResponse.json( { error: 'Internal Server Error' }, { status: 500 } ); } // Kelompokkan berdasarkan tahun_angkatan dan jk const groupedData = data.reduce((acc: any[], item: any) => { const tahunAngkatan = item.tahun_angkatan; const jk = item.jk; if (!tahunAngkatan || !jk) return acc; const existingGroup = acc.find( (group: any) => group.tahun_angkatan === tahunAngkatan && group.jk === jk ); if (existingGroup) { existingGroup.jumlah_mahasiswa_prestasi++; } else { acc.push({ tahun_angkatan: tahunAngkatan, jk: jk, jumlah_mahasiswa_prestasi: 1 }); } return acc; }, []); // Urutkan berdasarkan tahun_angkatan DESC, kemudian jk const sortedData = groupedData.sort((a: any, b: any) => { if (a.tahun_angkatan !== b.tahun_angkatan) { return b.tahun_angkatan - a.tahun_angkatan; } return a.jk.localeCompare(b.jk); }); return NextResponse.json(sortedData); } catch (error) { console.error('Error fetching data:', error); return NextResponse.json( { error: 'Internal Server Error' }, { status: 500 } ); } }