import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; import { cookies } from 'next/headers'; import { jwtVerify } from 'jose'; interface PrestasiMahasiswa { nama_prestasi: string; jenis_prestasi: string; tingkat_prestasi: string; peringkat: string; tanggal_prestasi: string; } interface BeasiswaMahasiswa { nama_beasiswa: string; sumber_beasiswa: string; jenis_beasiswa: string; beasiswa_status: string; } interface MahasiswaProfile { // Data Mahasiswa nama: string; nim: string; tahun_angkatan: string; jk: 'Pria' | 'Wanita'; jenis_pendaftaran: string; ipk: number | null; agama: string; kabupaten: string; provinsi: string; // Status Mahasiswa status_kuliah: string; semester: string; // Prestasi Mahasiswa prestasi: PrestasiMahasiswa[]; // Beasiswa Mahasiswa beasiswa: BeasiswaMahasiswa[]; } 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(` nama, nim, tahun_angkatan, jk, jenis_pendaftaran, ipk, agama, kabupaten, provinsi `) .eq('nim', nim) .single(); if (mahasiswaError || !mahasiswaData) { return NextResponse.json( { error: 'Data mahasiswa tidak ditemukan' }, { status: 404 } ); } // Get status_mahasiswa data const { data: statusData, error: statusError } = await supabase .from('status_mahasiswa') .select('status_kuliah, semester') .eq('nim', nim) .single(); // Get prestasi_mahasiswa data const { data: prestasiData, error: prestasiError } = await supabase .from('prestasi_mahasiswa') .select(` nama_prestasi, jenis_prestasi, tingkat_prestasi, peringkat, tanggal_prestasi `) .eq('nim', nim); // Get beasiswa_mahasiswa data const { data: beasiswaData, error: beasiswaError } = await supabase .from('beasiswa_mahasiswa') .select(` nama_beasiswa, sumber_beasiswa, jenis_beasiswa, beasiswa_status `) .eq('nim', nim); // Transform the data to match the expected interface const profile: MahasiswaProfile = { // Data Mahasiswa nama: mahasiswaData.nama, nim: mahasiswaData.nim, tahun_angkatan: mahasiswaData.tahun_angkatan, jk: mahasiswaData.jk, jenis_pendaftaran: mahasiswaData.jenis_pendaftaran, ipk: mahasiswaData.ipk, agama: mahasiswaData.agama, kabupaten: mahasiswaData.kabupaten, provinsi: mahasiswaData.provinsi, // Status Mahasiswa status_kuliah: statusData?.status_kuliah || '-', semester: statusData?.semester || '-', // Prestasi Mahasiswa prestasi: prestasiData || [], // Beasiswa Mahasiswa beasiswa: beasiswaData || [] }; return NextResponse.json(profile); } catch (error) { console.error('Error fetching profile data:', error); return NextResponse.json( { error: 'Internal Server Error' }, { status: 500 } ); } }