62 lines
2.5 KiB
TypeScript
62 lines
2.5 KiB
TypeScript
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(db);
|
|
const circuitListRepository = new CircuitListRepository(db);
|
|
const migrationRepository = new LegacyConsumerMigrationRepository(db);
|
|
const migrationService = new LegacyConsumerMigrationService({
|
|
circuitListReader: circuitListRepository,
|
|
sectionStore: new CircuitSectionRepository(db),
|
|
circuitReader: new CircuitRepository(db),
|
|
roomReader: new RoomRepository(db),
|
|
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);
|
|
});
|