From e40b129d1d7be12d5b856d5bb401bd61baca80e5 Mon Sep 17 00:00:00 2001 From: mARTin Date: Sun, 1 Mar 2026 12:36:34 +0100 Subject: [PATCH 1/5] Update hardcoded version to 1.8.0 --- src/components/WeeklyView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/WeeklyView.tsx b/src/components/WeeklyView.tsx index 89f1a08..5574f5f 100644 --- a/src/components/WeeklyView.tsx +++ b/src/components/WeeklyView.tsx @@ -9883,7 +9883,7 @@ function SettingsSidebar({ color: "var(--weekly-settings-label)", }} > - Version {process.env.NEXT_PUBLIC_APP_VERSION || "1.7.0"} + Version {process.env.NEXT_PUBLIC_APP_VERSION || "1.8.0"}

From 263185ebabb91f5d0aa33bbae31da46358e9aaad Mon Sep 17 00:00:00 2001 From: mARTin Date: Tue, 3 Mar 2026 15:00:42 +0100 Subject: [PATCH 2/5] add ext_expires_in to Account model for Microsoft OAuth --- prisma/schema.prisma | 1 + 1 file changed, 1 insertion(+) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 07c47ba..4591158 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -116,6 +116,7 @@ model Account { scope String? id_token String? session_state String? + ext_expires_in Int? user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([provider, providerAccountId]) From b13569fb1ba5e2a9f6409a17a25e6c8d1f46c9f0 Mon Sep 17 00:00:00 2001 From: mARTin Date: Tue, 3 Mar 2026 15:07:49 +0100 Subject: [PATCH 3/5] fix: remove dueDateTime from MS Graph API select query to prevent 400 Bad Request --- src/lib/microsoft-todo.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/microsoft-todo.ts b/src/lib/microsoft-todo.ts index ca14c1f..2502c1a 100644 --- a/src/lib/microsoft-todo.ts +++ b/src/lib/microsoft-todo.ts @@ -97,7 +97,7 @@ export const fetchMsTodoTasks = async ( const params = new URLSearchParams({ '$filter': "status ne 'completed'", '$top': '100', - '$select': 'id,title,body,status,importance,dueDateTime,createdDateTime,lastModifiedDateTime' + '$select': 'id,title,body,status,importance,createdDateTime,lastModifiedDateTime' }); const response = await fetch( @@ -128,7 +128,7 @@ export const fetchMsTodoTasksForSync = async ( listId: string, modifiedSince?: string ): Promise => { - const selectFields = 'id,title,body,status,dueDateTime,createdDateTime,lastModifiedDateTime'; + const selectFields = 'id,title,body,status,createdDateTime,lastModifiedDateTime'; const params = new URLSearchParams({ '$top': '100', From 460de7a984740510868a98ea911cba3732a3b65d Mon Sep 17 00:00:00 2001 From: mARTin Date: Tue, 3 Mar 2026 15:23:15 +0100 Subject: [PATCH 4/5] fix(prisma): manual sql migration for ext_expires_in --- .../20260303_add_ext_expires_in/migration.sql | 1 + .../20260303_extend_accounts/migration.sql | 345 ++++++++++++++++++ 2 files changed, 346 insertions(+) create mode 100644 prisma/migrations/20260303_add_ext_expires_in/migration.sql create mode 100644 prisma/migrations/20260303_extend_accounts/migration.sql diff --git a/prisma/migrations/20260303_add_ext_expires_in/migration.sql b/prisma/migrations/20260303_add_ext_expires_in/migration.sql new file mode 100644 index 0000000..22c93a3 --- /dev/null +++ b/prisma/migrations/20260303_add_ext_expires_in/migration.sql @@ -0,0 +1 @@ +ALTER TABLE "Account" ADD COLUMN "ext_expires_in" INTEGER; diff --git a/prisma/migrations/20260303_extend_accounts/migration.sql b/prisma/migrations/20260303_extend_accounts/migration.sql new file mode 100644 index 0000000..ce34145 --- /dev/null +++ b/prisma/migrations/20260303_extend_accounts/migration.sql @@ -0,0 +1,345 @@ +-- CreateTable +CREATE TABLE "User" ( + "id" TEXT NOT NULL, + "accountNumber" SERIAL NOT NULL, + "email" TEXT NOT NULL, + "passwordHash" TEXT, + "name" TEXT, + "image" TEXT, + "emailVerified" TIMESTAMP(3), + "verifiedAt" TIMESTAMP(3), + "emailVerificationToken" TEXT, + "emailVerificationExpires" TIMESTAMP(3), + "passwordResetToken" TEXT, + "passwordResetExpires" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "timezone" TEXT NOT NULL DEFAULT 'UTC', + "autoRolling" BOOLEAN NOT NULL DEFAULT false, + "protectEventTimes" BOOLEAN NOT NULL DEFAULT false, + "language" TEXT NOT NULL DEFAULT 'de', + "dateFormat" TEXT NOT NULL DEFAULT 'yyyy-MM-dd', + "timeFormat" TEXT NOT NULL DEFAULT '24h', + "startHour" INTEGER NOT NULL DEFAULT 8, + "endHour" INTEGER NOT NULL DEFAULT 18, + "showNextTask" BOOLEAN NOT NULL DEFAULT false, + "calendarEditMode" BOOLEAN NOT NULL DEFAULT false, + "focusTimerDuration" INTEGER NOT NULL DEFAULT 25, + "focusBreakDuration" INTEGER NOT NULL DEFAULT 5, + "showTimeGrid" BOOLEAN NOT NULL DEFAULT true, + "showSomeday" BOOLEAN NOT NULL DEFAULT true, + "showAllDayEvents" BOOLEAN NOT NULL DEFAULT true, + "showSchedule" BOOLEAN NOT NULL DEFAULT true, + "cellDuration" INTEGER NOT NULL DEFAULT 30, + "viewStyle" TEXT NOT NULL DEFAULT 'simple', + "viewDays" INTEGER NOT NULL DEFAULT 7, + "fontSize" TEXT NOT NULL DEFAULT 'M', + "goalFallbackType" TEXT NOT NULL DEFAULT 'quote', + "goalDefaultSentence" TEXT NOT NULL DEFAULT 'goal of the week', + "goalFontFamily" TEXT DEFAULT 'Lato', + "goalFontSize" TEXT DEFAULT '1rem', + "goalFontWeight" TEXT DEFAULT '500', + "headlineFont" TEXT NOT NULL DEFAULT 'Oswald', + "headlineFontSize" TEXT DEFAULT '1.5rem', + "headlineFontWeight" TEXT DEFAULT '900', + "dateFontFamily" TEXT DEFAULT 'Inter', + "dateFontSize" TEXT DEFAULT '0.65rem', + "dateFontWeight" TEXT DEFAULT '400', + "timeTaskFontFamily" TEXT DEFAULT 'Inter', + "timeTaskFontSize" TEXT DEFAULT '0.75rem', + "timeTaskFontWeight" TEXT DEFAULT '500', + "bodyFont" TEXT NOT NULL DEFAULT 'Inter', + "taskFontFamily" TEXT DEFAULT 'Inter', + "taskFontSize" TEXT DEFAULT '0.9rem', + "taskFontWeight" TEXT DEFAULT '400', + "eventFontFamily" TEXT DEFAULT 'Inter', + "eventFontSize" TEXT DEFAULT '0.85rem', + "eventFontWeight" TEXT DEFAULT '400', + "fontWeight" TEXT NOT NULL DEFAULT '400', + "weekdayColor" TEXT DEFAULT '#0ea5e9', + "dateColor" TEXT DEFAULT '#888888', + "taskColor" TEXT DEFAULT '#333333', + "todayHighlightColor" TEXT DEFAULT '#f0fafa', + "weekendColorSat" TEXT DEFAULT '#ffc107', + "weekendColorSun" TEXT DEFAULT '#dc2626', + "pastDayColor" TEXT DEFAULT '#a6a6a7', + "goalScope" TEXT NOT NULL DEFAULT 'week', + "dateLayout" TEXT NOT NULL DEFAULT 'right', + "dateAlignment" TEXT NOT NULL DEFAULT 'center', + "hourLabelFormat" TEXT NOT NULL DEFAULT 'short', + "showSubHourSlots" BOOLEAN NOT NULL DEFAULT true, + "dayHeaderGap" TEXT DEFAULT '0.75em', + "allDayPosition" TEXT NOT NULL DEFAULT 'above', + "cwColor" TEXT DEFAULT '#333333', + "cwFontFamily" TEXT DEFAULT 'Oswald', + "cwFontSize" TEXT DEFAULT '1.5rem', + "cwFontWeight" TEXT DEFAULT '700', + "yearColor" TEXT DEFAULT '#333333', + "yearFontFamily" TEXT DEFAULT 'Oswald', + "yearFontSize" TEXT DEFAULT '1.5rem', + "yearFontWeight" TEXT DEFAULT '700', + "showTaskCheckboxes" BOOLEAN NOT NULL DEFAULT false, + "showCompletedTasks" BOOLEAN NOT NULL DEFAULT true, + "showLines" BOOLEAN NOT NULL DEFAULT true, + "startDayOffset" INTEGER NOT NULL DEFAULT -1, + "quoteSourceUrls" TEXT[] DEFAULT ARRAY[]::TEXT[], + "emailVerificationCode" TEXT, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Account" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "type" TEXT NOT NULL, + "provider" TEXT NOT NULL, + "providerAccountId" TEXT NOT NULL, + "refresh_token" TEXT, + "access_token" TEXT, + "expires_at" INTEGER, + "token_type" TEXT, + "scope" TEXT, + "id_token" TEXT, + "session_state" TEXT, + "ext_expires_in" INTEGER, + + CONSTRAINT "Account_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Session" ( + "id" TEXT NOT NULL, + "sessionToken" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "expires" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Session_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "VerificationToken" ( + "identifier" TEXT NOT NULL, + "token" TEXT NOT NULL, + "expires" TIMESTAMP(3) NOT NULL +); + +-- CreateTable +CREATE TABLE "Task" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "title" TEXT NOT NULL, + "description" TEXT, + "markdownContent" TEXT, + "completed" BOOLEAN NOT NULL DEFAULT false, + "isRolling" BOOLEAN NOT NULL DEFAULT false, + "order" INTEGER NOT NULL DEFAULT 0, + "dayOfWeek" INTEGER, + "scheduledDate" TIMESTAMP(3), + "somedayListId" TEXT, + "originalDate" TIMESTAMP(3), + "startTime" TEXT, + "endTime" TEXT, + "isRecurring" BOOLEAN NOT NULL DEFAULT false, + "recurrenceInterval" INTEGER, + "recurrenceUnit" TEXT, + "recurrenceTime" TEXT, + "recurrenceEndDate" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "externalId" TEXT, + "externalProvider" TEXT, + "externalListId" TEXT, + "lastSyncedAt" TIMESTAMP(3), + "deletedAt" TIMESTAMP(3), + "parentTaskId" TEXT, + "projectId" TEXT, + "somedaySlotIndex" INTEGER, + + CONSTRAINT "Task_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SomedayList" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "title" TEXT NOT NULL, + "order" INTEGER NOT NULL DEFAULT 0, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "externalId" TEXT, + "externalProvider" TEXT, + "lastSyncedAt" TIMESTAMP(3), + + CONSTRAINT "SomedayList_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "CalendarConnection" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "provider" TEXT NOT NULL, + "accessToken" TEXT NOT NULL, + "refreshToken" TEXT, + "expiresAt" TIMESTAMP(3), + "calendars" JSONB, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "CalendarConnection_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "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, + "url" TEXT, + "recurringEventId" TEXT, + "isRecurring" BOOLEAN NOT NULL DEFAULT false, + "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") +); + +-- CreateTable +CREATE TABLE "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 +CREATE TABLE "Project" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "icon" TEXT, + "color" TEXT, + "description" TEXT, + "order" INTEGER NOT NULL DEFAULT 0, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Project_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_accountNumber_key" ON "User"("accountNumber"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerificationToken_identifier_token_key" ON "VerificationToken"("identifier", "token"); + +-- CreateIndex +CREATE INDEX "Task_userId_dayOfWeek_idx" ON "Task"("userId", "dayOfWeek"); + +-- CreateIndex +CREATE INDEX "Task_userId_scheduledDate_idx" ON "Task"("userId", "scheduledDate"); + +-- CreateIndex +CREATE INDEX "Task_userId_somedayListId_idx" ON "Task"("userId", "somedayListId"); + +-- CreateIndex +CREATE INDEX "Task_userId_externalId_idx" ON "Task"("userId", "externalId"); + +-- CreateIndex +CREATE INDEX "Task_userId_deletedAt_idx" ON "Task"("userId", "deletedAt"); + +-- CreateIndex +CREATE INDEX "Task_userId_projectId_idx" ON "Task"("userId", "projectId"); + +-- CreateIndex +CREATE INDEX "Task_parentTaskId_idx" ON "Task"("parentTaskId"); + +-- CreateIndex +CREATE INDEX "SomedayList_userId_idx" ON "SomedayList"("userId"); + +-- CreateIndex +CREATE INDEX "CachedCalendarEvent_userId_startDateTime_idx" ON "CachedCalendarEvent"("userId", "startDateTime"); + +-- CreateIndex +CREATE INDEX "CachedCalendarEvent_userId_startDate_idx" ON "CachedCalendarEvent"("userId", "startDate"); + +-- CreateIndex +CREATE INDEX "CachedCalendarEvent_connectionId_weekStart_idx" ON "CachedCalendarEvent"("connectionId", "weekStart"); + +-- CreateIndex +CREATE UNIQUE INDEX "CachedCalendarEvent_userId_externalId_provider_key" ON "CachedCalendarEvent"("userId", "externalId", "provider"); + +-- CreateIndex +CREATE INDEX "WeeklyGoal_userId_idx" ON "WeeklyGoal"("userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "WeeklyGoal_userId_weekStart_key" ON "WeeklyGoal"("userId", "weekStart"); + +-- CreateIndex +CREATE INDEX "Project_userId_idx" ON "Project"("userId"); + +-- AddForeignKey +ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_parentTaskId_fkey" FOREIGN KEY ("parentTaskId") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_somedayListId_fkey" FOREIGN KEY ("somedayListId") REFERENCES "SomedayList"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Task" ADD CONSTRAINT "Task_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "SomedayList" ADD CONSTRAINT "SomedayList_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "CalendarConnection" ADD CONSTRAINT "CalendarConnection_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "CachedCalendarEvent" ADD CONSTRAINT "CachedCalendarEvent_connectionId_fkey" FOREIGN KEY ("connectionId") REFERENCES "CalendarConnection"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "CachedCalendarEvent" ADD CONSTRAINT "CachedCalendarEvent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "WeeklyGoal" ADD CONSTRAINT "WeeklyGoal_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Project" ADD CONSTRAINT "Project_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + From dc496426c7fd6b771d3e49626d35088865c0fcbf Mon Sep 17 00:00:00 2001 From: mARTin Date: Tue, 3 Mar 2026 16:09:41 +0100 Subject: [PATCH 5/5] fix(prisma): remove duplicate conflicting migration --- .../20260303_extend_accounts/migration.sql | 345 ------------------ 1 file changed, 345 deletions(-) delete mode 100644 prisma/migrations/20260303_extend_accounts/migration.sql diff --git a/prisma/migrations/20260303_extend_accounts/migration.sql b/prisma/migrations/20260303_extend_accounts/migration.sql deleted file mode 100644 index ce34145..0000000 --- a/prisma/migrations/20260303_extend_accounts/migration.sql +++ /dev/null @@ -1,345 +0,0 @@ --- CreateTable -CREATE TABLE "User" ( - "id" TEXT NOT NULL, - "accountNumber" SERIAL NOT NULL, - "email" TEXT NOT NULL, - "passwordHash" TEXT, - "name" TEXT, - "image" TEXT, - "emailVerified" TIMESTAMP(3), - "verifiedAt" TIMESTAMP(3), - "emailVerificationToken" TEXT, - "emailVerificationExpires" TIMESTAMP(3), - "passwordResetToken" TEXT, - "passwordResetExpires" TIMESTAMP(3), - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - "timezone" TEXT NOT NULL DEFAULT 'UTC', - "autoRolling" BOOLEAN NOT NULL DEFAULT false, - "protectEventTimes" BOOLEAN NOT NULL DEFAULT false, - "language" TEXT NOT NULL DEFAULT 'de', - "dateFormat" TEXT NOT NULL DEFAULT 'yyyy-MM-dd', - "timeFormat" TEXT NOT NULL DEFAULT '24h', - "startHour" INTEGER NOT NULL DEFAULT 8, - "endHour" INTEGER NOT NULL DEFAULT 18, - "showNextTask" BOOLEAN NOT NULL DEFAULT false, - "calendarEditMode" BOOLEAN NOT NULL DEFAULT false, - "focusTimerDuration" INTEGER NOT NULL DEFAULT 25, - "focusBreakDuration" INTEGER NOT NULL DEFAULT 5, - "showTimeGrid" BOOLEAN NOT NULL DEFAULT true, - "showSomeday" BOOLEAN NOT NULL DEFAULT true, - "showAllDayEvents" BOOLEAN NOT NULL DEFAULT true, - "showSchedule" BOOLEAN NOT NULL DEFAULT true, - "cellDuration" INTEGER NOT NULL DEFAULT 30, - "viewStyle" TEXT NOT NULL DEFAULT 'simple', - "viewDays" INTEGER NOT NULL DEFAULT 7, - "fontSize" TEXT NOT NULL DEFAULT 'M', - "goalFallbackType" TEXT NOT NULL DEFAULT 'quote', - "goalDefaultSentence" TEXT NOT NULL DEFAULT 'goal of the week', - "goalFontFamily" TEXT DEFAULT 'Lato', - "goalFontSize" TEXT DEFAULT '1rem', - "goalFontWeight" TEXT DEFAULT '500', - "headlineFont" TEXT NOT NULL DEFAULT 'Oswald', - "headlineFontSize" TEXT DEFAULT '1.5rem', - "headlineFontWeight" TEXT DEFAULT '900', - "dateFontFamily" TEXT DEFAULT 'Inter', - "dateFontSize" TEXT DEFAULT '0.65rem', - "dateFontWeight" TEXT DEFAULT '400', - "timeTaskFontFamily" TEXT DEFAULT 'Inter', - "timeTaskFontSize" TEXT DEFAULT '0.75rem', - "timeTaskFontWeight" TEXT DEFAULT '500', - "bodyFont" TEXT NOT NULL DEFAULT 'Inter', - "taskFontFamily" TEXT DEFAULT 'Inter', - "taskFontSize" TEXT DEFAULT '0.9rem', - "taskFontWeight" TEXT DEFAULT '400', - "eventFontFamily" TEXT DEFAULT 'Inter', - "eventFontSize" TEXT DEFAULT '0.85rem', - "eventFontWeight" TEXT DEFAULT '400', - "fontWeight" TEXT NOT NULL DEFAULT '400', - "weekdayColor" TEXT DEFAULT '#0ea5e9', - "dateColor" TEXT DEFAULT '#888888', - "taskColor" TEXT DEFAULT '#333333', - "todayHighlightColor" TEXT DEFAULT '#f0fafa', - "weekendColorSat" TEXT DEFAULT '#ffc107', - "weekendColorSun" TEXT DEFAULT '#dc2626', - "pastDayColor" TEXT DEFAULT '#a6a6a7', - "goalScope" TEXT NOT NULL DEFAULT 'week', - "dateLayout" TEXT NOT NULL DEFAULT 'right', - "dateAlignment" TEXT NOT NULL DEFAULT 'center', - "hourLabelFormat" TEXT NOT NULL DEFAULT 'short', - "showSubHourSlots" BOOLEAN NOT NULL DEFAULT true, - "dayHeaderGap" TEXT DEFAULT '0.75em', - "allDayPosition" TEXT NOT NULL DEFAULT 'above', - "cwColor" TEXT DEFAULT '#333333', - "cwFontFamily" TEXT DEFAULT 'Oswald', - "cwFontSize" TEXT DEFAULT '1.5rem', - "cwFontWeight" TEXT DEFAULT '700', - "yearColor" TEXT DEFAULT '#333333', - "yearFontFamily" TEXT DEFAULT 'Oswald', - "yearFontSize" TEXT DEFAULT '1.5rem', - "yearFontWeight" TEXT DEFAULT '700', - "showTaskCheckboxes" BOOLEAN NOT NULL DEFAULT false, - "showCompletedTasks" BOOLEAN NOT NULL DEFAULT true, - "showLines" BOOLEAN NOT NULL DEFAULT true, - "startDayOffset" INTEGER NOT NULL DEFAULT -1, - "quoteSourceUrls" TEXT[] DEFAULT ARRAY[]::TEXT[], - "emailVerificationCode" TEXT, - - CONSTRAINT "User_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Account" ( - "id" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "type" TEXT NOT NULL, - "provider" TEXT NOT NULL, - "providerAccountId" TEXT NOT NULL, - "refresh_token" TEXT, - "access_token" TEXT, - "expires_at" INTEGER, - "token_type" TEXT, - "scope" TEXT, - "id_token" TEXT, - "session_state" TEXT, - "ext_expires_in" INTEGER, - - CONSTRAINT "Account_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Session" ( - "id" TEXT NOT NULL, - "sessionToken" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "expires" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "Session_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "VerificationToken" ( - "identifier" TEXT NOT NULL, - "token" TEXT NOT NULL, - "expires" TIMESTAMP(3) NOT NULL -); - --- CreateTable -CREATE TABLE "Task" ( - "id" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "title" TEXT NOT NULL, - "description" TEXT, - "markdownContent" TEXT, - "completed" BOOLEAN NOT NULL DEFAULT false, - "isRolling" BOOLEAN NOT NULL DEFAULT false, - "order" INTEGER NOT NULL DEFAULT 0, - "dayOfWeek" INTEGER, - "scheduledDate" TIMESTAMP(3), - "somedayListId" TEXT, - "originalDate" TIMESTAMP(3), - "startTime" TEXT, - "endTime" TEXT, - "isRecurring" BOOLEAN NOT NULL DEFAULT false, - "recurrenceInterval" INTEGER, - "recurrenceUnit" TEXT, - "recurrenceTime" TEXT, - "recurrenceEndDate" TIMESTAMP(3), - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - "externalId" TEXT, - "externalProvider" TEXT, - "externalListId" TEXT, - "lastSyncedAt" TIMESTAMP(3), - "deletedAt" TIMESTAMP(3), - "parentTaskId" TEXT, - "projectId" TEXT, - "somedaySlotIndex" INTEGER, - - CONSTRAINT "Task_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "SomedayList" ( - "id" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "title" TEXT NOT NULL, - "order" INTEGER NOT NULL DEFAULT 0, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - "externalId" TEXT, - "externalProvider" TEXT, - "lastSyncedAt" TIMESTAMP(3), - - CONSTRAINT "SomedayList_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "CalendarConnection" ( - "id" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "provider" TEXT NOT NULL, - "accessToken" TEXT NOT NULL, - "refreshToken" TEXT, - "expiresAt" TIMESTAMP(3), - "calendars" JSONB, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "CalendarConnection_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "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, - "url" TEXT, - "recurringEventId" TEXT, - "isRecurring" BOOLEAN NOT NULL DEFAULT false, - "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") -); - --- CreateTable -CREATE TABLE "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 -CREATE TABLE "Project" ( - "id" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "name" TEXT NOT NULL, - "icon" TEXT, - "color" TEXT, - "description" TEXT, - "order" INTEGER NOT NULL DEFAULT 0, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "Project_pkey" PRIMARY KEY ("id") -); - --- CreateIndex -CREATE UNIQUE INDEX "User_accountNumber_key" ON "User"("accountNumber"); - --- CreateIndex -CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); - --- CreateIndex -CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId"); - --- CreateIndex -CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken"); - --- CreateIndex -CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token"); - --- CreateIndex -CREATE UNIQUE INDEX "VerificationToken_identifier_token_key" ON "VerificationToken"("identifier", "token"); - --- CreateIndex -CREATE INDEX "Task_userId_dayOfWeek_idx" ON "Task"("userId", "dayOfWeek"); - --- CreateIndex -CREATE INDEX "Task_userId_scheduledDate_idx" ON "Task"("userId", "scheduledDate"); - --- CreateIndex -CREATE INDEX "Task_userId_somedayListId_idx" ON "Task"("userId", "somedayListId"); - --- CreateIndex -CREATE INDEX "Task_userId_externalId_idx" ON "Task"("userId", "externalId"); - --- CreateIndex -CREATE INDEX "Task_userId_deletedAt_idx" ON "Task"("userId", "deletedAt"); - --- CreateIndex -CREATE INDEX "Task_userId_projectId_idx" ON "Task"("userId", "projectId"); - --- CreateIndex -CREATE INDEX "Task_parentTaskId_idx" ON "Task"("parentTaskId"); - --- CreateIndex -CREATE INDEX "SomedayList_userId_idx" ON "SomedayList"("userId"); - --- CreateIndex -CREATE INDEX "CachedCalendarEvent_userId_startDateTime_idx" ON "CachedCalendarEvent"("userId", "startDateTime"); - --- CreateIndex -CREATE INDEX "CachedCalendarEvent_userId_startDate_idx" ON "CachedCalendarEvent"("userId", "startDate"); - --- CreateIndex -CREATE INDEX "CachedCalendarEvent_connectionId_weekStart_idx" ON "CachedCalendarEvent"("connectionId", "weekStart"); - --- CreateIndex -CREATE UNIQUE INDEX "CachedCalendarEvent_userId_externalId_provider_key" ON "CachedCalendarEvent"("userId", "externalId", "provider"); - --- CreateIndex -CREATE INDEX "WeeklyGoal_userId_idx" ON "WeeklyGoal"("userId"); - --- CreateIndex -CREATE UNIQUE INDEX "WeeklyGoal_userId_weekStart_key" ON "WeeklyGoal"("userId", "weekStart"); - --- CreateIndex -CREATE INDEX "Project_userId_idx" ON "Project"("userId"); - --- AddForeignKey -ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Task" ADD CONSTRAINT "Task_parentTaskId_fkey" FOREIGN KEY ("parentTaskId") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Task" ADD CONSTRAINT "Task_somedayListId_fkey" FOREIGN KEY ("somedayListId") REFERENCES "SomedayList"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Task" ADD CONSTRAINT "Task_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Task" ADD CONSTRAINT "Task_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "SomedayList" ADD CONSTRAINT "SomedayList_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "CalendarConnection" ADD CONSTRAINT "CalendarConnection_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "CachedCalendarEvent" ADD CONSTRAINT "CachedCalendarEvent_connectionId_fkey" FOREIGN KEY ("connectionId") REFERENCES "CalendarConnection"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "CachedCalendarEvent" ADD CONSTRAINT "CachedCalendarEvent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "WeeklyGoal" ADD CONSTRAINT "WeeklyGoal_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Project" ADD CONSTRAINT "Project_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; -