import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; interface JenisPendaftaranLulus { tahun_angkatan: number; jenis_pendaftaran: string; jumlah_lulus_tepat_waktu: number; } export async function GET(request: Request) { try { const { searchParams } = new URL(request.url); const tahunAngkatan = searchParams.get('tahun_angkatan'); let query = supabase .from('mahasiswa') .select('semester, tahun_angkatan, jenis_pendaftaran, nim') .eq('status_kuliah', 'Lulus') .lte('semester', 8); if (tahunAngkatan && tahunAngkatan !== 'all') { query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; if (error) { console.error('Error fetching jenis pendaftaran lulus data:', error); return NextResponse.json( { error: 'Failed to fetch jenis pendaftaran lulus data' }, { status: 500 } ); } // Group by tahun_angkatan and jenis_pendaftaran const groupedData = data.reduce((acc, item: any) => { const tahun_angkatan = item.tahun_angkatan; const jenis_pendaftaran = item.jenis_pendaftaran; const key = `${tahun_angkatan}-${jenis_pendaftaran}`; acc[key] = (acc[key] || 0) + 1; return acc; }, {} as Record); // Convert to final format and sort const results: JenisPendaftaranLulus[] = Object.entries(groupedData) .map(([key, jumlah_lulus_tepat_waktu]) => { const [tahun_angkatan, jenis_pendaftaran] = key.split('-'); return { tahun_angkatan: parseInt(tahun_angkatan), jenis_pendaftaran, jumlah_lulus_tepat_waktu }; }) .sort((a, b) => { // Sort by tahun_angkatan DESC, jenis_pendaftaran ASC if (a.tahun_angkatan !== b.tahun_angkatan) { return b.tahun_angkatan - a.tahun_angkatan; } return a.jenis_pendaftaran.localeCompare(b.jenis_pendaftaran); }); return NextResponse.json(results); } catch (error) { console.error('Detailed error in GET /api/mahasiswa/jenis-pendaftaran-lulus:', error); return NextResponse.json( { error: 'Internal Server Error', details: error instanceof Error ? error.message : 'Unknown error' }, { status: 500 } ); } }