summary refs log tree commit diff
path: root/src/database/migration/postgres/1776450647001-AllSimpleArraysToPgArrays.ts
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-06-11 23:18:02 +0200
committerRory& <root@rory.gay>2026-06-12 17:58:18 +0200
commit83e60464ad2675f09ddee02f6b166bef22f53f33 (patch)
tree9e12033c00c8420166f52c397b461cad288277fe /src/database/migration/postgres/1776450647001-AllSimpleArraysToPgArrays.ts
parentFix recursive import in database (diff)
downloadserver-ts-83e60464ad2675f09ddee02f6b166bef22f53f33.tar.xz
Move migrations to database
Diffstat (limited to 'src/database/migration/postgres/1776450647001-AllSimpleArraysToPgArrays.ts')
-rw-r--r--src/database/migration/postgres/1776450647001-AllSimpleArraysToPgArrays.ts41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/database/migration/postgres/1776450647001-AllSimpleArraysToPgArrays.ts b/src/database/migration/postgres/1776450647001-AllSimpleArraysToPgArrays.ts
new file mode 100644

index 00000000..44d2c591 --- /dev/null +++ b/src/database/migration/postgres/1776450647001-AllSimpleArraysToPgArrays.ts
@@ -0,0 +1,41 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AllSimpleArraysToPgArrays1776450647001 implements MigrationInterface { + name = "AllSimpleArraysToPgArrays1776450647001"; + + public async up(queryRunner: QueryRunner): Promise<void> { + await this.cleanAndConvertToArray(queryRunner, "applications", "redirect_uris", "varchar"); + await this.cleanAndConvertToArray(queryRunner, "applications", "tags", "varchar"); + // await this.cleanAndConvertToArray(queryRunner, "applications", "rpc_origins", "varchar"); + + await this.cleanAndConvertToArray(queryRunner, "automod_rules", "exempt_channels", "int8"); + await this.cleanAndConvertToArray(queryRunner, "automod_rules", "exempt_roles", "int8"); + + await this.cleanAndConvertToArray(queryRunner, "connected_accounts", "integrations", "varchar"); + + await this.cleanAndConvertToArray(queryRunner, "emojis", "roles", "int8"); + await this.cleanAndConvertToArray(queryRunner, "emojis", "groups", "int8"); + + await this.cleanAndConvertToArray(queryRunner, "guilds", "features", "varchar"); + + await this.cleanAndConvertToArray(queryRunner, "members", "theme_colors", "int4"); + + await this.cleanAndConvertToArray(queryRunner, "team_members", "permissions", "varchar"); + + await this.cleanAndConvertToArray(queryRunner, "users", "theme_colors", "int4"); + await this.cleanAndConvertToArray(queryRunner, "users", "fingerprints", "varchar"); + await this.cleanAndConvertToArray(queryRunner, "users", "badge_ids", "int8"); + } + + public async down(queryRunner: QueryRunner): Promise<void> { + console.log(`Migration ${this.name}.down() not implemented`); + } + + private async cleanAndConvertToArray(queryRunner: QueryRunner, table: string, column: string, type: string) { + // spacebar was randomly adding json data into CSV values, unwrap them + await queryRunner.query(`UPDATE ${table} SET ${column} = REPLACE(${column}, '"', '') WHERE ${column} ~ '"';`); + await queryRunner.query(`UPDATE ${table} SET ${column} = REPLACE(${column}, '[', '') WHERE ${column} ~ '\\[';`); + await queryRunner.query(`UPDATE ${table} SET ${column} = REPLACE(${column}, ']', '') WHERE ${column} ~ '\\]';`); + await queryRunner.query(`ALTER TABLE ${table} ALTER COLUMN ${column} TYPE ${type}[] USING string_to_array(${column}, ',')::${type}[];`); + } +}