71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
import 'dotenv/config';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
import db from '../src/database/models/index.js';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
async function seedStateDistrictOnly() {
|
|
console.log('--- Seeding State + District only (no Zone/Region) ---');
|
|
try {
|
|
await db.sequelize.authenticate();
|
|
|
|
const seederPath = path.join(__dirname, '../seeders/20240127-seed-geo-data.js');
|
|
const content = fs.readFileSync(seederPath, 'utf8');
|
|
|
|
const statesMatch = content.match(/const STATES_DATA = \[([\s\S]*?)\];/);
|
|
const citiesMatch = content.match(/const CITIES_DATA = \[([\s\S]*?)\];/);
|
|
|
|
if (!statesMatch || !citiesMatch) {
|
|
throw new Error('Could not parse STATES_DATA / CITIES_DATA from geo seeder.');
|
|
}
|
|
|
|
// Data source is internal seeder, safe to eval.
|
|
const STATES_DATA = eval(`[${statesMatch[1]}]`);
|
|
const CITIES_DATA = eval(`[${citiesMatch[1]}]`);
|
|
|
|
const { State, District } = db;
|
|
const stateIdMap = new Map<number, string>();
|
|
|
|
for (const s of STATES_DATA) {
|
|
const [stateRecord] = await State.findOrCreate({
|
|
where: { name: s.name },
|
|
defaults: {
|
|
name: s.name,
|
|
zoneId: null
|
|
}
|
|
});
|
|
stateIdMap.set(s.id, stateRecord.id);
|
|
}
|
|
|
|
let districtCount = 0;
|
|
for (const c of CITIES_DATA) {
|
|
const stateId = stateIdMap.get(c.state_id);
|
|
if (!stateId) continue;
|
|
|
|
await District.findOrCreate({
|
|
where: { name: c.name, stateId },
|
|
defaults: {
|
|
name: c.name,
|
|
stateId,
|
|
regionId: null,
|
|
zoneId: null,
|
|
city: c.name,
|
|
isActive: true
|
|
}
|
|
});
|
|
districtCount += 1;
|
|
}
|
|
|
|
console.log(`✅ Seeded ${stateIdMap.size} states and ${districtCount} districts.`);
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error('❌ State/District seed failed:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
seedStateDistrictOnly();
|