import { db } from "./src/db"; import { mapTable } from "./src/db/schema"; import { eq } from "drizzle-orm"; async function reorderMapPoints() { try { console.log("🚀 Начинаю обработку точек на карте...\n"); // Получаем все записи из таблицы map const allPoints = await db.query.mapTable.findMany({ orderBy: (mapTable, { asc }) => [asc(mapTable.city), asc(mapTable.id)], }); if (allPoints.length === 0) { console.log("⚠️ Записей в таблице map не найдено."); return; } console.log(`📊 Найдено записей: ${allPoints.length}`); // Группируем точки по городам const pointsByCity = new Map>(); for (const point of allPoints) { if (!pointsByCity.has(point.city)) { pointsByCity.set(point.city, []); } pointsByCity.get(point.city)!.push(point); } console.log(`🏙️ Найдено городов: ${pointsByCity.size}\n`); // Обновляем order для каждого города let totalUpdated = 0; for (const [city, points] of pointsByCity) { console.log(`📍 Обрабатываю город: ${city} (${points.length} точек)`); // Обновляем каждую точку с новым значением order const updatePromises = points.map((point, index) => db .update(mapTable) .set({ order: index }) .where(eq(mapTable.id, point.id)) ); await Promise.all(updatePromises); totalUpdated += points.length; console.log( ` ✅ Обновлено: ${points.length} точек (order: 0-${ points.length - 1 })` ); } console.log("\n" + "=".repeat(50)); console.log(`✨ Успешно завершено!`); console.log(`📊 Статистика:`); console.log(` - Всего городов: ${pointsByCity.size}`); console.log(` - Всего обновлено точек: ${totalUpdated}`); console.log("=".repeat(50)); process.exit(0); } catch (error) { console.error("\n❌ Ошибка при выполнении скрипта:"); console.error(error); process.exit(1); } } // Запускаем скрипт reorderMapPoints();