- Fix Docker build: resolve hooks-rules-of-hooks in GridTaskBlock, add Suspense boundary for useSearchParams, fix non-root user home dir and prisma binary path - Add comprehensive DB migrations for missing columns/tables (WeeklyGoal, CachedCalendarEvent, User settings, SomedayList sync fields, Task subtasks) - Fix Outlook OAuth redirect using NEXTAUTH_URL instead of request.url - Fix CalendarEventModal preserving existing event dates (support flat format) - Fix header z-index layering so goal text doesn't block hover controls - Convert font size selects to free-form text inputs, add dayHeaderGap setting - Add goal 2-line clamping with 500px max width - Fix weekend colors not applying to date elements v1.6.0 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
101 lines
4.2 KiB
SQL
101 lines
4.2 KiB
SQL
-- AlterTable: Add missing SomedayList columns
|
|
ALTER TABLE "SomedayList" ADD COLUMN IF NOT EXISTS "externalId" TEXT;
|
|
ALTER TABLE "SomedayList" ADD COLUMN IF NOT EXISTS "externalProvider" TEXT;
|
|
ALTER TABLE "SomedayList" ADD COLUMN IF NOT EXISTS "lastSyncedAt" TIMESTAMP(3);
|
|
|
|
-- AlterTable: Add missing Task columns
|
|
ALTER TABLE "Task" ADD COLUMN IF NOT EXISTS "parentTaskId" TEXT;
|
|
ALTER TABLE "Task" ADD COLUMN IF NOT EXISTS "deletedAt" TIMESTAMP(3);
|
|
|
|
-- CreateTable: WeeklyGoal
|
|
CREATE TABLE IF NOT EXISTS "WeeklyGoal" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"weekStart" TIMESTAMP(3) NOT NULL,
|
|
"text" TEXT NOT NULL DEFAULT 'your goal of this week',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "WeeklyGoal_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable: CachedCalendarEvent
|
|
CREATE TABLE IF NOT EXISTS "CachedCalendarEvent" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"externalId" TEXT NOT NULL,
|
|
"connectionId" TEXT NOT NULL,
|
|
"provider" TEXT NOT NULL,
|
|
"calendarId" TEXT NOT NULL,
|
|
"calendarTitle" TEXT NOT NULL,
|
|
"calendarColor" TEXT,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"location" TEXT,
|
|
"startDateTime" TIMESTAMP(3),
|
|
"startDate" TEXT,
|
|
"endDateTime" TIMESTAMP(3),
|
|
"endDate" TEXT,
|
|
"weekStart" TIMESTAMP(3) NOT NULL,
|
|
"syncedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "CachedCalendarEvent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndexes for WeeklyGoal
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "WeeklyGoal_userId_weekStart_key" ON "WeeklyGoal"("userId", "weekStart");
|
|
CREATE INDEX IF NOT EXISTS "WeeklyGoal_userId_idx" ON "WeeklyGoal"("userId");
|
|
|
|
-- CreateIndexes for CachedCalendarEvent
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "CachedCalendarEvent_userId_externalId_provider_key" ON "CachedCalendarEvent"("userId", "externalId", "provider");
|
|
CREATE INDEX IF NOT EXISTS "CachedCalendarEvent_userId_startDateTime_idx" ON "CachedCalendarEvent"("userId", "startDateTime");
|
|
CREATE INDEX IF NOT EXISTS "CachedCalendarEvent_userId_startDate_idx" ON "CachedCalendarEvent"("userId", "startDate");
|
|
CREATE INDEX IF NOT EXISTS "CachedCalendarEvent_connectionId_weekStart_idx" ON "CachedCalendarEvent"("connectionId", "weekStart");
|
|
|
|
-- CreateIndexes for Task
|
|
CREATE INDEX IF NOT EXISTS "Task_parentTaskId_idx" ON "Task"("parentTaskId");
|
|
CREATE INDEX IF NOT EXISTS "Task_userId_deletedAt_idx" ON "Task"("userId", "deletedAt");
|
|
|
|
-- AddForeignKeys (idempotent)
|
|
DO $$ BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.table_constraints
|
|
WHERE constraint_name = 'Task_parentTaskId_fkey'
|
|
) THEN
|
|
ALTER TABLE "Task" ADD CONSTRAINT "Task_parentTaskId_fkey" FOREIGN KEY ("parentTaskId") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.table_constraints
|
|
WHERE constraint_name = 'WeeklyGoal_userId_fkey'
|
|
) THEN
|
|
ALTER TABLE "WeeklyGoal" ADD CONSTRAINT "WeeklyGoal_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.table_constraints
|
|
WHERE constraint_name = 'CachedCalendarEvent_connectionId_fkey'
|
|
) THEN
|
|
ALTER TABLE "CachedCalendarEvent" ADD CONSTRAINT "CachedCalendarEvent_connectionId_fkey" FOREIGN KEY ("connectionId") REFERENCES "CalendarConnection"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$ BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.table_constraints
|
|
WHERE constraint_name = 'CachedCalendarEvent_userId_fkey'
|
|
) THEN
|
|
ALTER TABLE "CachedCalendarEvent" ADD CONSTRAINT "CachedCalendarEvent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Fix Task_somedayListId_fkey to use SET NULL on delete
|
|
ALTER TABLE "Task" DROP CONSTRAINT IF EXISTS "Task_somedayListId_fkey";
|
|
ALTER TABLE "Task" ADD CONSTRAINT "Task_somedayListId_fkey" FOREIGN KEY ("somedayListId") REFERENCES "SomedayList"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|