import { NextResponse } from 'next/server'; import pool from '@/lib/db'; import { RowDataPacket } from 'mysql2'; interface StatusMahasiswa extends RowDataPacket { tahun_angkatan: number; jk: 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'); const connection = await pool.getConnection(); try { let query = ` SELECT m.tahun_angkatan, CASE WHEN m.jk = 'Pria' THEN 'L' WHEN m.jk = 'Wanita' THEN 'P' ELSE m.jk END as jk, COUNT(m.nim) AS total_mahasiswa FROM mahasiswa m JOIN status_mahasiswa s ON m.nim = s.nim WHERE s.status_kuliah = ? `; const params: any[] = [statusKuliah]; if (tahunAngkatan && tahunAngkatan !== 'all') { query += ` AND m.tahun_angkatan = ?`; params.push(tahunAngkatan); } query += ` GROUP BY m.tahun_angkatan, m.jk ORDER BY m.tahun_angkatan DESC, m.jk `; const [results] = await connection.query(query, params); 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 status mahasiswa:', error); return NextResponse.json( { error: 'Failed to fetch status mahasiswa data' }, { status: 500, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type, Authorization', }, } ); } finally { connection.release(); } }