testing yuk

This commit is contained in:
Randa Firman Putra
2025-09-14 16:59:31 +07:00
parent 248fed0d0b
commit 60211ae829
63 changed files with 315 additions and 315 deletions

View File

@@ -38,20 +38,20 @@ export async function GET(request: Request) {
);
}
// Group by kabupaten and count
// Kelompokkan berdasarkan kabupaten dan hitung
const groupedData = data.reduce((acc, item) => {
acc[item.kabupaten] = (acc[item.kabupaten] || 0) + 1;
return acc;
}, {} as Record<string, number>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: AsalDaerah[] = Object.entries(groupedData)
.map(([kabupaten, jumlah]) => ({
kabupaten,
jumlah
}))
.sort((a, b) => {
// Sort by jumlah DESC, then by kabupaten ASC
// Urutkan berdasarkan jumlah DESC, kemudian kabupaten ASC
if (a.jumlah !== b.jumlah) {
return b.jumlah - a.jumlah;
}

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatanValue = row.tahun_angkatan;
const kabupaten = row.kabupaten;
@@ -58,7 +58,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results
// Urutkan hasil
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return a.tahun_angkatan - b.tahun_angkatan;

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and kabupaten
// Kelompokkan berdasarkan tahun_angkatan dan kabupaten
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const kabupaten = item.kabupaten;
@@ -41,7 +41,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: AsalDaerahLulus[] = Object.entries(groupedData)
.map(([key, jumlah_lulus_tepat_waktu]) => {
const [tahun_angkatan, kabupaten] = key.split('-');
@@ -52,7 +52,7 @@ export async function GET(request: Request) {
};
})
.sort((a, b) => {
// Sort by tahun_angkatan DESC, jumlah_lulus_tepat_waktu DESC
// Urutkan berdasarkan tahun_angkatan DESC, jumlah_lulus_tepat_waktu DESC
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;
}

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatanValue = row.tahun_angkatan;
const kabupaten = row.kabupaten;
@@ -58,7 +58,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results
// Urutkan hasil
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;

View File

@@ -41,7 +41,7 @@ export async function GET(request: Request) {
);
}
// Group by kabupaten, tahun_angkatan (optional), status_kuliah
// Kelompokkan berdasarkan kabupaten, tahun_angkatan (opsional), status_kuliah
const groupedData = data.reduce((acc, item: any) => {
const kabupaten = item.kabupaten;
const tahun_angkatan = tahunAngkatan && tahunAngkatan !== 'all' ? item.tahun_angkatan : undefined;
@@ -53,7 +53,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: AsalDaerahStatus[] = Object.entries(groupedData)
.map(([key, total_mahasiswa]) => {
const parts = key.split('-');
@@ -75,7 +75,7 @@ export async function GET(request: Request) {
}
})
.sort((a, b) => {
// Sort by tahun_angkatan ASC (if exists), kabupaten ASC, status_kuliah ASC
// Urutkan berdasarkan tahun_angkatan ASC (jika ada), kabupaten ASC, status_kuliah ASC
if (a.tahun_angkatan !== undefined && b.tahun_angkatan !== undefined && a.tahun_angkatan !== b.tahun_angkatan) {
return a.tahun_angkatan - b.tahun_angkatan;
}

View File

@@ -28,14 +28,14 @@ export async function GET() {
);
}
// Group by kabupaten and count
// Kelompokkan berdasarkan kabupaten dan hitung
const groupedData = data.reduce((acc, item) => {
const kabupaten = item.kabupaten;
acc[kabupaten] = (acc[kabupaten] || 0) + 1;
return acc;
}, {} as Record<string, number>);
// Convert to array format
// Konversi ke format array
const results: AsalDaerah[] = Object.entries(groupedData).map(([kabupaten, jumlah]) => ({
kabupaten,
jumlah

View File

@@ -39,13 +39,13 @@ export async function GET(request: Request) {
);
}
// Group by jk and count
// Kelompokkan berdasarkan jk dan hitung
const groupedData = data.reduce((acc, item) => {
acc[item.jk] = (acc[item.jk] || 0) + 1;
return acc;
}, {} as Record<string, number>);
// Convert to final format
// Konversi ke format akhir
const results: GenderData[] = Object.entries(groupedData).map(([jk, jumlah]) => ({
tahun_angkatan: parseInt(tahun),
jk,

View File

@@ -25,7 +25,7 @@ export async function GET(request: Request) {
);
}
// Group and calculate statistics in JavaScript
// Kelompokkan dan hitung statistik di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatan = row.tahun_angkatan;
const ipk = row.ipk;
@@ -50,14 +50,14 @@ export async function GET(request: Request) {
return acc;
}, []);
// Calculate average IPK and format the results
// Hitung rata-rata IPK dan format hasil
const result = groupedData.map((group: any) => ({
tahun_angkatan: group.tahun_angkatan,
total_mahasiswa_beasiswa: group.total_mahasiswa_beasiswa,
rata_rata_ipk: Math.round((group.total_ipk / group.total_mahasiswa_beasiswa) * 100) / 100
}));
// Sort by tahun_angkatan ascending
// Urutkan berdasarkan tahun_angkatan ascending
const sortedData = result.sort((a: any, b: any) => a.tahun_angkatan - b.tahun_angkatan);
return NextResponse.json(sortedData);

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and calculate average IPK
// Kelompokkan berdasarkan tahun_angkatan dan hitung rata-rata IPK
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const ipk = item.ipk;
@@ -50,14 +50,14 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<number, { total_ipk: number; count: number }>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: IpkLulusTepat[] = Object.entries(groupedData)
.map(([tahun_angkatan, data]) => ({
tahun_angkatan: parseInt(tahun_angkatan),
rata_rata_ipk: Math.round((data.total_ipk / data.count) * 100) / 100
}))
.sort((a, b) => {
// Sort by tahun_angkatan ASC
// Urutkan berdasarkan tahun_angkatan ASC
return a.tahun_angkatan - b.tahun_angkatan;
});

View File

@@ -25,7 +25,7 @@ export async function GET(request: Request) {
);
}
// Group and calculate statistics in JavaScript
// Kelompokkan dan hitung statistik di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatan = row.tahun_angkatan;
const ipk = row.ipk;
@@ -50,14 +50,14 @@ export async function GET(request: Request) {
return acc;
}, []);
// Calculate average IPK and format the results
// Hitung rata-rata IPK dan format hasil
const result = groupedData.map((group: any) => ({
tahun_angkatan: group.tahun_angkatan,
total_mahasiswa_prestasi: group.total_mahasiswa_prestasi,
rata_rata_ipk: Math.round((group.total_ipk / group.total_mahasiswa_prestasi) * 100) / 100
}));
// Sort by tahun_angkatan ascending
// Urutkan berdasarkan tahun_angkatan ascending
const sortedData = result.sort((a: any, b: any) => a.tahun_angkatan - b.tahun_angkatan);
return NextResponse.json(sortedData);

View File

@@ -42,7 +42,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and status_kuliah
// Kelompokkan berdasarkan tahun_angkatan dan status_kuliah
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const status_kuliah = item.status_kuliah;
@@ -64,7 +64,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, { tahun_angkatan: number; status_kuliah: string; total_mahasiswa: number; total_ipk: number }>);
// Convert to final format and calculate average IPK
// Konversi ke format akhir dan hitung rata-rata IPK
const results: IpkStatus[] = Object.values(groupedData)
.map(item => ({
tahun_angkatan: item.tahun_angkatan,
@@ -73,7 +73,7 @@ export async function GET(request: Request) {
rata_rata_ipk: Math.round((item.total_ipk / item.total_mahasiswa) * 100) / 100
}))
.sort((a, b) => {
// Sort by tahun_angkatan DESC, status_kuliah ASC
// Urutkan berdasarkan tahun_angkatan DESC, status_kuliah ASC
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;
}

View File

@@ -28,7 +28,7 @@ export async function GET() {
);
}
// Group by tahun_angkatan and calculate average IPK
// Kelompokkan berdasarkan tahun_angkatan dan hitung rata-rata IPK
const groupedData = data.reduce((acc, item) => {
const tahun = item.tahun_angkatan;
if (!acc[tahun]) {
@@ -39,7 +39,7 @@ export async function GET() {
return acc;
}, {} as Record<number, { sum: number; count: number }>);
// Convert to final format
// Konversi ke format akhir
const results: IPKData[] = Object.entries(groupedData).map(([tahun, data]) => ({
tahun_angkatan: parseInt(tahun),
rata_rata_ipk: Math.round((data.sum / data.count) * 100) / 100

View File

@@ -17,7 +17,7 @@ export async function GET() {
);
}
// Get unique jenis_beasiswa values
// Ambil nilai jenis_beasiswa yang unik
const uniqueBeasiswa = [...new Set(data.map(item => item.jenis_beasiswa))];
return NextResponse.json(uniqueBeasiswa);

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatanValue = row.tahun_angkatan;
const jenisPendaftaran = row.jenis_pendaftaran;
@@ -58,7 +58,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results
// Urutkan hasil
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and jenis_pendaftaran
// Kelompokkan berdasarkan tahun_angkatan dan jenis_pendaftaran
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const jenis_pendaftaran = item.jenis_pendaftaran;
@@ -41,7 +41,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: JenisPendaftaranLulus[] = Object.entries(groupedData)
.map(([key, jumlah_lulus_tepat_waktu]) => {
const [tahun_angkatan, jenis_pendaftaran] = key.split('-');
@@ -52,7 +52,7 @@ export async function GET(request: Request) {
};
})
.sort((a, b) => {
// Sort by tahun_angkatan DESC, jenis_pendaftaran ASC
// Urutkan berdasarkan tahun_angkatan DESC, jenis_pendaftaran ASC
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;
}

View File

@@ -25,7 +25,7 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatan = row.tahun_angkatan;
const jenisPendaftaran = row.jenis_pendaftaran;
@@ -51,7 +51,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results
// Urutkan hasil
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;

View File

@@ -41,7 +41,7 @@ export async function GET(request: Request) {
);
}
// Group by jenis_pendaftaran, tahun_angkatan, status_kuliah
// Kelompokkan berdasarkan jenis_pendaftaran, tahun_angkatan, status_kuliah
const groupedData = data.reduce((acc, item: any) => {
const jenis_pendaftaran = item.jenis_pendaftaran;
const tahun_angkatan = item.tahun_angkatan;
@@ -51,7 +51,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: JenisPendaftaranStatus[] = Object.entries(groupedData)
.map(([key, total_mahasiswa]) => {
const [jenis_pendaftaran, tahun_angkatan, status_kuliah] = key.split('-');
@@ -63,7 +63,7 @@ export async function GET(request: Request) {
};
})
.sort((a, b) => {
// Sort by tahun_angkatan DESC, jenis_pendaftaran ASC, status_kuliah ASC
// Urutkan berdasarkan tahun_angkatan DESC, jenis_pendaftaran ASC, status_kuliah ASC
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;
}

View File

@@ -37,14 +37,14 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and jenis_pendaftaran
// Kelompokkan berdasarkan tahun_angkatan dan jenis_pendaftaran
const groupedData = data.reduce((acc, item) => {
const key = `${item.tahun_angkatan}-${item.jenis_pendaftaran}`;
acc[key] = (acc[key] || 0) + 1;
return acc;
}, {} as Record<string, number>);
// Convert to final format
// Konversi ke format akhir
const results: JenisPendaftaran[] = Object.entries(groupedData).map(([key, jumlah]) => {
const [tahun_angkatan, jenis_pendaftaran] = key.split('-');
return {
@@ -53,7 +53,7 @@ export async function GET(request: Request) {
jumlah
};
}).sort((a, b) => {
// Sort by tahun_angkatan DESC, then by jenis_pendaftaran
// Urutkan berdasarkan tahun_angkatan DESC, kemudian jenis_pendaftaran
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;
}

View File

@@ -17,7 +17,7 @@ export async function GET() {
);
}
// Get unique jenis_prestasi values
// Ambil nilai jenis_prestasi yang unik
const uniquePrestasi = [...new Set(data.map(item => item.jenis_prestasi))];
return NextResponse.json(uniquePrestasi);

View File

@@ -41,7 +41,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan, status_kuliah, nama_kelompok
// Kelompokkan berdasarkan tahun_angkatan, status_kuliah, nama_kelompok
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const status_kuliah = item.status_kuliah;
@@ -51,7 +51,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: KelompokKeahlianStatus[] = Object.entries(groupedData)
.map(([key, jumlah_mahasiswa]) => {
const [tahun_angkatan, status_kuliah, nama_kelompok] = key.split('-');
@@ -63,7 +63,7 @@ export async function GET(request: Request) {
};
})
.sort((a, b) => {
// Sort by tahun_angkatan ASC, nama_kelompok ASC
// Urutkan berdasarkan tahun_angkatan ASC, nama_kelompok ASC
if (a.tahun_angkatan !== b.tahun_angkatan) {
return a.tahun_angkatan - b.tahun_angkatan;
}

View File

@@ -8,7 +8,7 @@ interface KelompokKeahlianLulusTepat {
export async function GET(request: Request) {
try {
// Get all lulus students with their kelompok keahlian
// Ambil semua mahasiswa lulus dengan kelompok keahlian mereka
const { data, error } = await supabase
.from('mahasiswa')
.select(`
@@ -36,7 +36,7 @@ export async function GET(request: Request) {
);
}
// Process data to calculate percentages
// Proses data untuk menghitung persentase
const groupedData = data.reduce((acc, item: any) => {
const nama_kelompok = item.kelompok_keahlian?.nama_kelompok;
if (!nama_kelompok) return acc;
@@ -50,7 +50,7 @@ export async function GET(request: Request) {
acc[nama_kelompok].total_lulus += 1;
// Check if lulus tepat waktu (semester <= 8)
// Cek apakah lulus tepat waktu (semester <= 8)
if (item.semester <= 8) {
acc[nama_kelompok].lulus_tepat += 1;
}
@@ -58,7 +58,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, { total_lulus: number; lulus_tepat: number }>);
// Convert to final format (without percentage) and sort by count DESC then name ASC
// Konversi ke format akhir (tanpa persentase) dan urutkan berdasarkan jumlah DESC kemudian nama ASC
const results: KelompokKeahlianLulusTepat[] = Object.entries(groupedData)
.map(([nama_kelompok, counts]) => ({
nama_kelompok,

View File

@@ -38,7 +38,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan, nama_kelompok
// Kelompokkan berdasarkan tahun_angkatan, nama_kelompok
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const nama_kelompok = item.kelompok_keahlian?.nama_kelompok;
@@ -47,7 +47,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: KelompokKeahlianStatus[] = Object.entries(groupedData)
.map(([key, jumlah_mahasiswa]) => {
const [tahun_angkatan, nama_kelompok] = key.split('-');
@@ -58,7 +58,7 @@ export async function GET(request: Request) {
};
})
.sort((a, b) => {
// Sort by tahun_angkatan ASC, nama_kelompok ASC
// Urutkan berdasarkan tahun_angkatan ASC, nama_kelompok ASC
if (a.tahun_angkatan !== b.tahun_angkatan) {
return a.tahun_angkatan - b.tahun_angkatan;
}

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and jk
// Kelompokkan berdasarkan tahun_angkatan dan jk
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const jk = item.jk;
@@ -41,7 +41,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format and sort
// Konversi ke format akhir dan urutkan
const results: LulusTepatWaktu[] = Object.entries(groupedData)
.map(([key, jumlah_lulus_tepat_waktu]) => {
const [tahun_angkatan, jk] = key.split('-');
@@ -52,7 +52,7 @@ export async function GET(request: Request) {
};
})
.sort((a, b) => {
// Sort by tahun_angkatan DESC, jk ASC
// Urutkan berdasarkan tahun_angkatan DESC, jk ASC
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;
}

View File

@@ -39,7 +39,7 @@ export async function GET(req: Request) {
);
}
// Group by tahun_angkatan, separate active and graduated students
// Kelompokkan berdasarkan tahun_angkatan, pisahkan mahasiswa aktif dan lulus
const groupedData = data.reduce((acc, item) => {
const tahun = item.tahun_angkatan;
if (!acc[tahun]) {
@@ -65,7 +65,7 @@ export async function GET(req: Request) {
lulus: { sum: number; count: number };
}>);
// Convert to final format
// Konversi ke format akhir
const results: MasaStudiAktifData[] = Object.values(groupedData).map((data) => ({
tahun_angkatan: data.tahun_angkatan,
rata_rata_masa_studi_aktif_tahun: data.aktif.count > 0
@@ -76,7 +76,7 @@ export async function GET(req: Request) {
: 0,
}));
// Sort by tahun_angkatan
// Urutkan berdasarkan tahun_angkatan
results.sort((a, b) => a.tahun_angkatan - b.tahun_angkatan);
return NextResponse.json(results, {

View File

@@ -42,7 +42,7 @@ export async function GET(req: Request) {
);
}
// Group by tahun_angkatan and status_kuliah, calculate average semester/2
// Kelompokkan berdasarkan tahun_angkatan dan status_kuliah, hitung rata-rata semester/2
const groupedData = data.reduce((acc, item) => {
const tahun = item.tahun_angkatan;
const status = item.status_kuliah;
@@ -55,14 +55,14 @@ export async function GET(req: Request) {
return acc;
}, {} as Record<string, { sum: number; count: number; tahun_angkatan: number; status_kuliah: string }>);
// Convert to final format
// Konversi ke format akhir
const results: MasaStudiData[] = Object.values(groupedData).map((data) => ({
tahun_angkatan: data.tahun_angkatan,
status_kuliah: data.status_kuliah,
rata_rata_masa_studi_tahun: Math.round(((data.sum / data.count) / 2) * 10) / 10,
}));
// Sort by tahun_angkatan, status_kuliah
// Urutkan berdasarkan tahun_angkatan, status_kuliah
results.sort((a, b) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return a.tahun_angkatan - b.tahun_angkatan;

View File

@@ -30,7 +30,7 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatanValue = row.mahasiswa?.tahun_angkatan;
const namaBeasiswa = row.nama_beasiswa;
@@ -58,7 +58,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results by tahun_angkatan ascending (as expected by component)
// Urutkan hasil berdasarkan tahun_angkatan ascending (sesuai yang diharapkan komponen)
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return a.tahun_angkatan - b.tahun_angkatan;

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatanValue = row.mahasiswa?.tahun_angkatan;
const namaBeasiswa = row.nama_beasiswa;
@@ -60,7 +60,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results by tahun_angkatan ascending (as expected by component)
// Urutkan hasil berdasarkan tahun_angkatan ascending (sesuai yang diharapkan komponen)
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return a.tahun_angkatan - b.tahun_angkatan;

View File

@@ -43,7 +43,7 @@ interface MahasiswaProfile {
export async function GET(request: Request) {
try {
// Get token from cookies
// Ambil token dari cookies
const cookieStore = await cookies();
const token = cookieStore.get('token')?.value;
@@ -54,7 +54,7 @@ export async function GET(request: Request) {
);
}
// Verify JWT token
// Verifikasi JWT token
const { payload } = await jwtVerify(
token,
new TextEncoder().encode(process.env.JWT_SECRET || 'your-secret-key')
@@ -62,7 +62,7 @@ export async function GET(request: Request) {
const nim = payload.nim as string;
// Get mahasiswa data
// Ambil data mahasiswa
const { data: mahasiswaData, error: mahasiswaError } = await supabase
.from('mahasiswa')
.select(`
@@ -86,14 +86,14 @@ export async function GET(request: Request) {
);
}
// Get status_mahasiswa data
// Ambil data status_mahasiswa
const { data: statusData, error: statusError } = await supabase
.from('status_mahasiswa')
.select('status_kuliah, semester')
.eq('nim', nim)
.single();
// Get prestasi_mahasiswa data
// Ambil data prestasi_mahasiswa
const { data: prestasiData, error: prestasiError } = await supabase
.from('prestasi_mahasiswa')
.select(`
@@ -105,7 +105,7 @@ export async function GET(request: Request) {
`)
.eq('nim', nim);
// Get beasiswa_mahasiswa data
// Ambil data beasiswa_mahasiswa
const { data: beasiswaData, error: beasiswaError } = await supabase
.from('beasiswa_mahasiswa')
.select(`
@@ -116,7 +116,7 @@ export async function GET(request: Request) {
`)
.eq('nim', nim);
// Transform the data to match the expected interface
// Transformasi data sesuai interface yang diharapkan
const profile: MahasiswaProfile = {
// Data Mahasiswa
nama: mahasiswaData.nama,

View File

@@ -3,7 +3,7 @@ import supabase from '@/lib/db';
export async function GET(request: Request) {
try {
// Get all mahasiswa data and process in JavaScript
// Ambil semua data mahasiswa dan proses di JavaScript
const { data: mahasiswaData, error } = await supabase
.from('mahasiswa')
.select('provinsi');
@@ -16,7 +16,7 @@ export async function GET(request: Request) {
);
}
// Process the data in JavaScript
// Proses data di JavaScript
let kalimantanBarat = 0;
let luarKalimantanBarat = 0;
@@ -30,7 +30,7 @@ export async function GET(request: Request) {
}
});
// Transform the data to match the expected format
// Transformasi data sesuai format yang diharapkan
const result = [
{
provinsi: 'Kalimantan Barat',

View File

@@ -23,7 +23,7 @@ export async function OPTIONS() {
export async function GET() {
try {
// Get all mahasiswa data
// Ambil semua data mahasiswa
const { data, error } = await supabase
.from('mahasiswa')
.select('tahun_angkatan, jk');
@@ -43,7 +43,7 @@ export async function GET() {
);
}
// Group by tahun_angkatan and calculate statistics
// Kelompokkan berdasarkan tahun_angkatan dan hitung statistik
const groupedData = data.reduce((acc, item) => {
const tahun = item.tahun_angkatan;
if (!acc[tahun]) {
@@ -65,7 +65,7 @@ export async function GET() {
return acc;
}, {} as Record<number, MahasiswaStatistik>);
// Convert to array and sort by tahun_angkatan
// Konversi ke array dan urutkan berdasarkan tahun_angkatan
const results: MahasiswaStatistik[] = Object.values(groupedData)
.sort((a, b) => a.tahun_angkatan - b.tahun_angkatan);

View File

@@ -38,7 +38,7 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatanValue = row.tahun_angkatan;
const statusKuliah = row.status_kuliah;
@@ -64,7 +64,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results
// Urutkan hasil
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return a.tahun_angkatan - b.tahun_angkatan;

View File

@@ -39,7 +39,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and jk
// Kelompokkan berdasarkan tahun_angkatan dan jk
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const jk = item.jk;
@@ -48,7 +48,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format
// Konversi ke format akhir
const results: StatusMahasiswa[] = Object.entries(groupedData).map(([key, total_mahasiswa]) => {
const [tahun_angkatan, jk] = key.split('-');
return {
@@ -57,7 +57,7 @@ export async function GET(request: Request) {
total_mahasiswa
};
}).sort((a, b) => {
// Sort by tahun_angkatan DESC, then by jk
// Urutkan berdasarkan tahun_angkatan DESC, kemudian jk
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;
}

View File

@@ -22,7 +22,7 @@ export async function GET() {
);
}
// Group by tahun_angkatan and status_kuliah
// Kelompokkan berdasarkan tahun_angkatan dan status_kuliah
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.tahun_angkatan;
const status_kuliah = item.status_kuliah;
@@ -31,7 +31,7 @@ export async function GET() {
return acc;
}, {} as Record<string, number>);
// Convert to final format
// Konversi ke format akhir
const results: StatusData[] = Object.entries(groupedData).map(([key, jumlah]) => {
const [tahun_angkatan, status_kuliah] = key.split('-');
return {

View File

@@ -25,10 +25,10 @@ export async function GET() {
);
}
// Get unique tahun_angkatan values and limit to 7 most recent
// Ambil nilai tahun_angkatan unik dan batasi 7 tahun terbaru
const uniqueYears = [...new Set(data.map(item => item.tahun_angkatan))]
.sort((a, b) => b - a) // Sort descending
.slice(0, 7); // Take only 7 most recent years
.sort((a, b) => b - a) // Urutkan descending
.slice(0, 7); // Ambil hanya 7 tahun terbaru
return NextResponse.json(uniqueYears, {
headers: {

View File

@@ -6,7 +6,7 @@ export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const tahunAngkatan = searchParams.get('tahunAngkatan');
// Build query based on parameters
// Bangun query berdasarkan parameter
let query = supabase
.from('mahasiswa')
.select(`
@@ -17,7 +17,7 @@ export async function GET(request: Request) {
)
`);
// Add tahun angkatan filter if provided and not 'all'
// Tambahkan filter tahun angkatan jika diberikan dan bukan 'all'
if (tahunAngkatan && tahunAngkatan !== 'null' && tahunAngkatan !== 'undefined' && tahunAngkatan !== 'all') {
query = query.eq('tahun_angkatan', parseInt(tahunAngkatan));
}
@@ -32,18 +32,18 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatan = row.tahun_angkatan;
// Handle array of prestasi_mahasiswa
// Tangani array prestasi_mahasiswa
const prestasiArray = Array.isArray(row.prestasi_mahasiswa) ? row.prestasi_mahasiswa : [row.prestasi_mahasiswa];
if (!tahunAngkatan) {
return acc;
}
// Process each prestasi in the array
// Proses setiap prestasi dalam array
prestasiArray.forEach((prestasi: any) => {
if (!prestasi || !prestasi.tingkat_prestasi) {
return;
@@ -72,7 +72,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results
// Urutkan hasil
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;

View File

@@ -7,9 +7,9 @@ export async function GET(request: Request) {
const tahunAngkatan = searchParams.get('tahunAngkatan');
const jenisPrestasi = searchParams.get('jenisPrestasi');
// Validate jenisPrestasi parameter (allow null)
// Validasi parameter jenisPrestasi (izinkan null)
if (jenisPrestasi && jenisPrestasi !== 'null' && jenisPrestasi !== 'undefined') {
// Validate against valid enum values only if jenisPrestasi is provided
// Validasi terhadap nilai enum yang valid hanya jika jenisPrestasi diberikan
const validJenisPrestasi = ['Akademik', 'Non-Akademik'];
if (!validJenisPrestasi.includes(jenisPrestasi)) {
return NextResponse.json(
@@ -19,7 +19,7 @@ export async function GET(request: Request) {
}
}
// Build query based on parameters
// Bangun query berdasarkan parameter
let query = supabase
.from('mahasiswa')
.select(`
@@ -30,12 +30,12 @@ export async function GET(request: Request) {
)
`);
// Add tahun angkatan filter if provided
// Tambahkan filter tahun angkatan jika diberikan
if (tahunAngkatan && tahunAngkatan !== 'null' && tahunAngkatan !== 'undefined') {
query = query.eq('tahun_angkatan', parseInt(tahunAngkatan));
}
// Add jenis prestasi filter if provided
// Tambahkan filter jenis prestasi jika diberikan
if (jenisPrestasi && jenisPrestasi !== 'null' && jenisPrestasi !== 'undefined') {
query = query.eq('prestasi_mahasiswa.jenis_prestasi', jenisPrestasi);
}
@@ -50,18 +50,18 @@ export async function GET(request: Request) {
);
}
// Group and count the data in JavaScript
// Kelompokkan dan hitung data di JavaScript
const groupedData = data.reduce((acc: any[], row: any) => {
const tahunAngkatan = row.tahun_angkatan;
// Handle array of prestasi_mahasiswa
// Tangani array prestasi_mahasiswa
const prestasiArray = Array.isArray(row.prestasi_mahasiswa) ? row.prestasi_mahasiswa : [row.prestasi_mahasiswa];
if (!tahunAngkatan) {
return acc;
}
// Process each prestasi in the array
// Proses setiap prestasi dalam array
prestasiArray.forEach((prestasi: any) => {
if (!prestasi || !prestasi.tingkat_prestasi) {
return;
@@ -90,7 +90,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort the results
// Urutkan hasil
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;

View File

@@ -32,7 +32,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and jk
// Kelompokkan berdasarkan tahun_angkatan dan jk
const groupedData = data.reduce((acc, item: any) => {
const tahun_angkatan = item.mahasiswa.tahun_angkatan;
const jk = item.mahasiswa.jk;
@@ -41,7 +41,7 @@ export async function GET(request: Request) {
return acc;
}, {} as Record<string, number>);
// Convert to final format
// Konversi ke format akhir
const results: BeasiswaData[] = Object.entries(groupedData).map(([key, jumlah_mahasiswa_beasiswa]) => {
const [tahun_angkatan, jk] = key.split('-');
return {
@@ -50,7 +50,7 @@ export async function GET(request: Request) {
jumlah_mahasiswa_beasiswa
};
}).sort((a, b) => {
// Sort by tahun_angkatan DESC, then by jk
// Urutkan berdasarkan tahun_angkatan DESC, kemudian jk
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;
}

View File

@@ -31,7 +31,7 @@ export async function GET(request: Request) {
);
}
// Group by tahun_angkatan and jk
// Kelompokkan berdasarkan tahun_angkatan dan jk
const groupedData = data.reduce((acc: any[], item: any) => {
const tahunAngkatan = item.tahun_angkatan;
const jk = item.jk;
@@ -55,7 +55,7 @@ export async function GET(request: Request) {
return acc;
}, []);
// Sort by tahun_angkatan DESC, then by jk
// Urutkan berdasarkan tahun_angkatan DESC, kemudian jk
const sortedData = groupedData.sort((a: any, b: any) => {
if (a.tahun_angkatan !== b.tahun_angkatan) {
return b.tahun_angkatan - a.tahun_angkatan;

View File

@@ -31,55 +31,55 @@ export async function OPTIONS() {
export async function GET() {
try {
// jumlah mahasiswa
// Jumlah mahasiswa
const { count: totalMahasiswa } = await supabase
.from('mahasiswa')
.select('*', { count: 'exact', head: true });
// Get mahasiswa aktif
// Ambil mahasiswa aktif
const { count: mahasiswaAktif } = await supabase
.from('mahasiswa')
.select('*', { count: 'exact', head: true })
.eq('status_kuliah', 'Aktif');
// Get total lulus
// Ambil total lulus
const { count: totalLulus } = await supabase
.from('mahasiswa')
.select('*', { count: 'exact', head: true })
.eq('status_kuliah', 'Lulus');
// Get pria lulus
// Ambil pria lulus
const { count: priaLulus } = await supabase
.from('mahasiswa')
.select('*', { count: 'exact', head: true })
.eq('status_kuliah', 'Lulus')
.eq('jk', 'Pria');
// Get wanita lulus
// Ambil wanita lulus
const { count: wanitaLulus } = await supabase
.from('mahasiswa')
.select('*', { count: 'exact', head: true })
.eq('status_kuliah', 'Lulus')
.eq('jk', 'Wanita');
// Get total berprestasi
// Ambil total berprestasi
const { count: totalBerprestasi } = await supabase
.from('prestasi_mahasiswa')
.select('*', { count: 'exact', head: true });
// Get prestasi akademik
// Ambil prestasi akademik
const { count: prestasiAkademik } = await supabase
.from('prestasi_mahasiswa')
.select('*', { count: 'exact', head: true })
.eq('jenis_prestasi', 'Akademik');
// Get prestasi non-akademik
// Ambil prestasi non-akademik
const { count: prestasiNonAkademik } = await supabase
.from('prestasi_mahasiswa')
.select('*', { count: 'exact', head: true })
.eq('jenis_prestasi', 'Non-Akademik');
// Get total mahasiswa aktif + lulus
// Ambil total mahasiswa aktif + lulus
const { count: totalMahasiswaAktifLulus } = await supabase
.from('mahasiswa')
.select('*', { count: 'exact', head: true })