From 3b3f4fdc9b2c584bbb4405b528aca821bb3a0055 Mon Sep 17 00:00:00 2001 From: sepehr Date: Sun, 26 Apr 2026 21:50:33 +0200 Subject: [PATCH] feat: add migration for missing autoLabeling/languageDetection columns and indexes Production DB was missing autoLabeling and languageDetection on UserAISettings, causing 500 errors on echo/connections endpoints. Also adds missing indexes and fixes Note.notebookId FK to use ON DELETE SET NULL. Co-Authored-By: Claude Opus 4.7 --- .../migration.sql | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 memento-note/prisma/migrations/20260426150000_add_missing_settings_and_fix_constraints/migration.sql diff --git a/memento-note/prisma/migrations/20260426150000_add_missing_settings_and_fix_constraints/migration.sql b/memento-note/prisma/migrations/20260426150000_add_missing_settings_and_fix_constraints/migration.sql new file mode 100644 index 0000000..9525249 --- /dev/null +++ b/memento-note/prisma/migrations/20260426150000_add_missing_settings_and_fix_constraints/migration.sql @@ -0,0 +1,60 @@ +-- AlterTable: UserAISettings +-- Add missing columns: autoLabeling, languageDetection +ALTER TABLE "UserAISettings" ADD COLUMN IF NOT EXISTS "autoLabeling" BOOLEAN NOT NULL DEFAULT true; +ALTER TABLE "UserAISettings" ADD COLUMN IF NOT EXISTS "languageDetection" BOOLEAN NOT NULL DEFAULT true; + +-- Add missing indexes +CREATE INDEX IF NOT EXISTS "UserAISettings_memoryEcho_idx" ON "UserAISettings"("memoryEcho"); +CREATE INDEX IF NOT EXISTS "UserAISettings_aiProvider_idx" ON "UserAISettings"("aiProvider"); +CREATE INDEX IF NOT EXISTS "UserAISettings_memoryEchoFrequency_idx" ON "UserAISettings"("memoryEchoFrequency"); +CREATE INDEX IF NOT EXISTS "UserAISettings_preferredLanguage_idx" ON "UserAISettings"("preferredLanguage"); + +-- Add missing Note indexes +CREATE INDEX IF NOT EXISTS "Note_isPinned_idx" ON "Note"("isPinned"); +CREATE INDEX IF NOT EXISTS "Note_isArchived_idx" ON "Note"("isArchived"); +CREATE INDEX IF NOT EXISTS "Note_order_idx" ON "Note"("order"); +CREATE INDEX IF NOT EXISTS "Note_reminder_idx" ON "Note"("reminder"); +CREATE INDEX IF NOT EXISTS "Note_userId_idx" ON "Note"("userId"); +CREATE INDEX IF NOT EXISTS "Note_userId_notebookId_idx" ON "Note"("userId", "notebookId"); + +-- Add missing Label indexes +CREATE INDEX IF NOT EXISTS "Label_notebookId_idx" ON "Label"("notebookId"); +CREATE INDEX IF NOT EXISTS "Label_userId_idx" ON "Label"("userId"); + +-- Add missing Notebook indexes +CREATE INDEX IF NOT EXISTS "Notebook_userId_order_idx" ON "Notebook"("userId", "order"); +CREATE INDEX IF NOT EXISTS "Notebook_userId_idx" ON "Notebook"("userId"); + +-- Add missing AiFeedback indexes +CREATE INDEX IF NOT EXISTS "AiFeedback_noteId_idx" ON "AiFeedback"("noteId"); +CREATE INDEX IF NOT EXISTS "AiFeedback_userId_idx" ON "AiFeedback"("userId"); +CREATE INDEX IF NOT EXISTS "AiFeedback_feature_idx" ON "AiFeedback"("feature"); + +-- Add missing MemoryEchoInsight indexes and unique constraint +CREATE INDEX IF NOT EXISTS "MemoryEchoInsight_userId_insightDate_idx" ON "MemoryEchoInsight"("userId", "insightDate"); +CREATE INDEX IF NOT EXISTS "MemoryEchoInsight_userId_dismissed_idx" ON "MemoryEchoInsight"("userId", "dismissed"); + +-- Add unique constraint for MemoryEchoInsight (idempotent) +DO $$ BEGIN + ALTER TABLE "MemoryEchoInsight" ADD CONSTRAINT "MemoryEchoInsight_userId_insightDate_key" UNIQUE ("userId", "insightDate"); +EXCEPTION WHEN duplicate_object THEN NULL; +END $$; + +-- Add missing NoteShare indexes +CREATE INDEX IF NOT EXISTS "NoteShare_userId_idx" ON "NoteShare"("userId"); +CREATE INDEX IF NOT EXISTS "NoteShare_status_idx" ON "NoteShare"("status"); +CREATE INDEX IF NOT EXISTS "NoteShare_sharedBy_idx" ON "NoteShare"("sharedBy"); + +-- Add unique constraint for NoteShare (idempotent) +DO $$ BEGIN + ALTER TABLE "NoteShare" ADD CONSTRAINT "NoteShare_noteId_userId_key" UNIQUE ("noteId", "userId"); +EXCEPTION WHEN duplicate_object THEN NULL; +END $$; + +-- Fix Note.notebookId foreign key to use ON DELETE SET NULL +DO $$ BEGIN + ALTER TABLE "Note" DROP CONSTRAINT "Note_notebookId_fkey"; +EXCEPTION WHEN undefined_object THEN NULL; +END $$; + +ALTER TABLE "Note" ADD CONSTRAINT "Note_notebookId_fkey" FOREIGN KEY ("notebookId") REFERENCES "Notebook"("id") ON DELETE SET NULL ON UPDATE CASCADE;