114 lines
3.9 KiB
SQL
114 lines
3.9 KiB
SQL
-- 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"); |