import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; import { cookies } from 'next/headers'; import { jwtVerify } from 'jose'; interface MahasiswaProfile { nim: string; nama: string; jk: 'Pria' | 'Wanita'; agama: string; kabupaten: string; provinsi: string; jenis_pendaftaran: string; status_beasiswa: 'YA' | 'TIDAK'; tahun_angkatan: string; ipk: number | null; prestasi: 'YA' | 'TIDAK'; status_kuliah: string; } export async function GET(request: Request) { try { // Get token from cookies const cookieStore = await cookies(); const token = cookieStore.get('token')?.value; if (!token) { return NextResponse.json( { error: 'Unauthorized' }, { status: 401 } ); } // Verify JWT token const { payload } = await jwtVerify( token, new TextEncoder().encode(process.env.JWT_SECRET || 'your-secret-key') ); const nim = payload.nim as string; // Get mahasiswa data const { data: mahasiswaData, error: mahasiswaError } = await supabase .from('mahasiswa') .select(` nim, nama, jk, agama, kabupaten, provinsi, jenis_pendaftaran, status_beasiswa, tahun_angkatan, ipk, prestasi `) .eq('nim', nim) .single(); if (mahasiswaError || !mahasiswaData) { return NextResponse.json( { error: 'Data mahasiswa tidak ditemukan' }, { status: 404 } ); } // Get status_kuliah separately const { data: statusData, error: statusError } = await supabase .from('status_mahasiswa') .select('status_kuliah') .eq('nim', nim) .single(); // Transform the data to match the expected interface const profile: MahasiswaProfile = { nim: mahasiswaData.nim, nama: mahasiswaData.nama, jk: mahasiswaData.jk, agama: mahasiswaData.agama, kabupaten: mahasiswaData.kabupaten, provinsi: mahasiswaData.provinsi, jenis_pendaftaran: mahasiswaData.jenis_pendaftaran, status_beasiswa: mahasiswaData.status_beasiswa, tahun_angkatan: mahasiswaData.tahun_angkatan, ipk: mahasiswaData.ipk, prestasi: mahasiswaData.prestasi, status_kuliah: statusData?.status_kuliah || '' }; return NextResponse.json(profile); } catch (error) { console.error('Error fetching profile data:', error); return NextResponse.json( { error: 'Internal Server Error' }, { status: 500 } ); } }