refactor(db): migrate tts_segments to settings_json and update indexes

Switch tts_segments schema to use settings_json (jsonb for Postgres, text for SQLite)
instead of settings_hash. Update related indexes and migration SQL. Regenerate
Drizzle snapshots to reflect the new structure. This improves flexibility for
storing TTS settings and enables more robust segment lookups.
This commit is contained in:
Richard R 2026-05-04 13:22:58 -06:00
parent 222d221e81
commit 71cef7b540
8 changed files with 2547 additions and 16 deletions

View file

@ -1,3 +1,4 @@
DROP TABLE IF EXISTS "tts_segments" CASCADE;--> statement-breakpoint
CREATE TABLE "tts_segments" (
"segment_id" text NOT NULL,
"user_id" text NOT NULL,
@ -6,7 +7,7 @@ CREATE TABLE "tts_segments" (
"document_version" bigint NOT NULL,
"segment_index" integer NOT NULL,
"locator_json" text,
"settings_hash" text NOT NULL,
"settings_json" jsonb NOT NULL,
"text_hash" text NOT NULL,
"text_length" integer DEFAULT 0 NOT NULL,
"audio_key" text,
@ -20,8 +21,6 @@ CREATE TABLE "tts_segments" (
CONSTRAINT "tts_segments_segment_id_user_id_pk" PRIMARY KEY("segment_id","user_id")
);
--> statement-breakpoint
ALTER TABLE "tts_segments" ADD CONSTRAINT "tts_segments_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;
--> statement-breakpoint
CREATE INDEX "idx_tts_segments_lookup" ON "tts_segments" USING btree ("user_id","document_id","document_version","settings_hash");
--> statement-breakpoint
CREATE INDEX "idx_tts_segments_doc_index" ON "tts_segments" USING btree ("user_id","document_id","segment_index");
ALTER TABLE "tts_segments" ADD CONSTRAINT "tts_segments_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "idx_tts_segments_lookup" ON "tts_segments" USING btree ("user_id","document_id","document_version","settings_json");--> statement-breakpoint
CREATE INDEX "idx_tts_segments_doc_index" ON "tts_segments" USING btree ("user_id","document_id","segment_index");

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@
{
"idx": 1,
"version": "7",
"when": 1777843301471,
"when": 1777920947745,
"tag": "0001_tts_segments",
"breakpoints": true
}

View file

@ -1,3 +1,4 @@
DROP TABLE IF EXISTS `tts_segments`;--> statement-breakpoint
CREATE TABLE `tts_segments` (
`segment_id` text NOT NULL,
`user_id` text NOT NULL,
@ -6,7 +7,7 @@ CREATE TABLE `tts_segments` (
`document_version` integer NOT NULL,
`segment_index` integer NOT NULL,
`locator_json` text,
`settings_hash` text NOT NULL,
`settings_json` text NOT NULL,
`text_hash` text NOT NULL,
`text_length` integer DEFAULT 0 NOT NULL,
`audio_key` text,
@ -21,6 +22,5 @@ CREATE TABLE `tts_segments` (
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `idx_tts_segments_lookup` ON `tts_segments` (`user_id`,`document_id`,`document_version`,`settings_hash`);
--> statement-breakpoint
CREATE INDEX `idx_tts_segments_doc_index` ON `tts_segments` (`user_id`,`document_id`,`segment_index`);
CREATE INDEX `idx_tts_segments_lookup` ON `tts_segments` (`user_id`,`document_id`,`document_version`,`settings_json`);--> statement-breakpoint
CREATE INDEX `idx_tts_segments_doc_index` ON `tts_segments` (`user_id`,`document_id`,`segment_index`);

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@
{
"idx": 1,
"version": "6",
"when": 1777843301472,
"when": 1777920947478,
"tag": "0001_tts_segments",
"breakpoints": true
}

View file

@ -117,7 +117,7 @@ export const ttsSegments = pgTable('tts_segments', {
documentVersion: bigint('document_version', { mode: 'number' }).notNull(),
segmentIndex: integer('segment_index').notNull(),
locatorJson: text('locator_json'),
settingsHash: text('settings_hash').notNull(),
settingsJson: jsonb('settings_json').notNull(),
textHash: text('text_hash').notNull(),
textLength: integer('text_length').notNull().default(0),
audioKey: text('audio_key'),
@ -130,6 +130,6 @@ export const ttsSegments = pgTable('tts_segments', {
updatedAt: bigint('updated_at', { mode: 'number' }).default(PG_NOW_MS),
}, (table) => [
primaryKey({ columns: [table.segmentId, table.userId] }),
index('idx_tts_segments_lookup').on(table.userId, table.documentId, table.documentVersion, table.settingsHash),
index('idx_tts_segments_lookup').on(table.userId, table.documentId, table.documentVersion, table.settingsJson),
index('idx_tts_segments_doc_index').on(table.userId, table.documentId, table.segmentIndex),
]);

View file

@ -117,7 +117,7 @@ export const ttsSegments = sqliteTable('tts_segments', {
documentVersion: integer('document_version').notNull(),
segmentIndex: integer('segment_index').notNull(),
locatorJson: text('locator_json'),
settingsHash: text('settings_hash').notNull(),
settingsJson: text('settings_json').notNull(),
textHash: text('text_hash').notNull(),
textLength: integer('text_length').notNull().default(0),
audioKey: text('audio_key'),
@ -130,6 +130,6 @@ export const ttsSegments = sqliteTable('tts_segments', {
updatedAt: integer('updated_at').default(SQLITE_NOW_MS),
}, (table) => [
primaryKey({ columns: [table.segmentId, table.userId] }),
index('idx_tts_segments_lookup').on(table.userId, table.documentId, table.documentVersion, table.settingsHash),
index('idx_tts_segments_lookup').on(table.userId, table.documentId, table.documentVersion, table.settingsJson),
index('idx_tts_segments_doc_index').on(table.userId, table.documentId, table.segmentIndex),
]);