import { db } from "../src/db/client.js"; import { CircuitRepository } from "../src/db/repositories/circuit.repository.js"; import { CircuitListRepository } from "../src/db/repositories/circuit-list.repository.js"; import { CircuitSectionRepository } from "../src/db/repositories/circuit-section.repository.js"; import { LegacyConsumerMigrationRepository } from "../src/db/repositories/legacy-consumer-migration.repository.js"; import { ProjectRepository } from "../src/db/repositories/project.repository.js"; import { RoomRepository } from "../src/db/repositories/room.repository.js"; import { LegacyConsumerMigrationService } from "../src/domain/services/legacy-consumer-migration.service.js"; const projectRepository = new ProjectRepository(); const circuitListRepository = new CircuitListRepository(); const migrationRepository = new LegacyConsumerMigrationRepository(db); const migrationService = new LegacyConsumerMigrationService({ circuitListReader: circuitListRepository, sectionStore: new CircuitSectionRepository(), circuitReader: new CircuitRepository(), roomReader: new RoomRepository(), migrationStore: migrationRepository, }); async function run() { const projects = await projectRepository.list(); const reports = []; for (const project of projects) { const lists = await circuitListRepository.listByProject(project.id); for (const list of lists) { const report = await migrationService.migrateCircuitList(project.id, list.id); reports.push({ projectId: project.id, circuitListId: list.id, legacyConsumerCount: report.legacyConsumerCount, createdCircuitCount: report.createdCircuitCount, createdDeviceRowCount: report.createdDeviceRowCount, generatedIdentifiers: report.generatedIdentifiers.length, unassignedRows: report.unassignedRows.length, }); } } const unmigratedConsumers = await migrationRepository.listUnmigratedConsumers(); if (unmigratedConsumers.length > 0) { const withoutCircuitList = unmigratedConsumers.filter( (consumer) => !consumer.circuitListId ).length; throw new Error( `Cutover verification failed: ${unmigratedConsumers.length} legacy consumer(s) remain unmigrated` + ` (${withoutCircuitList} without a circuit list).` ); } console.log("Legacy consumer migration summary:"); console.table(reports); console.log("Cutover verification passed: all legacy consumers are mapped."); } run().catch((error) => { console.error("Legacy consumer migration failed:", error); process.exit(1); });