Change api status
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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] = {
|
||||
|
||||
@@ -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]) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user