65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import fs from 'fs'
|
|
import path from 'path'
|
|
import { PrismaClient } from '@prisma/client'
|
|
|
|
export async function seedCities(prisma: PrismaClient) {
|
|
|
|
const statesFolder = path.join(process.cwd(), 'states-cities')
|
|
const files = fs.readdirSync(statesFolder)
|
|
|
|
for (const file of files) {
|
|
if (!file.endsWith('.json')) continue
|
|
|
|
const stateName = file.replace('.json', '')
|
|
|
|
const state = await prisma.states.findFirst({
|
|
where: {
|
|
stateName: {
|
|
equals: stateName,
|
|
mode: 'insensitive',
|
|
},
|
|
},
|
|
})
|
|
|
|
if (!state) {
|
|
console.log(`❌ State not found: ${stateName}`)
|
|
continue
|
|
}
|
|
|
|
const filePath = path.join(statesFolder, file)
|
|
const rawData = JSON.parse(fs.readFileSync(filePath, 'utf-8'))
|
|
|
|
if (!rawData.districts) {
|
|
console.log(`❌ Invalid structure in ${file}`)
|
|
continue
|
|
}
|
|
|
|
const allVillages: string[] = []
|
|
|
|
for (const district of rawData.districts) {
|
|
for (const sub of district.subDistricts || []) {
|
|
for (const village of sub.villages || []) {
|
|
if (village && village.trim()) {
|
|
allVillages.push(village.trim())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log(`📦 Total villages found in ${stateName}:`, allVillages.length)
|
|
|
|
const result = await prisma.cities.createMany({
|
|
data: allVillages.map((village) => ({
|
|
stateXid: state.id,
|
|
cityName: village,
|
|
})),
|
|
skipDuplicates: true,
|
|
})
|
|
|
|
console.log(`✅ ${stateName} inserted: ${result.count}`)
|
|
}
|
|
|
|
console.log('🎉 All states processed successfully!')
|
|
}
|
|
|