import { readFile } from 'fs/promises';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
import { waitForElasticsearch, createIndexIfNotExists } from './client.js';
import { CitiesRepository } from './cities-repository.js';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
/**
* Initialize the database with Italian cities
*/
async function initDatabase(): Promise<void> {
console.log('Starting database initialization...');
try {
// Wait for Elasticsearch
await waitForElasticsearch();
// Create index
await createIndexIfNotExists();
// Load cities data
const dataPath = join(__dirname, '..', '..', 'data', 'init-cities.json');
const citiesData = await readFile(dataPath, 'utf-8');
const cities: { nome: string }[] = JSON.parse(citiesData);
// Initialize repository
const repository = new CitiesRepository();
// Check if database is already populated
const existingCities = await repository.getAllCities();
if (existingCities.length > 0) {
console.log(`Database already contains ${existingCities.length} cities. Skipping initialization.`);
return;
}
// Insert cities
console.log(`Inserting ${cities.length} cities...`);
for (const city of cities) {
await repository.createCity({ nome: city.nome });
console.log(` ✓ Added: ${city.nome}`);
}
console.log(`Database initialization completed successfully! ${cities.length} cities added.`);
} catch (error) {
console.error('Error initializing database:', error);
throw error;
}
}
// Run initialization if this script is executed directly
if (import.meta.url === `file://${process.argv[1]}`) {
initDatabase()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
}
export { initDatabase };