Files
rltn/migrate-json-to-db.js

114 lines
3.9 KiB
JavaScript

// Скрипт для миграции коллайдеров из JSON в базу данных
// Файл: migrate-json-to-db.js
const fs = require('fs');
const path = require('path');
const { query } = require('./db');
async function migrateJsonToDb() {
try {
console.log('🚀 Запуск миграции коллайдеров из JSON в базу данных...');
// Читаем JSON файл
const jsonPath = path.join(__dirname, 'public', 'colliders_city_1.json');
if (!fs.existsSync(jsonPath)) {
console.log('❌ JSON файл не найден:', jsonPath);
return;
}
const jsonContent = fs.readFileSync(jsonPath, 'utf8');
const data = JSON.parse(jsonContent);
if (!data.colliders || !Array.isArray(data.colliders)) {
console.log('❌ Неверный формат JSON файла');
return;
}
console.log(`📊 Найдено ${data.colliders.length} коллайдеров в JSON файле`);
// Начинаем транзакцию
await query('BEGIN');
// Очищаем существующие коллайдеры для города 1
await query('DELETE FROM colliders WHERE city_id = $1', [1]);
console.log('🗑️ Очищены существующие коллайдеры для города 1');
// Вставляем коллайдеры из JSON
let insertedCount = 0;
for (const collider of data.colliders) {
try {
await query(`
INSERT INTO colliders (
city_id, type,
position_x, position_y, position_z,
rotation_x, rotation_y, rotation_z,
scale_x, scale_y, scale_z,
color_r, color_g, color_b,
opacity
) VALUES (
$1, $2,
$3, $4, $5,
$6, $7, $8,
$9, $10, $11,
$12, $13, $14,
$15
)
`, [
1, // city_id
collider.type || 'box',
collider.position?.x || 0,
collider.position?.y || 0,
collider.position?.z || 0,
collider.rotation?.x || 0,
collider.rotation?.y || 0,
collider.rotation?.z || 0,
collider.scale?.x || 1,
collider.scale?.y || 1,
collider.scale?.z || 1,
collider.color?.r || 1,
collider.color?.g || 0,
collider.color?.b || 0,
collider.opacity || 0.3
]);
insertedCount++;
console.log(`✅ Коллайдер ${insertedCount} мигрирован:`, {
type: collider.type,
position: collider.position,
color: collider.color
});
} catch (error) {
console.error(`❌ Ошибка при миграции коллайдера ${insertedCount + 1}:`, error);
throw error;
}
}
// Подтверждаем транзакцию
await query('COMMIT');
console.log(`🎉 Миграция завершена успешно!`);
console.log(`📊 Мигрировано ${insertedCount} коллайдеров из JSON в базу данных`);
// Проверяем результат
const result = await query('SELECT COUNT(*) as count FROM colliders WHERE city_id = $1', [1]);
console.log(`🔍 Проверка: в БД теперь ${result.rows[0].count} коллайдеров для города 1`);
} catch (error) {
// Откатываем транзакцию в случае ошибки
await query('ROLLBACK');
console.error('💥 Ошибка при миграции:', error);
process.exit(1);
}
}
// Запускаем миграцию
migrateJsonToDb().then(() => {
console.log('🚀 Миграция JSON -> БД завершена!');
process.exit(0);
}).catch(error => {
console.error('💥 Критическая ошибка:', error);
process.exit(1);
});