refactor(core): Add addColumns and dropColumns to the migrations DSL (no-changelog) (#7073)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2023-09-01 15:19:49 +02:00
committed by GitHub
parent 51093f649d
commit 97f87ae0fc
7 changed files with 69 additions and 83 deletions

View File

@@ -41,7 +41,7 @@ export class Column {
return this;
}
timestamp(msPrecision?: number) {
timestamp(msPrecision = 3) {
this.type = 'timestamp';
this.length = msPrecision ?? 'auto';
return this;

View File

@@ -1,5 +1,5 @@
import type { TableForeignKeyOptions, TableIndexOptions } from 'typeorm';
import { Table, QueryRunner } from 'typeorm';
import { Table, QueryRunner, TableColumn } from 'typeorm';
import LazyPromise from 'p-lazy';
import { Column } from './Column';
@@ -31,8 +31,8 @@ export class CreateTable extends TableOperation {
get withTimestamps() {
this.columns.push(
new Column('createdAt').timestamp(3).notNull.default('NOW()'),
new Column('updatedAt').timestamp(3).notNull.default('NOW()'),
new Column('createdAt').timestamp().notNull.default('NOW()'),
new Column('updatedAt').timestamp().notNull.default('NOW()'),
);
return this;
}
@@ -80,3 +80,39 @@ export class DropTable extends TableOperation {
return queryRunner.dropTable(`${prefix}${name}`, true);
}
}
export class AddColumns extends TableOperation {
constructor(
tableName: string,
protected columns: Column[],
prefix: string,
queryRunner: QueryRunner,
) {
super(tableName, prefix, queryRunner);
}
async execute(queryRunner: QueryRunner) {
const { driver } = queryRunner.connection;
const { tableName, prefix, columns } = this;
return queryRunner.addColumns(
`${prefix}${tableName}`,
columns.map((c) => new TableColumn(c.toOptions(driver))),
);
}
}
export class DropColumns extends TableOperation {
constructor(
tableName: string,
protected columnNames: string[],
prefix: string,
queryRunner: QueryRunner,
) {
super(tableName, prefix, queryRunner);
}
async execute(queryRunner: QueryRunner) {
const { tableName, prefix, columnNames } = this;
return queryRunner.dropColumns(`${prefix}${tableName}`, columnNames);
}
}

View File

@@ -1,6 +1,6 @@
import type { QueryRunner } from 'typeorm';
import { Column } from './Column';
import { CreateTable, DropTable } from './Table';
import { AddColumns, CreateTable, DropColumns, DropTable } from './Table';
import { CreateIndex, DropIndex } from './Indices';
export const createSchemaBuilder = (tablePrefix: string, queryRunner: QueryRunner) => ({
@@ -11,6 +11,11 @@ export const createSchemaBuilder = (tablePrefix: string, queryRunner: QueryRunne
dropTable: (tableName: string) => new DropTable(tableName, tablePrefix, queryRunner),
addColumns: (tableName: string, columns: Column[]) =>
new AddColumns(tableName, columns, tablePrefix, queryRunner),
dropColumns: (tableName: string, columnNames: string[]) =>
new DropColumns(tableName, columnNames, tablePrefix, queryRunner),
createIndex: (
tableName: string,
columnNames: string[],