import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; interface JenisPendaftaran { tahun_angkatan: number; jenis_pendaftaran: string; jumlah: number; } export async function GET(request: Request) { const { searchParams } = new URL(request.url); const tahunAngkatan = searchParams.get('tahun_angkatan'); try { let query = supabase .from('mahasiswa') .select('tahun_angkatan, jenis_pendaftaran'); if (tahunAngkatan && tahunAngkatan !== 'all') { query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; if (error) { console.error('Error fetching jenis pendaftaran:', error); return NextResponse.json( { error: 'Failed to fetch jenis pendaftaran data' }, { status: 500, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type, Authorization', }, } ); } // Kelompokkan berdasarkan tahun_angkatan dan jenis_pendaftaran const groupedData = data.reduce((acc, item) => { const key = `${item.tahun_angkatan}-${item.jenis_pendaftaran}`; acc[key] = (acc[key] || 0) + 1; return acc; }, {} as Record); // Konversi ke format akhir const results: JenisPendaftaran[] = Object.entries(groupedData).map(([key, jumlah]) => { const [tahun_angkatan, jenis_pendaftaran] = key.split('-'); return { tahun_angkatan: parseInt(tahun_angkatan), jenis_pendaftaran, jumlah }; }).sort((a, b) => { // Urutkan berdasarkan tahun_angkatan DESC, kemudian jenis_pendaftaran 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, { headers: { 'Cache-Control': 'public, max-age=60, stale-while-revalidate=30', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type, Authorization', }, }); } catch (error) { console.error('Error fetching jenis pendaftaran:', error); return NextResponse.json( { error: 'Failed to fetch jenis pendaftaran data' }, { status: 500, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type, Authorization', }, } ); } }