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;
-