Initial commit
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
const fs = require('fs');
|
||||
const { createClient } = require('@supabase/supabase-js');
|
||||
|
||||
// Parse .env.local
|
||||
const envFile = fs.readFileSync('.env.local', 'utf8');
|
||||
const envVars = {};
|
||||
envFile.split('\n').forEach(line => {
|
||||
const match = line.match(/^([^=]+)=(.*)$/);
|
||||
if (match) envVars[match[1]] = match[2];
|
||||
});
|
||||
|
||||
async function main() {
|
||||
const supabaseUrl = envVars.NEXT_PUBLIC_SUPABASE_URL;
|
||||
const supabaseKey = envVars.SUPABASE_SERVICE_ROLE_KEY;
|
||||
|
||||
if (!supabaseUrl || !supabaseKey) {
|
||||
console.error('Missing Supabase credentials in .env.local');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const supabase = createClient(supabaseUrl, supabaseKey);
|
||||
|
||||
// 1. Upload Sub-districts
|
||||
console.log('Reading GeoJSON...');
|
||||
const geojsonRaw = fs.readFileSync('src/lib/Admin_Kecamatan.json', 'utf8');
|
||||
const geojson = JSON.parse(geojsonRaw);
|
||||
|
||||
for (const feature of geojson.features) {
|
||||
const name = feature.properties?.Ket;
|
||||
if (!name) continue;
|
||||
|
||||
let geom = feature.geometry;
|
||||
if (geom.type === 'Polygon') {
|
||||
geom = {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [geom.coordinates]
|
||||
};
|
||||
}
|
||||
|
||||
console.log(`Uploading ${name}...`);
|
||||
// Supabase auto-casts GeoJSON objects to PostGIS geometry during insert
|
||||
const { error } = await supabase.from('sub_districts').upsert(
|
||||
{ name: name, geom: geom },
|
||||
{ onConflict: 'name' }
|
||||
);
|
||||
|
||||
if (error) {
|
||||
console.error(`Failed to upload ${name}:`, error.message);
|
||||
} else {
|
||||
console.log(`Success: ${name}`);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Trigger updates on existing households to populate the sub_district column
|
||||
console.log('Triggering updates on existing households to populate sub_district...');
|
||||
const { data: households, error: fetchErr } = await supabase.from('households').select('id, location');
|
||||
|
||||
if (fetchErr) {
|
||||
console.error('Error fetching households:', fetchErr);
|
||||
} else if (households && households.length > 0) {
|
||||
console.log(`Found ${households.length} households. Updating...`);
|
||||
for (const hh of households) {
|
||||
// Touching the row will fire the trigger
|
||||
const { error: upErr } = await supabase.from('households').update({ location: hh.location }).eq('id', hh.id);
|
||||
if (upErr) console.error(`Error updating HH ${hh.id}:`, upErr.message);
|
||||
}
|
||||
console.log('Completed household updates.');
|
||||
} else {
|
||||
console.log('No households found to update.');
|
||||
}
|
||||
|
||||
console.log('Migration complete.');
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user