@veramo/data-store
Version:
Veramo data storage plugin based on TypeORM database drivers
81 lines (69 loc) • 3.35 kB
text/typescript
import { MigrationInterface, QueryRunner } from 'typeorm'
import { Presentation } from '../index.js'
import Debug from 'debug'
import { migrationGetExistingTableByName } from './migration-functions.js'
const debug = Debug('veramo:data-store:migrate-presentation-issuance-date')
/**
* Reduce issuanceDate constraint of Presentations.
*
* @public
*/
export class AllowNullIssuanceDateForPresentations1637237492913 implements MigrationInterface {
name = 'AllowNullIssuanceDateForPresentations1637237492913' // Used in case this class gets minified, which would change the classname
async up(queryRunner: QueryRunner): Promise<void> {
if (queryRunner.connection.driver.options.type === 'sqlite') {
debug(`splitting migration into multiple transactions to allow sqlite table updates`)
await queryRunner.commitTransaction()
debug(`turning off foreign keys`)
await queryRunner.query('PRAGMA foreign_keys=off')
await queryRunner.startTransaction()
}
// update issuanceDate column
const table = migrationGetExistingTableByName(queryRunner, 'presentation')
const oldColumn = table?.findColumnByName('issuanceDate')!
const newColumn = oldColumn.clone()
newColumn.isNullable = true
debug(`updating issuanceDate for presentations to allow null`)
await queryRunner.changeColumn(table!, oldColumn, newColumn)
debug(`updated issuanceDate for presentations to allow null`)
if (queryRunner.connection.driver.options.type === 'sqlite') {
debug(`splitting migration into multiple transactions to allow sqlite table updates`)
await queryRunner.commitTransaction()
debug(`turning on foreign keys`)
await queryRunner.query('PRAGMA foreign_keys=on')
await queryRunner.startTransaction()
}
}
async down(queryRunner: QueryRunner): Promise<void> {
if (queryRunner.connection.driver.options.type === 'sqlite') {
debug(`splitting migration into multiple transactions to allow sqlite table updates`)
await queryRunner.commitTransaction()
debug(`turning off foreign keys`)
await queryRunner.query('PRAGMA foreign_keys=off')
await queryRunner.startTransaction()
}
const table = migrationGetExistingTableByName(queryRunner, 'presentation')
debug(`DOWN update NULL 'issuanceDate' with FAKE data for '${table.name}' table`)
await queryRunner.manager
.createQueryBuilder()
.update(Presentation)
.set({ issuanceDate: new Date(0) })
.where('issuanceDate is NULL')
.execute()
// update issuanceDate column
const oldColumn = table?.findColumnByName('issuanceDate')!
const newColumn = oldColumn.clone()
newColumn.isNullable = false
debug(`updating issuanceDate for presentations to NOT allow null`)
await queryRunner.changeColumn(table!, oldColumn, newColumn)
debug(`updated issuanceDate for presentations to NOT allow null`)
if (queryRunner.connection.driver.options.type === 'sqlite') {
debug(`splitting migration into multiple transactions to allow sqlite table updates`)
await queryRunner.commitTransaction()
debug(`turning on foreign keys`)
await queryRunner.query('PRAGMA foreign_keys=on')
await queryRunner.startTransaction()
}
debug(`DOWN updated issuanceDate for presentations to NOT allow null`)
}
}