import { NextRequest, NextResponse } from 'next/server'; import supabase from '@/lib/db'; // GET - Ambil data bimbingan dosen berdasarkan status bimbingan export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url); const tahun_angkatan = searchParams.get('tahun_angkatan'); let query = supabase .from('mahasiswa') .select(` pembimbing_1, pembimbing_2, status_bimbingan, tahun_angkatan, dosen_pembimbing_1:dosen!pembimbing_1(id_dosen, nama_dosen), dosen_pembimbing_2:dosen!pembimbing_2(id_dosen, nama_dosen) `); // Filter berdasarkan tahun angkatan jika diberikan if (tahun_angkatan && tahun_angkatan !== 'all') { query = query.eq('tahun_angkatan', tahun_angkatan); } const { data, error } = await query; if (error) { console.error('Error fetching bimbingan data:', error); return NextResponse.json({ message: 'Internal Server Error' }, { status: 500 }); } // Proses data untuk menggabungkan pembimbing 1 dan 2 const bimbinganMap = new Map(); data.forEach(mahasiswa => { // Proses pembimbing 1 if (mahasiswa.pembimbing_1 && mahasiswa.dosen_pembimbing_1) { const dosenId = (mahasiswa.dosen_pembimbing_1 as any).id_dosen; const dosenNama = (mahasiswa.dosen_pembimbing_1 as any).nama_dosen; const status = mahasiswa.status_bimbingan; if (!bimbinganMap.has(dosenId)) { bimbinganMap.set(dosenId, { id_dosen: dosenId, nama_dosen: dosenNama, selesai: 0, belum_selesai: 0 }); } const dosenData = bimbinganMap.get(dosenId); if (dosenData) { if (status === 'Selesai') { dosenData.selesai++; } else { dosenData.belum_selesai++; } } } // Proses pembimbing 2 if (mahasiswa.pembimbing_2 && mahasiswa.dosen_pembimbing_2) { const dosenId = (mahasiswa.dosen_pembimbing_2 as any).id_dosen; const dosenNama = (mahasiswa.dosen_pembimbing_2 as any).nama_dosen; const status = mahasiswa.status_bimbingan; if (!bimbinganMap.has(dosenId)) { bimbinganMap.set(dosenId, { id_dosen: dosenId, nama_dosen: dosenNama, selesai: 0, belum_selesai: 0 }); } const dosenData = bimbinganMap.get(dosenId); if (dosenData) { if (status === 'Selesai') { dosenData.selesai++; } else { dosenData.belum_selesai++; } } } }); // Konversi Map ke Array dan urutkan berdasarkan nama dosen A-Z const result = Array.from(bimbinganMap.values()) .map(dosen => ({ ...dosen, total: dosen.selesai + dosen.belum_selesai })) .sort((a, b) => a.nama_dosen.localeCompare(b.nama_dosen)); return NextResponse.json(result); } catch (error) { console.error('Error fetching bimbingan data:', error); return NextResponse.json({ message: 'Internal Server Error' }, { status: 500 }); } }