import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; interface AsalDaerahStatus { kabupaten: string; tahun_angkatan?: number; status_kuliah: string; total_mahasiswa: number; } export async function GET(request: Request) { const { searchParams } = new URL(request.url); const tahunAngkatan = searchParams.get('tahun_angkatan'); const statusKuliah = searchParams.get('status_kuliah'); try { let query = supabase .from('mahasiswa') .select('status_kuliah, kabupaten, tahun_angkatan, nim') .eq('status_kuliah', statusKuliah); if (tahunAngkatan && tahunAngkatan !== 'all') { query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; if (error) { console.error('Error fetching asal daerah status:', error); return NextResponse.json( { error: 'Failed to fetch asal daerah status data' }, { status: 500, 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', }, } ); } // Kelompokkan berdasarkan kabupaten, tahun_angkatan (opsional), status_kuliah const groupedData = data.reduce((acc, item: any) => { const kabupaten = item.kabupaten; const tahun_angkatan = tahunAngkatan && tahunAngkatan !== 'all' ? item.tahun_angkatan : undefined; const status_kuliah = item.status_kuliah; const key = tahun_angkatan !== undefined ? `${kabupaten}-${tahun_angkatan}-${status_kuliah}` : `${kabupaten}-${status_kuliah}`; acc[key] = (acc[key] || 0) + 1; return acc; }, {} as Record); // Konversi ke format akhir dan urutkan const results: AsalDaerahStatus[] = Object.entries(groupedData) .map(([key, total_mahasiswa]) => { const parts = key.split('-'); if (tahunAngkatan && tahunAngkatan !== 'all') { const [kabupaten, tahun_angkatan, status_kuliah] = parts; return { kabupaten, tahun_angkatan: parseInt(tahun_angkatan), status_kuliah, total_mahasiswa }; } else { const [kabupaten, status_kuliah] = parts; return { kabupaten, status_kuliah, total_mahasiswa }; } }) .sort((a, b) => { // Urutkan berdasarkan tahun_angkatan ASC (jika ada), kabupaten ASC, status_kuliah ASC if (a.tahun_angkatan !== undefined && b.tahun_angkatan !== undefined && a.tahun_angkatan !== b.tahun_angkatan) { return a.tahun_angkatan - b.tahun_angkatan; } if (a.kabupaten !== b.kabupaten) { return a.kabupaten.localeCompare(b.kabupaten); } return a.status_kuliah.localeCompare(b.status_kuliah); }); 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 asal daerah status:', error); return NextResponse.json( { error: 'Failed to fetch asal daerah status data' }, { status: 500, 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', }, } ); } }