import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"; import { membership } from "../entity/membership"; import { member } from "../entity/member"; export class InternalId1735822722235 implements MigrationInterface { name = "InternalId1735822722235"; public async up(queryRunner: QueryRunner): Promise { await queryRunner.addColumn( "member", new TableColumn({ name: "internalId", type: "varchar", length: "255", default: null, isNullable: true, isUnique: true, }) ); let memberships = await queryRunner.manager.getRepository(membership).find(); console.log(memberships); let internalIds = memberships.reduce<{ [key: number]: Array }>((acc, cur) => { let memberId = cur.memberId; let setIds = acc[memberId] ?? []; if (cur?.internalId) { setIds.push(cur.internalId); } acc[memberId] = setIds; return acc; }, {}); console.log(internalIds); for (const [id, value] of Object.entries(internalIds)) { const ids = value.filter((v) => v != null).join(", "); if (ids) { let m = await queryRunner.manager.getRepository(member).findOneByOrFail({ id: parseInt(id) }); m.internalId = ids; await queryRunner.manager.getRepository(member).save(m); } } } public async down(queryRunner: QueryRunner): Promise { await queryRunner.dropColumn("member", "internalId"); } }