Files
Randa Firman Putra 886fc59d28 ayo bisa
2025-09-16 14:22:37 +07:00

102 lines
3.1 KiB
TypeScript

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 });
}
}