From db82b40a6bf3078f5815c8033581c82b916dc92a Mon Sep 17 00:00:00 2001 From: Randa Firman Putra Date: Tue, 1 Jul 2025 17:59:18 +0700 Subject: [PATCH] Change api status --- app/api/mahasiswa/asal-daerah-lulus/route.ts | 10 ++--- app/api/mahasiswa/asal-daerah-status/route.ts | 12 +++--- app/api/mahasiswa/ipk-lulus-tepat/route.ts | 12 +++--- app/api/mahasiswa/ipk-status/route.ts | 12 +++--- .../jenis-pendaftaran-lulus/route.ts | 10 ++--- .../jenis-pendaftaran-status/route.ts | 10 ++--- app/api/mahasiswa/lulus-tepat-waktu/route.ts | 10 ++--- app/api/mahasiswa/status-kuliah/route.ts | 11 ++--- app/api/mahasiswa/status-mahasiswa/route.ts | 10 ++--- app/api/mahasiswa/status/route.ts | 6 +-- app/api/mahasiswa/tahun-angkatan/route.ts | 2 - app/api/mahasiswa/total/route.ts | 40 +++++++++---------- app/page.tsx | 6 +-- 13 files changed, 72 insertions(+), 79 deletions(-) diff --git a/app/api/mahasiswa/asal-daerah-lulus/route.ts b/app/api/mahasiswa/asal-daerah-lulus/route.ts index 7ec9286..96e9131 100644 --- a/app/api/mahasiswa/asal-daerah-lulus/route.ts +++ b/app/api/mahasiswa/asal-daerah-lulus/route.ts @@ -13,13 +13,13 @@ export async function GET(request: Request) { const tahunAngkatan = searchParams.get('tahunAngkatan'); let query = supabase - .from('status_mahasiswa') - .select('semester, mahasiswa!inner(tahun_angkatan, kabupaten, nim)') + .from('mahasiswa') + .select('semester, tahun_angkatan, kabupaten, nim') .eq('status_kuliah', 'Lulus') .lte('semester', 8); if (tahunAngkatan && tahunAngkatan !== 'all') { - query = query.eq('mahasiswa.tahun_angkatan', parseInt(tahunAngkatan)); + query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; @@ -34,8 +34,8 @@ export async function GET(request: Request) { // Group by tahun_angkatan and kabupaten const groupedData = data.reduce((acc, item: any) => { - const tahun_angkatan = item.mahasiswa.tahun_angkatan; - const kabupaten = item.mahasiswa.kabupaten; + const tahun_angkatan = item.tahun_angkatan; + const kabupaten = item.kabupaten; const key = `${tahun_angkatan}-${kabupaten}`; acc[key] = (acc[key] || 0) + 1; return acc; diff --git a/app/api/mahasiswa/asal-daerah-status/route.ts b/app/api/mahasiswa/asal-daerah-status/route.ts index f246ac3..c87d968 100644 --- a/app/api/mahasiswa/asal-daerah-status/route.ts +++ b/app/api/mahasiswa/asal-daerah-status/route.ts @@ -15,12 +15,12 @@ export async function GET(request: Request) { try { let query = supabase - .from('status_mahasiswa') - .select('status_kuliah, mahasiswa!inner(kabupaten, tahun_angkatan, nim)') + .from('mahasiswa') + .select('status_kuliah, kabupaten, tahun_angkatan, nim') .eq('status_kuliah', statusKuliah); if (tahunAngkatan && tahunAngkatan !== 'all') { - query = query.eq('mahasiswa.tahun_angkatan', parseInt(tahunAngkatan)); + query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; @@ -43,8 +43,8 @@ export async function GET(request: Request) { // Group by kabupaten, tahun_angkatan (optional), status_kuliah const groupedData = data.reduce((acc, item: any) => { - const kabupaten = item.mahasiswa.kabupaten; - const tahun_angkatan = tahunAngkatan && tahunAngkatan !== 'all' ? item.mahasiswa.tahun_angkatan : undefined; + const kabupaten = item.kabupaten; + const tahun_angkatan = tahunAngkatan && tahunAngkatan !== 'all' ? item.tahun_angkatan : undefined; const status_kuliah = item.status_kuliah; const key = tahun_angkatan !== undefined ? `${kabupaten}-${tahun_angkatan}-${status_kuliah}` @@ -108,4 +108,4 @@ export async function GET(request: Request) { } ); } -} \ No newline at end of file +} \ No newline at end of file diff --git a/app/api/mahasiswa/ipk-lulus-tepat/route.ts b/app/api/mahasiswa/ipk-lulus-tepat/route.ts index 5a095b5..206a532 100644 --- a/app/api/mahasiswa/ipk-lulus-tepat/route.ts +++ b/app/api/mahasiswa/ipk-lulus-tepat/route.ts @@ -12,14 +12,14 @@ export async function GET(request: Request) { const tahunAngkatan = searchParams.get('tahunAngkatan'); let query = supabase - .from('status_mahasiswa') - .select('semester, mahasiswa!inner(tahun_angkatan, ipk)') + .from('mahasiswa') + .select('semester, tahun_angkatan, ipk') .eq('status_kuliah', 'Lulus') .lte('semester', 8) - .not('mahasiswa.ipk', 'is', null); + .not('ipk', 'is', null); if (tahunAngkatan && tahunAngkatan !== 'all') { - query = query.eq('mahasiswa.tahun_angkatan', parseInt(tahunAngkatan)); + query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; @@ -34,8 +34,8 @@ export async function GET(request: Request) { // Group by tahun_angkatan and calculate average IPK const groupedData = data.reduce((acc, item: any) => { - const tahun_angkatan = item.mahasiswa.tahun_angkatan; - const ipk = item.mahasiswa.ipk; + const tahun_angkatan = item.tahun_angkatan; + const ipk = item.ipk; if (!acc[tahun_angkatan]) { acc[tahun_angkatan] = { diff --git a/app/api/mahasiswa/ipk-status/route.ts b/app/api/mahasiswa/ipk-status/route.ts index 4dfc455..3c90b5e 100644 --- a/app/api/mahasiswa/ipk-status/route.ts +++ b/app/api/mahasiswa/ipk-status/route.ts @@ -23,13 +23,13 @@ export async function GET(request: Request) { } let query = supabase - .from('status_mahasiswa') - .select('status_kuliah, mahasiswa!inner(tahun_angkatan, ipk, nim)') + .from('mahasiswa') + .select('tahun_angkatan, ipk, nim') .eq('status_kuliah', statusKuliah) - .not('mahasiswa.ipk', 'is', null); + .not('ipk', 'is', null); if (tahunAngkatan && tahunAngkatan !== 'all') { - query = query.eq('mahasiswa.tahun_angkatan', parseInt(tahunAngkatan)); + query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; @@ -44,9 +44,9 @@ export async function GET(request: Request) { // Group by tahun_angkatan and status_kuliah const groupedData = data.reduce((acc, item: any) => { - const tahun_angkatan = item.mahasiswa.tahun_angkatan; + const tahun_angkatan = item.tahun_angkatan; const status_kuliah = item.status_kuliah; - const ipk = item.mahasiswa.ipk; + const ipk = item.ipk; const key = `${tahun_angkatan}-${status_kuliah}`; if (!acc[key]) { diff --git a/app/api/mahasiswa/jenis-pendaftaran-lulus/route.ts b/app/api/mahasiswa/jenis-pendaftaran-lulus/route.ts index 0512eb7..080bc05 100644 --- a/app/api/mahasiswa/jenis-pendaftaran-lulus/route.ts +++ b/app/api/mahasiswa/jenis-pendaftaran-lulus/route.ts @@ -13,13 +13,13 @@ export async function GET(request: Request) { const tahunAngkatan = searchParams.get('tahun_angkatan'); let query = supabase - .from('status_mahasiswa') - .select('semester, mahasiswa!inner(tahun_angkatan, jenis_pendaftaran, nim)') + .from('mahasiswa') + .select('semester, tahun_angkatan, jenis_pendaftaran, nim') .eq('status_kuliah', 'Lulus') .lte('semester', 8); if (tahunAngkatan && tahunAngkatan !== 'all') { - query = query.eq('mahasiswa.tahun_angkatan', parseInt(tahunAngkatan)); + query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; @@ -34,8 +34,8 @@ export async function GET(request: Request) { // Group by tahun_angkatan and jenis_pendaftaran const groupedData = data.reduce((acc, item: any) => { - const tahun_angkatan = item.mahasiswa.tahun_angkatan; - const jenis_pendaftaran = item.mahasiswa.jenis_pendaftaran; + const tahun_angkatan = item.tahun_angkatan; + const jenis_pendaftaran = item.jenis_pendaftaran; const key = `${tahun_angkatan}-${jenis_pendaftaran}`; acc[key] = (acc[key] || 0) + 1; return acc; diff --git a/app/api/mahasiswa/jenis-pendaftaran-status/route.ts b/app/api/mahasiswa/jenis-pendaftaran-status/route.ts index 52db693..99f9c95 100644 --- a/app/api/mahasiswa/jenis-pendaftaran-status/route.ts +++ b/app/api/mahasiswa/jenis-pendaftaran-status/route.ts @@ -15,12 +15,12 @@ export async function GET(request: Request) { try { let query = supabase - .from('status_mahasiswa') - .select('status_kuliah, mahasiswa!inner(jenis_pendaftaran, tahun_angkatan, nim)') + .from('mahasiswa') + .select('status_kuliah, jenis_pendaftaran, tahun_angkatan, nim') .eq('status_kuliah', statusKuliah); if (tahunAngkatan && tahunAngkatan !== 'all') { - query = query.eq('mahasiswa.tahun_angkatan', parseInt(tahunAngkatan)); + query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; @@ -43,8 +43,8 @@ export async function GET(request: Request) { // Group by jenis_pendaftaran, tahun_angkatan, status_kuliah const groupedData = data.reduce((acc, item: any) => { - const jenis_pendaftaran = item.mahasiswa.jenis_pendaftaran; - const tahun_angkatan = item.mahasiswa.tahun_angkatan; + const jenis_pendaftaran = item.jenis_pendaftaran; + const tahun_angkatan = item.tahun_angkatan; const status_kuliah = item.status_kuliah; const key = `${jenis_pendaftaran}-${tahun_angkatan}-${status_kuliah}`; acc[key] = (acc[key] || 0) + 1; diff --git a/app/api/mahasiswa/lulus-tepat-waktu/route.ts b/app/api/mahasiswa/lulus-tepat-waktu/route.ts index 448e74c..e86d91d 100644 --- a/app/api/mahasiswa/lulus-tepat-waktu/route.ts +++ b/app/api/mahasiswa/lulus-tepat-waktu/route.ts @@ -13,13 +13,13 @@ export async function GET(request: Request) { const tahunAngkatan = searchParams.get('tahun_angkatan'); let query = supabase - .from('status_mahasiswa') - .select('semester, mahasiswa!inner(tahun_angkatan, jk, nim)') + .from('mahasiswa') + .select('semester, tahun_angkatan, jk, nim') .eq('status_kuliah', 'Lulus') .lte('semester', 8); if (tahunAngkatan && tahunAngkatan !== 'all') { - query = query.eq('mahasiswa.tahun_angkatan', parseInt(tahunAngkatan)); + query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; @@ -34,8 +34,8 @@ export async function GET(request: Request) { // Group by tahun_angkatan and jk const groupedData = data.reduce((acc, item: any) => { - const tahun_angkatan = item.mahasiswa.tahun_angkatan; - const jk = item.mahasiswa.jk; + const tahun_angkatan = item.tahun_angkatan; + const jk = item.jk; const key = `${tahun_angkatan}-${jk}`; acc[key] = (acc[key] || 0) + 1; return acc; diff --git a/app/api/mahasiswa/status-kuliah/route.ts b/app/api/mahasiswa/status-kuliah/route.ts index d66d811..40f5176 100644 --- a/app/api/mahasiswa/status-kuliah/route.ts +++ b/app/api/mahasiswa/status-kuliah/route.ts @@ -14,13 +14,8 @@ export async function GET(request: Request) { let query = supabase .from('mahasiswa') - .select(` - tahun_angkatan, - status_mahasiswa!inner( - status_kuliah - ) - `) - .in('status_mahasiswa.status_kuliah', ['Lulus', 'Cuti', 'Aktif', 'DO']); + .select('tahun_angkatan, status_kuliah') + .in('status_kuliah', ['Lulus', 'Cuti', 'Aktif', 'DO']); if (tahunAngkatan && tahunAngkatan !== 'all') { query = query.eq('tahun_angkatan', tahunAngkatan); @@ -46,7 +41,7 @@ export async function GET(request: Request) { // Group and count the data in JavaScript const groupedData = data.reduce((acc: any[], row: any) => { const tahunAngkatanValue = row.tahun_angkatan; - const statusKuliah = row.status_mahasiswa?.status_kuliah; + const statusKuliah = row.status_kuliah; if (!tahunAngkatanValue || !statusKuliah) return acc; diff --git a/app/api/mahasiswa/status-mahasiswa/route.ts b/app/api/mahasiswa/status-mahasiswa/route.ts index bcad24f..61a9720 100644 --- a/app/api/mahasiswa/status-mahasiswa/route.ts +++ b/app/api/mahasiswa/status-mahasiswa/route.ts @@ -14,12 +14,12 @@ export async function GET(request: Request) { try { let query = supabase - .from('status_mahasiswa') - .select('status_kuliah, mahasiswa!inner(tahun_angkatan, jk)') + .from('mahasiswa') + .select('tahun_angkatan, jk') .eq('status_kuliah', statusKuliah); if (tahunAngkatan && tahunAngkatan !== 'all') { - query = query.eq('mahasiswa.tahun_angkatan', parseInt(tahunAngkatan)); + query = query.eq('tahun_angkatan', parseInt(tahunAngkatan)); } const { data, error } = await query; @@ -41,8 +41,8 @@ export async function GET(request: Request) { // Group by tahun_angkatan and jk const groupedData = data.reduce((acc, item: any) => { - const tahun_angkatan = item.mahasiswa.tahun_angkatan; - const jk = item.mahasiswa.jk; + const tahun_angkatan = item.tahun_angkatan; + const jk = item.jk; const key = `${tahun_angkatan}-${jk}`; acc[key] = (acc[key] || 0) + 1; return acc; diff --git a/app/api/mahasiswa/status/route.ts b/app/api/mahasiswa/status/route.ts index b671110..429a88f 100644 --- a/app/api/mahasiswa/status/route.ts +++ b/app/api/mahasiswa/status/route.ts @@ -10,8 +10,8 @@ interface StatusData { export async function GET() { try { const { data, error } = await supabase - .from('status_mahasiswa') - .select('status_kuliah, mahasiswa!inner(tahun_angkatan)') + .from('mahasiswa') + .select('status_kuliah, tahun_angkatan') .in('status_kuliah', ['Lulus', 'Cuti', 'Aktif', 'DO']); if (error) { @@ -24,7 +24,7 @@ export async function GET() { // Group by tahun_angkatan and status_kuliah const groupedData = data.reduce((acc, item: any) => { - const tahun_angkatan = item.mahasiswa.tahun_angkatan; + const tahun_angkatan = item.tahun_angkatan; const status_kuliah = item.status_kuliah; const key = `${tahun_angkatan}-${status_kuliah}`; acc[key] = (acc[key] || 0) + 1; diff --git a/app/api/mahasiswa/tahun-angkatan/route.ts b/app/api/mahasiswa/tahun-angkatan/route.ts index 70bd6f6..a88cd79 100644 --- a/app/api/mahasiswa/tahun-angkatan/route.ts +++ b/app/api/mahasiswa/tahun-angkatan/route.ts @@ -30,8 +30,6 @@ export async function GET() { .sort((a, b) => b - a) // Sort descending .slice(0, 7); // Take only 7 most recent years - console.log('Available years:', uniqueYears); // Debug log - return NextResponse.json(uniqueYears, { headers: { 'Cache-Control': 'public, max-age=60, stale-while-revalidate=30', diff --git a/app/api/mahasiswa/total/route.ts b/app/api/mahasiswa/total/route.ts index c334310..af80d47 100644 --- a/app/api/mahasiswa/total/route.ts +++ b/app/api/mahasiswa/total/route.ts @@ -44,29 +44,29 @@ export async function GET() { // Get mahasiswa aktif const { count: mahasiswaAktif } = await supabase - .from('status_mahasiswa') - .select('nim', { count: 'exact', head: true }) + .from('mahasiswa') + .select('*', { count: 'exact', head: true }) .eq('status_kuliah', 'Aktif'); // Get total lulus const { count: totalLulus } = await supabase - .from('status_mahasiswa') - .select('nim', { count: 'exact', head: true }) + .from('mahasiswa') + .select('*', { count: 'exact', head: true }) .eq('status_kuliah', 'Lulus'); // Get pria lulus const { count: priaLulus } = await supabase - .from('status_mahasiswa') - .select('nim, mahasiswa!inner(jk)', { count: 'exact', head: true }) + .from('mahasiswa') + .select('*', { count: 'exact', head: true }) .eq('status_kuliah', 'Lulus') - .eq('mahasiswa.jk', 'Pria'); + .eq('jk', 'Pria'); // Get wanita lulus const { count: wanitaLulus } = await supabase - .from('status_mahasiswa') - .select('nim, mahasiswa!inner(jk)', { count: 'exact', head: true }) + .from('mahasiswa') + .select('*', { count: 'exact', head: true }) .eq('status_kuliah', 'Lulus') - .eq('mahasiswa.jk', 'Wanita'); + .eq('jk', 'Wanita'); // Get total berprestasi const { count: totalBerprestasi } = await supabase @@ -87,30 +87,30 @@ export async function GET() { // Get total mahasiswa aktif + lulus const { count: totalMahasiswaAktifLulus } = await supabase - .from('status_mahasiswa') - .select('nim', { count: 'exact', head: true }) + .from('mahasiswa') + .select('*', { count: 'exact', head: true }) .in('status_kuliah', ['Aktif', 'Lulus']); // Get IPK rata-rata aktif const { data: ipkAktifData } = await supabase - .from('status_mahasiswa') - .select('nim, mahasiswa!inner(ipk)') + .from('mahasiswa') + .select('ipk') .eq('status_kuliah', 'Aktif') - .not('mahasiswa.ipk', 'is', null); + .not('ipk', 'is', null); const ipkRataRataAktif = ipkAktifData && ipkAktifData.length > 0 - ? Math.round((ipkAktifData.reduce((sum, item: any) => sum + (item.mahasiswa.ipk || 0), 0) / ipkAktifData.length) * 100) / 100 + ? Math.round((ipkAktifData.reduce((sum, item: any) => sum + (item.ipk || 0), 0) / ipkAktifData.length) * 100) / 100 : 0; // Get IPK rata-rata lulus const { data: ipkLulusData } = await supabase - .from('status_mahasiswa') - .select('nim, mahasiswa!inner(ipk)') + .from('mahasiswa') + .select('ipk') .eq('status_kuliah', 'Lulus') - .not('mahasiswa.ipk', 'is', null); + .not('ipk', 'is', null); const ipkRataRataLulus = ipkLulusData && ipkLulusData.length > 0 - ? Math.round((ipkLulusData.reduce((sum, item: any) => sum + (item.mahasiswa.ipk || 0), 0) / ipkLulusData.length) * 100) / 100 + ? Math.round((ipkLulusData.reduce((sum, item: any) => sum + (item.ipk || 0), 0) / ipkLulusData.length) * 100) / 100 : 0; const results: MahasiswaTotal = { diff --git a/app/page.tsx b/app/page.tsx index 80f9930..1fc7a13 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -220,7 +220,7 @@ export default function LandingPage() { @@ -280,7 +280,7 @@ export default function LandingPage() { @@ -356,7 +356,7 @@ export default function LandingPage() {