48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
|
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<void> {
|
||
|
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<string> }>((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<void> {
|
||
|
await queryRunner.dropColumn("member", "internalId");
|
||
|
}
|
||
|
}
|