Change Database
This commit is contained in:
115
convert_routes.js
Normal file
115
convert_routes.js
Normal file
@@ -0,0 +1,115 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// List of routes to convert
|
||||
const routes = [
|
||||
'app/api/mahasiswa/asal-daerah-angkatan/route.ts',
|
||||
'app/api/mahasiswa/asal-daerah-beasiswa/route.ts',
|
||||
'app/api/mahasiswa/asal-daerah-lulus/route.ts',
|
||||
'app/api/mahasiswa/asal-daerah-prestasi/route.ts',
|
||||
'app/api/mahasiswa/asal-daerah-status/route.ts',
|
||||
'app/api/mahasiswa/gender-per-angkatan/route.ts',
|
||||
'app/api/mahasiswa/ipk-beasiswa/route.ts',
|
||||
'app/api/mahasiswa/ipk-jenis-kelamin/route.ts',
|
||||
'app/api/mahasiswa/ipk-lulus-tepat/route.ts',
|
||||
'app/api/mahasiswa/ipk-prestasi/route.ts',
|
||||
'app/api/mahasiswa/ipk-status/route.ts',
|
||||
'app/api/mahasiswa/jenis-beasiswa/route.ts',
|
||||
'app/api/mahasiswa/jenis-pendaftaran-beasiswa/route.ts',
|
||||
'app/api/mahasiswa/jenis-pendaftaran-lulus/route.ts',
|
||||
'app/api/mahasiswa/jenis-pendaftaran-prestasi/route.ts',
|
||||
'app/api/mahasiswa/jenis-pendaftaran-status/route.ts',
|
||||
'app/api/mahasiswa/jenis-prestasi/route.ts',
|
||||
'app/api/mahasiswa/lulus-tepat-waktu/route.ts',
|
||||
'app/api/mahasiswa/nama-beasiswa/route.ts',
|
||||
'app/api/mahasiswa/profile/route.ts',
|
||||
'app/api/mahasiswa/statistik/route.ts',
|
||||
'app/api/mahasiswa/status-kuliah/route.ts',
|
||||
'app/api/mahasiswa/status-mahasiswa/route.ts',
|
||||
'app/api/mahasiswa/tahun-angkatan/route.ts',
|
||||
'app/api/mahasiswa/tingkat-prestasi/route.ts',
|
||||
'app/api/mahasiswa/total-beasiswa/route.ts',
|
||||
'app/api/mahasiswa/total-prestasi/route.ts',
|
||||
'app/api/auth/check/route.ts',
|
||||
'app/api/auth/login/route.ts',
|
||||
'app/api/auth/register/route.ts'
|
||||
];
|
||||
|
||||
// Template for simple count queries
|
||||
const simpleCountTemplate = (tableName, groupBy = null, whereClause = null) => {
|
||||
let query = `supabase.from('${tableName}').select('*', { count: 'exact', head: true })`;
|
||||
|
||||
if (whereClause) {
|
||||
query += whereClause;
|
||||
}
|
||||
|
||||
return `
|
||||
import { NextResponse } from 'next/server';
|
||||
import supabase from '@/lib/db';
|
||||
|
||||
export async function GET() {
|
||||
try {
|
||||
const { count } = await ${query};
|
||||
|
||||
return NextResponse.json({ count: count || 0 }, {
|
||||
headers: {
|
||||
'Cache-Control': 'public, max-age=60, stale-while-revalidate=30',
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Methods': 'GET, OPTIONS',
|
||||
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error fetching data:', error);
|
||||
return NextResponse.json(
|
||||
{ error: 'Failed to fetch data' },
|
||||
{
|
||||
status: 500,
|
||||
headers: {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Methods': 'GET, OPTIONS',
|
||||
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
}`;
|
||||
};
|
||||
|
||||
// Convert each route
|
||||
routes.forEach(routePath => {
|
||||
try {
|
||||
const content = fs.readFileSync(routePath, 'utf8');
|
||||
|
||||
// Remove MySQL imports
|
||||
let newContent = content
|
||||
.replace(/import.*mysql2.*\n/g, '')
|
||||
.replace(/import.*pool.*from.*@\/lib\/db.*\n/g, 'import supabase from \'@/lib/db\';\n')
|
||||
.replace(/import.*db.*from.*@\/lib\/db.*\n/g, 'import supabase from \'@/lib/db\';\n');
|
||||
|
||||
// Remove RowDataPacket extensions
|
||||
newContent = newContent.replace(/extends RowDataPacket/g, '');
|
||||
|
||||
// Remove connection management
|
||||
newContent = newContent
|
||||
.replace(/const connection = await pool\.getConnection\(\);\s*\n\s*try\s*{/g, 'try {')
|
||||
.replace(/} finally {\s*\n\s*connection\.release\(\);\s*\n\s*}/g, '}');
|
||||
|
||||
// Replace simple queries with Supabase equivalents
|
||||
if (newContent.includes('COUNT(*)')) {
|
||||
// This is a simple count query
|
||||
const tableMatch = newContent.match(/FROM (\w+)/);
|
||||
if (tableMatch) {
|
||||
const tableName = tableMatch[1];
|
||||
newContent = simpleCountTemplate(tableName);
|
||||
}
|
||||
}
|
||||
|
||||
fs.writeFileSync(routePath, newContent);
|
||||
console.log(`✅ Converted: ${routePath}`);
|
||||
} catch (error) {
|
||||
console.error(`❌ Error converting ${routePath}:`, error.message);
|
||||
}
|
||||
});
|
||||
|
||||
console.log('🎉 Route conversion completed!');
|
||||
Reference in New Issue
Block a user