import { MigrationInterface, QueryRunner, Table, TableIndex } from "typeorm"

export class CreateAppContentTable1788164943000 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.createTable(
      new Table({
        name: "app_content",
        columns: [
          {
            name: "id",
            type: "bigint",
            unsigned: true,
            isPrimary: true,
            isGenerated: true,
            generationStrategy: "increment",
          },
          {
            name: "field_ref_no",
            type: "varchar",
            length: "10",
            isNullable: false,
          },
          {
            name: "title",
            type: "text",
            isNullable: true,
          },
          {
            name: "title_format",
            type: "varchar",
            length: "10",
            isNullable: false,
            default: "'text'",
          },
          {
            name: "description",
            type: "text",
            isNullable: true,
          },
          {
            name: "description_format",
            type: "varchar",
            length: "10",
            isNullable: false,
            default: "'text'",
          },
          {
            name: "created_at",
            type: "timestamp",
            default: "CURRENT_TIMESTAMP",
          },
          {
            name: "updated_at",
            type: "timestamp",
            isNullable: true,
          },
          {
            name: "deleted_at",
            type: "timestamp",
            isNullable: true,
          },
        ],
        engine: "InnoDB",
      }),
    )

    // Unique across soft-deleted rows too, so a ref number is never reused.
    await queryRunner.createIndex(
      "app_content",
      new TableIndex({
        name: "IDX_app_content_field_ref_no",
        columnNames: ["field_ref_no"],
        isUnique: true,
      }),
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.dropIndex("app_content", "IDX_app_content_field_ref_no")
    await queryRunner.dropTable("app_content")
  }
}
