Change api status

This commit is contained in:
Randa Firman Putra
2025-07-01 17:59:18 +07:00
parent 6941b8bb8d
commit db82b40a6b
13 changed files with 72 additions and 79 deletions

View File

@@ -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;

View File

@@ -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) {
}
);
}
}
}

View File

@@ -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] = {

View File

@@ -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]) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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',

View File

@@ -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 = {

View File

@@ -220,7 +220,7 @@ export default function LandingPage() {
</div>
<Button type="submit" className="w-full" disabled={loading}>
{loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
Login sebagai Dosen
Login
</Button>
</form>
@@ -280,7 +280,7 @@ export default function LandingPage() {
</div>
<Button type="submit" className="w-full" disabled={loading}>
{loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
Login sebagai Admin
Login
</Button>
</form>
</TabsContent>
@@ -356,7 +356,7 @@ export default function LandingPage() {
</div>
<Button type="submit" className="w-full" disabled={loading}>
{loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
Daftar sebagai Dosen
Daftar
</Button>
</form>