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() {