From 774f506822b88deb5cd8c608ccdf7d75de510d04 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Wed, 25 Mar 2026 23:56:30 -0700 Subject: [PATCH] =?UTF-8?q?db(migrations):=20=F0=9F=97=83=EF=B8=8F=20Add?= =?UTF-8?q?=20QAReports=20table=20migration=20and=20update=20migration=20i?= =?UTF-8?q?ndex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .../1720000000000-CreateQAReports.ts | 64 +++++++++++++++++++ .../src/database/migrations/index.ts | 1 + 2 files changed, 65 insertions(+) create mode 100644 features/platform-admin/backend-api/src/database/migrations/1720000000000-CreateQAReports.ts diff --git a/features/platform-admin/backend-api/src/database/migrations/1720000000000-CreateQAReports.ts b/features/platform-admin/backend-api/src/database/migrations/1720000000000-CreateQAReports.ts new file mode 100644 index 000000000..d0c3db5cd --- /dev/null +++ b/features/platform-admin/backend-api/src/database/migrations/1720000000000-CreateQAReports.ts @@ -0,0 +1,64 @@ +import { MigrationInterface, QueryRunner, Table, TableIndex } from 'typeorm'; + +export class CreateQAReports1720000000000 implements MigrationInterface { + name = 'CreateQAReports1720000000000'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`); + + await queryRunner.query(` + CREATE TYPE "qa_report_category_enum" AS ENUM ('bug', 'ui', 'performance', 'other') + `); + await queryRunner.query(` + CREATE TYPE "qa_report_severity_enum" AS ENUM ('low', 'medium', 'high', 'critical') + `); + await queryRunner.query(` + CREATE TYPE "qa_report_status_enum" AS ENUM ('new', 'triaged', 'in_progress', 'resolved', 'closed') + `); + + await queryRunner.createTable( + new Table({ + name: 'qa_reports', + columns: [ + { name: 'id', type: 'uuid', isPrimary: true, default: 'uuid_generate_v4()' }, + { name: 'title', type: 'varchar', length: '255' }, + { name: 'description', type: 'text' }, + { name: 'category', type: 'qa_report_category_enum' }, + { name: 'severity', type: 'qa_report_severity_enum' }, + { name: 'status', type: 'qa_report_status_enum', default: "'new'" }, + { name: 'pageUrl', type: 'varchar', length: '2048' }, + { name: 'sourceDomain', type: 'varchar', length: '255' }, + { name: 'userAgent', type: 'varchar', length: '512', isNullable: true }, + { name: 'browserName', type: 'varchar', length: '64', isNullable: true }, + { name: 'browserVersion', type: 'varchar', length: '64', isNullable: true }, + { name: 'osName', type: 'varchar', length: '64', isNullable: true }, + { name: 'screenResolution', type: 'varchar', length: '32', isNullable: true }, + { name: 'reporterEmail', type: 'varchar', length: '255', isNullable: true }, + { name: 'reporterUserId', type: 'uuid', isNullable: true }, + { name: 'adminNotes', type: 'text', isNullable: true }, + { name: 'assignedTo', type: 'uuid', isNullable: true }, + { name: 'triagedAt', type: 'timestamp', isNullable: true }, + { name: 'resolvedAt', type: 'timestamp', isNullable: true }, + { name: 'createdAt', type: 'timestamp', default: 'now()' }, + { name: 'updatedAt', type: 'timestamp', default: 'now()' }, + ], + }), + true, + ); + + await queryRunner.createIndices('qa_reports', [ + new TableIndex({ name: 'IDX_qa_reports_status', columnNames: ['status'] }), + new TableIndex({ name: 'IDX_qa_reports_severity', columnNames: ['severity'] }), + new TableIndex({ name: 'IDX_qa_reports_category', columnNames: ['category'] }), + new TableIndex({ name: 'IDX_qa_reports_sourceDomain', columnNames: ['sourceDomain'] }), + new TableIndex({ name: 'IDX_qa_reports_createdAt', columnNames: ['createdAt'] }), + ]); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropTable('qa_reports', true); + await queryRunner.query('DROP TYPE IF EXISTS "qa_report_status_enum"'); + await queryRunner.query('DROP TYPE IF EXISTS "qa_report_severity_enum"'); + await queryRunner.query('DROP TYPE IF EXISTS "qa_report_category_enum"'); + } +} diff --git a/features/platform-admin/backend-api/src/database/migrations/index.ts b/features/platform-admin/backend-api/src/database/migrations/index.ts index b875f392b..8700c1594 100644 --- a/features/platform-admin/backend-api/src/database/migrations/index.ts +++ b/features/platform-admin/backend-api/src/database/migrations/index.ts @@ -1,2 +1,3 @@ export { InitialSchema1700000000000 } from './1700000000000-InitialSchema'; export { ContentModerationSchema1710000000000 } from './1710000000000-ContentModerationSchema'; +export { CreateQAReports1720000000000 } from './1720000000000-CreateQAReports';