courrier msft oauth

This commit is contained in:
alma 2025-05-02 09:15:59 +02:00
parent a7dbd7cd85
commit cb095ab7ee
5 changed files with 253 additions and 48 deletions

View File

@ -0,0 +1,114 @@
-- Complete migration script for all Prisma tables
-- Run this directly on your PostgreSQL server
-- Create User table if it doesn't exist
CREATE TABLE IF NOT EXISTS "User" (
"id" TEXT PRIMARY KEY,
"email" TEXT UNIQUE NOT NULL,
"password" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL
);
-- Create Calendar table if it doesn't exist
CREATE TABLE IF NOT EXISTS "Calendar" (
"id" TEXT PRIMARY KEY,
"name" TEXT NOT NULL,
"color" TEXT NOT NULL DEFAULT '#0082c9',
"description" TEXT,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE
);
-- Create index on Calendar
CREATE INDEX IF NOT EXISTS "Calendar_userId_idx" ON "Calendar"("userId");
-- Create Event table if it doesn't exist
CREATE TABLE IF NOT EXISTS "Event" (
"id" TEXT PRIMARY KEY,
"title" TEXT NOT NULL,
"description" TEXT,
"start" TIMESTAMP(3) NOT NULL,
"end" TIMESTAMP(3) NOT NULL,
"location" TEXT,
"isAllDay" BOOLEAN NOT NULL DEFAULT false,
"calendarId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
FOREIGN KEY ("calendarId") REFERENCES "Calendar"("id") ON DELETE CASCADE,
FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE
);
-- Create indexes on Event
CREATE INDEX IF NOT EXISTS "Event_calendarId_idx" ON "Event"("calendarId");
CREATE INDEX IF NOT EXISTS "Event_userId_idx" ON "Event"("userId");
-- Create or update MailCredentials table with OAuth support
DO $$
BEGIN
-- Check if MailCredentials table exists
IF EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'MailCredentials') THEN
-- Alter existing table to add OAuth fields
BEGIN
-- Make password column nullable
ALTER TABLE "MailCredentials" ALTER COLUMN "password" DROP NOT NULL;
EXCEPTION WHEN undefined_column THEN
-- Password column doesn't exist or is already nullable
END;
-- Add OAuth columns if they don't exist
BEGIN
ALTER TABLE "MailCredentials"
ADD COLUMN IF NOT EXISTS "useOAuth" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN IF NOT EXISTS "refreshToken" TEXT,
ADD COLUMN IF NOT EXISTS "accessToken" TEXT,
ADD COLUMN IF NOT EXISTS "tokenExpiry" TIMESTAMP(3);
EXCEPTION WHEN duplicate_column THEN
-- Columns already exist
END;
ELSE
-- Create MailCredentials table with OAuth support
CREATE TABLE "MailCredentials" (
"id" TEXT PRIMARY KEY,
"userId" TEXT NOT NULL,
"email" TEXT NOT NULL,
"password" TEXT,
"host" TEXT NOT NULL,
"port" INTEGER NOT NULL,
"secure" BOOLEAN NOT NULL DEFAULT true,
"useOAuth" BOOLEAN NOT NULL DEFAULT false,
"refreshToken" TEXT,
"accessToken" TEXT,
"tokenExpiry" TIMESTAMP(3),
"smtp_host" TEXT,
"smtp_port" INTEGER,
"smtp_secure" BOOLEAN DEFAULT false,
"display_name" TEXT,
"color" TEXT DEFAULT '#0082c9',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE,
UNIQUE("userId", "email")
);
-- Create index on MailCredentials
CREATE INDEX IF NOT EXISTS "MailCredentials_userId_idx" ON "MailCredentials"("userId");
END IF;
END $$;
-- Create WebDAVCredentials table if it doesn't exist
CREATE TABLE IF NOT EXISTS "WebDAVCredentials" (
"id" TEXT PRIMARY KEY,
"userId" TEXT UNIQUE NOT NULL,
"username" TEXT NOT NULL,
"password" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE
);
-- Create index on WebDAVCredentials
CREATE INDEX IF NOT EXISTS "WebDAVCredentials_userId_idx" ON "WebDAVCredentials"("userId");

View File

@ -1,7 +0,0 @@
-- AlterTable to make password optional and add OAuth fields
ALTER TABLE "MailCredentials"
ALTER COLUMN "password" DROP NOT NULL,
ADD COLUMN "useOAuth" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "refreshToken" TEXT,
ADD COLUMN "accessToken" TEXT,
ADD COLUMN "tokenExpiry" TIMESTAMP(3);

View File

@ -1,38 +0,0 @@
-- CreateTable
CREATE TABLE "Calendar" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"color" TEXT NOT NULL DEFAULT '#0082c9',
"description" TEXT,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Calendar_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Event" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"start" TIMESTAMP(3) NOT NULL,
"end" TIMESTAMP(3) NOT NULL,
"location" TEXT,
"isAllDay" BOOLEAN NOT NULL DEFAULT false,
"calendarId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Event_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "Event_calendarId_idx" ON "Event"("calendarId");
-- CreateIndex
CREATE INDEX "Event_userId_idx" ON "Event"("userId");
-- AddForeignKey
ALTER TABLE "Event" ADD CONSTRAINT "Event_calendarId_fkey" FOREIGN KEY ("calendarId") REFERENCES "Calendar"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -1,3 +0,0 @@
# Please do not edit this file manually
# It should be added in your version-control system (e.g., Git)
provider = "postgresql"

139
scripts/regenerate-migrations.sh Executable file
View File

@ -0,0 +1,139 @@
#!/bin/bash
# Script to regenerate Prisma migrations properly
# Step 1: Remove existing migrations
echo "Removing existing migrations..."
rm -rf prisma/migrations
# Step 2: Create migration directory
mkdir -p prisma/migrations/20240612000000_initial_schema
# Step 3: Create migration file
cat > prisma/migrations/20240612000000_initial_schema/migration.sql << EOL
-- CreateTable
CREATE TABLE "User" (
"id" TEXT NOT NULL,
"email" TEXT NOT NULL,
"password" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Calendar" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"color" TEXT NOT NULL DEFAULT '#0082c9',
"description" TEXT,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Calendar_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Event" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"start" TIMESTAMP(3) NOT NULL,
"end" TIMESTAMP(3) NOT NULL,
"location" TEXT,
"isAllDay" BOOLEAN NOT NULL DEFAULT false,
"calendarId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Event_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "MailCredentials" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"email" TEXT NOT NULL,
"password" TEXT,
"host" TEXT NOT NULL,
"port" INTEGER NOT NULL,
"secure" BOOLEAN NOT NULL DEFAULT true,
"useOAuth" BOOLEAN NOT NULL DEFAULT false,
"refreshToken" TEXT,
"accessToken" TEXT,
"tokenExpiry" TIMESTAMP(3),
"smtp_host" TEXT,
"smtp_port" INTEGER,
"smtp_secure" BOOLEAN DEFAULT false,
"display_name" TEXT,
"color" TEXT DEFAULT '#0082c9',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "MailCredentials_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "WebDAVCredentials" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"username" TEXT NOT NULL,
"password" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "WebDAVCredentials_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
-- CreateIndex
CREATE INDEX "Calendar_userId_idx" ON "Calendar"("userId");
-- CreateIndex
CREATE INDEX "Event_calendarId_idx" ON "Event"("calendarId");
-- CreateIndex
CREATE INDEX "Event_userId_idx" ON "Event"("userId");
-- CreateIndex
CREATE UNIQUE INDEX "MailCredentials_userId_email_key" ON "MailCredentials"("userId", "email");
-- CreateIndex
CREATE INDEX "MailCredentials_userId_idx" ON "MailCredentials"("userId");
-- CreateIndex
CREATE UNIQUE INDEX "WebDAVCredentials_userId_key" ON "WebDAVCredentials"("userId");
-- CreateIndex
CREATE INDEX "WebDAVCredentials_userId_idx" ON "WebDAVCredentials"("userId");
-- AddForeignKey
ALTER TABLE "Calendar" ADD CONSTRAINT "Calendar_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Event" ADD CONSTRAINT "Event_calendarId_fkey" FOREIGN KEY ("calendarId") REFERENCES "Calendar"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Event" ADD CONSTRAINT "Event_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "MailCredentials" ADD CONSTRAINT "MailCredentials_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "WebDAVCredentials" ADD CONSTRAINT "WebDAVCredentials_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
EOL
# Step 4: Create migration_lock.toml file
cat > prisma/migrations/migration_lock.toml << EOL
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "postgresql"
EOL
echo "Migrations regenerated successfully!"
echo "Now run: npx prisma migrate resolve --applied 20240612000000_initial_schema"