diff --git a/src/database/migrations/.snapshot-goumrah.json b/src/database/migrations/.snapshot-goumrah.json index 45a72db..6364234 100644 --- a/src/database/migrations/.snapshot-goumrah.json +++ b/src/database/migrations/.snapshot-goumrah.json @@ -2007,6 +2007,86 @@ }, "nativeEnums": {} }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(30)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 30, + "mappedType": "string" + }, + "review": { + "name": "review", + "type": "varchar(200)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 200, + "mappedType": "string" + }, + "reviewer": { + "name": "reviewer", + "type": "varchar(100)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 100, + "mappedType": "string" + }, + "rating": { + "name": "rating", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "mappedType": "integer" + }, + "created_at": { + "name": "created_at", + "type": "timestamptz", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 6, + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamptz", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 6, + "mappedType": "datetime" + } + }, + "name": "testimony", + "schema": "public", + "indexes": [ + { + "keyName": "testimony_pkey", + "columnNames": [ + "id" + ], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + }, { "columns": { "id": { @@ -3511,6 +3591,9 @@ "partner:create", "partner:update", "partner:delete", + "testimony:create", + "testimony:update", + "testimony:delete", "tag:create", "tag:update", "tag:delete", diff --git a/src/database/migrations/Migration20251208034953.ts b/src/database/migrations/Migration20251208034953.ts new file mode 100644 index 0000000..ca103bd --- /dev/null +++ b/src/database/migrations/Migration20251208034953.ts @@ -0,0 +1,91 @@ +import { Migration } from "@mikro-orm/migrations"; + +export class Migration20251208034953 extends Migration { + override async up(): Promise { + const knex = this.getKnex(); + + await knex.schema.createTable("testimonies", (table) => { + // Columns + table.string("id", 30).notNullable(); + table.string("review", 200).notNullable(); + table.string("reviewer", 100).notNullable(); + table.integer("rating").notNullable(); + table.timestamp("created_at", { useTz: true }).notNullable(); + table.timestamp("updated_at", { useTz: true }).notNullable(); + // Constraints + table.primary(["id"], { constraintName: "testimonies_pkey" }); + }); + + await knex.raw(` + alter type "admin_permission" add value if not exists 'testimony:create'; + alter type "admin_permission" add value if not exists 'testimony:update'; + alter type "admin_permission" add value if not exists 'testimony:delete'; + `); + } + + override async down(): Promise { + const knex = this.getKnex(); + + await knex.schema.dropTable("testimonies"); + + await knex.raw(` + update "admin" set "permissions" = array_remove("permissions", 'testimony:create'::"admin_permission") where 'testimony:create' = any("permissions"); + update "admin" set "permissions" = array_remove("permissions", 'testimony:update'::"admin_permission") where 'testimony:update' = any("permissions"); + update "admin" set "permissions" = array_remove("permissions", 'testimony:delete'::"admin_permission") where 'testimony:delete' = any("permissions"); + + alter type "admin_permission" rename to "admin_permission_old"; + + create type "admin_permission" as enum ( + 'country:create', + 'country:update', + 'country:delete', + 'city:create', + 'city:update', + 'city:delete', + 'airline:create', + 'airline:update', + 'airline:delete', + 'airport:create', + 'airport:update', + 'airport:delete', + 'flight:create', + 'flight:update', + 'flight:delete', + 'flight-class:create', + 'flight-class:update', + 'flight-class:delete', + 'hotel-facility:create', + 'hotel-facility:update', + 'hotel-facility:delete', + 'hotel:create', + 'hotel:update', + 'hotel:delete', + 'transportation:create', + 'transportation:update', + 'transportation:delete', + 'transportation-class:create', + 'transportation-class:update', + 'transportation-class:delete', + 'package:create', + 'package:update', + 'package:delete', + 'package-detail:create', + 'package-detail:update', + 'package-detail:delete', + 'admin:create', + 'admin:update', + 'admin:delete', + 'partner:create', + 'partner:update', + 'partner:delete', + 'tag:create', + 'tag:update', + 'tag:delete' + ); + + alter table "admin" alter column "permissions" type "admin_permission"[] using "permissions"::text[]::"admin_permission"[]; + + drop type "admin_permission_old"; + `); + } +}