aboutsummaryrefslogtreecommitdiffstats
path: root/packages/pipeline/migrations/1549479172800-AddTxHashToExchangeEventPrimaryKey.ts
blob: d6ea6c47b78540704c2d21e4b4319a98007223ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { MigrationInterface, QueryRunner } from 'typeorm';

const tableNames = ['exchange_cancel_events', 'exchange_cancel_up_to_events', 'exchange_fill_events'];

const oldPrimaryColumns = ['contract_address', 'log_index', 'block_number'];

const newPrimaryColumns = ['transaction_hash'];

async function updatePrimaryKeysAsync(queryRunner: QueryRunner, columnNames: string[]): Promise<void> {
    for (const tableName of tableNames) {
        const table = await queryRunner.getTable(`raw.${tableName}`);
        if (table === undefined) {
            throw new Error(`Couldn't get table 'raw.${tableName}'`);
        }
        const columns = [];
        for (const columnName of columnNames) {
            const column = table.findColumnByName(columnName);
            if (column === undefined) {
                throw new Error(`Couldn't get column '${columnName}' from table 'raw.${tableName}'`);
            }
            columns.push(column);
        }
        await queryRunner.updatePrimaryKeys(table, columns);
    }
}

export class AddTxHashToExchangeEventPrimaryKey1549479172800 implements MigrationInterface {
    public async up(queryRunner: QueryRunner): Promise<any> {
        await updatePrimaryKeysAsync(queryRunner, oldPrimaryColumns.concat(newPrimaryColumns));
    }

    public async down(queryRunner: QueryRunner): Promise<any> {
        await updatePrimaryKeysAsync(queryRunner, oldPrimaryColumns);
    }
}