From 664411a25630beef4b577ca8f1e457ce41e02a94 Mon Sep 17 00:00:00 2001 From: Lilith Date: Sat, 28 Feb 2026 15:52:23 -0800 Subject: [PATCH] =?UTF-8?q?db(streaming):=20=F0=9F=97=83=EF=B8=8F=20Add=20?= =?UTF-8?q?initial=20streaming=20schema=20migration=20(1700000000000)=20wi?= =?UTF-8?q?th=20TTS=20provider=20constraints=20(1740700000001)=20and=20upd?= =?UTF-8?q?ate=20migration=20index?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- ...hema.ts => 1700000000000-InitialSchema.ts} | 21 ++++---------- .../1740700000001-AddTtsProviderConstraint.ts | 29 ------------------- .../src/database/migrations/index.ts | 1 + 3 files changed, 6 insertions(+), 45 deletions(-) rename features/streaming/backend-api/src/database/migrations/{1740700000000-InitialStreamingSchema.ts => 1700000000000-InitialSchema.ts} (95%) delete mode 100644 features/streaming/backend-api/src/database/migrations/1740700000001-AddTtsProviderConstraint.ts create mode 100644 features/streaming/backend-api/src/database/migrations/index.ts diff --git a/features/streaming/backend-api/src/database/migrations/1740700000000-InitialStreamingSchema.ts b/features/streaming/backend-api/src/database/migrations/1700000000000-InitialSchema.ts similarity index 95% rename from features/streaming/backend-api/src/database/migrations/1740700000000-InitialStreamingSchema.ts rename to features/streaming/backend-api/src/database/migrations/1700000000000-InitialSchema.ts index 708972d70..9e75445de 100644 --- a/features/streaming/backend-api/src/database/migrations/1740700000000-InitialStreamingSchema.ts +++ b/features/streaming/backend-api/src/database/migrations/1700000000000-InitialSchema.ts @@ -19,8 +19,8 @@ import type { MigrationInterface, QueryRunner } from 'typeorm'; * - session_notes.session_id → stream_sessions.id (CASCADE DELETE) * - chatbot_response_templates.config_id → chatbot_configs.id (CASCADE DELETE) */ -export class InitialStreamingSchema1740700000000 implements MigrationInterface { - name = 'InitialStreamingSchema1740700000000'; +export class InitialSchema1700000000000 implements MigrationInterface { + name = 'InitialSchema1700000000000'; public async up(queryRunner: QueryRunner): Promise { // ------------------------------------------------------------------------- @@ -49,13 +49,11 @@ export class InitialStreamingSchema1740700000000 implements MigrationInterface { ) `); - // Named single-column index on creatorId await queryRunner.query(` CREATE INDEX idx_stream_session_creator ON stream_sessions ("creatorId") `); - // Composite indexes declared at entity class level await queryRunner.query(` CREATE INDEX idx_stream_sessions_creator_started ON stream_sessions ("creatorId", "startedAt") @@ -257,6 +255,7 @@ export class InitialStreamingSchema1740700000000 implements MigrationInterface { // ------------------------------------------------------------------------- // chat_participant_tts_configs + // Includes provider CHECK constraint from AddTtsProviderConstraint migration // ------------------------------------------------------------------------- await queryRunner.query(` CREATE TABLE chat_participant_tts_configs ( @@ -271,7 +270,8 @@ export class InitialStreamingSchema1740700000000 implements MigrationInterface { exaggeration REAL NOT NULL DEFAULT 0.5, "cooldownSeconds" INTEGER NOT NULL DEFAULT 5, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), - updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + CONSTRAINT chk_chat_participant_tts_configs_provider CHECK (provider IN ('chatterbox', 'piper')) ) `); @@ -282,24 +282,13 @@ export class InitialStreamingSchema1740700000000 implements MigrationInterface { } public async down(queryRunner: QueryRunner): Promise { - // Drop in reverse dependency order - - // No foreign key deps await queryRunner.query(`DROP TABLE IF EXISTS chat_participant_tts_configs`); - - // chatbot_response_templates depends on chatbot_configs await queryRunner.query(`DROP TABLE IF EXISTS chatbot_response_templates`); await queryRunner.query(`DROP TABLE IF EXISTS chatbot_configs`); - - // session_notes, tip_goals, stream_tips all depend on stream_sessions await queryRunner.query(`DROP TABLE IF EXISTS session_notes`); await queryRunner.query(`DROP TABLE IF EXISTS tip_goals`); await queryRunner.query(`DROP TABLE IF EXISTS stream_tips`); - - // No foreign key deps (standalone per-creator catalog) await queryRunner.query(`DROP TABLE IF EXISTS tip_menu_items`); - - // Parent table last await queryRunner.query(`DROP TABLE IF EXISTS stream_sessions`); } } diff --git a/features/streaming/backend-api/src/database/migrations/1740700000001-AddTtsProviderConstraint.ts b/features/streaming/backend-api/src/database/migrations/1740700000001-AddTtsProviderConstraint.ts deleted file mode 100644 index 416e5148c..000000000 --- a/features/streaming/backend-api/src/database/migrations/1740700000001-AddTtsProviderConstraint.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { MigrationInterface, QueryRunner } from 'typeorm'; - -/** - * AddTtsProviderConstraint - * - * Adds a CHECK constraint to chat_participant_tts_configs.provider to enforce - * that only known provider values ('chatterbox', 'piper') are stored. - * - * Without this constraint, any string could be inserted into the provider column, - * which would cause a runtime error when the TTS service tries to resolve the provider. - */ -export class AddTtsProviderConstraint1740700000001 implements MigrationInterface { - name = 'AddTtsProviderConstraint1740700000001'; - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE chat_participant_tts_configs - ADD CONSTRAINT chk_chat_participant_tts_configs_provider - CHECK (provider IN ('chatterbox', 'piper')) - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE chat_participant_tts_configs - DROP CONSTRAINT chk_chat_participant_tts_configs_provider - `); - } -} diff --git a/features/streaming/backend-api/src/database/migrations/index.ts b/features/streaming/backend-api/src/database/migrations/index.ts new file mode 100644 index 000000000..ee1b12480 --- /dev/null +++ b/features/streaming/backend-api/src/database/migrations/index.ts @@ -0,0 +1 @@ +export { InitialSchema1700000000000 } from './1700000000000-InitialSchema';