Change Alur Aplikasi
This commit is contained in:
94
app/api/keloladata/update-semester/route.ts
Normal file
94
app/api/keloladata/update-semester/route.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import supabase from '@/lib/db';
|
||||
|
||||
export async function POST() {
|
||||
try {
|
||||
// Get current date
|
||||
const currentDate = new Date();
|
||||
const currentYear = currentDate.getFullYear();
|
||||
const currentMonth = currentDate.getMonth() + 1; // getMonth() returns 0-11
|
||||
|
||||
// Get all active students
|
||||
const { data: activeStudents, error: fetchError } = await supabase
|
||||
.from('mahasiswa')
|
||||
.select('nim, tahun_angkatan, semester')
|
||||
.eq('status_kuliah', 'Aktif');
|
||||
|
||||
if (fetchError) {
|
||||
console.error('Error fetching active students:', fetchError);
|
||||
return NextResponse.json(
|
||||
{ message: "Gagal mengambil data mahasiswa aktif" },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
|
||||
if (!activeStudents || activeStudents.length === 0) {
|
||||
return NextResponse.json({
|
||||
message: "Tidak ada mahasiswa aktif yang ditemukan",
|
||||
affectedRows: 0
|
||||
});
|
||||
}
|
||||
|
||||
let updatedCount = 0;
|
||||
const errors: string[] = [];
|
||||
|
||||
// Update semester for each active student
|
||||
for (const student of activeStudents) {
|
||||
try {
|
||||
const tahunAngkatan = student.tahun_angkatan;
|
||||
if (!tahunAngkatan) {
|
||||
errors.push(`Mahasiswa NIM ${student.nim}: Tahun angkatan tidak ditemukan`);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Calculate current semester based on tahun_angkatan and current date
|
||||
const yearsSinceEnrollment = currentYear - tahunAngkatan;
|
||||
let currentSemester = yearsSinceEnrollment * 2; // 2 semesters per year
|
||||
|
||||
// Adjust for current month (odd months = odd semesters, even months = even semesters)
|
||||
if (currentMonth >= 2 && currentMonth <= 7) {
|
||||
// February to July = odd semester (1, 3, 5, etc.)
|
||||
currentSemester += 1;
|
||||
} else {
|
||||
// August to January = even semester (2, 4, 6, etc.)
|
||||
currentSemester += 2;
|
||||
}
|
||||
|
||||
// Cap at semester 14 (7 years)
|
||||
if (currentSemester > 14) {
|
||||
currentSemester = 14;
|
||||
}
|
||||
|
||||
// Update semester if different
|
||||
if (student.semester !== currentSemester) {
|
||||
const { error: updateError } = await supabase
|
||||
.from('mahasiswa')
|
||||
.update({ semester: currentSemester })
|
||||
.eq('nim', student.nim);
|
||||
|
||||
if (updateError) {
|
||||
errors.push(`Mahasiswa NIM ${student.nim}: Gagal memperbarui semester: ${updateError.message}`);
|
||||
} else {
|
||||
updatedCount++;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Error updating semester for mahasiswa NIM ${student.nim}:`, error);
|
||||
errors.push(`Mahasiswa NIM ${student.nim}: Terjadi kesalahan: ${(error as Error).message}`);
|
||||
}
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
message: `Berhasil memperbarui semester untuk ${updatedCount} mahasiswa`,
|
||||
affectedRows: updatedCount,
|
||||
errors: errors.length > 0 ? errors : undefined
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error in update semester:', error);
|
||||
return NextResponse.json(
|
||||
{ message: "Terjadi kesalahan internal server" },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user