fix: consolidate migrations and fix Prisma ESM compatibility
- Replace 3 partial migrations with single init migration from schema - Fixes missing backupEnabled, integrationType, and other columns - Move @prisma/client to dependencies for adapter-node externalization - Add ssr.external to prevent Vite bundling Prisma (fixes __dirname error)
This commit is contained in:
@@ -0,0 +1,394 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "User" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"email" TEXT NOT NULL,
|
||||
"password" TEXT,
|
||||
"displayName" TEXT NOT NULL,
|
||||
"avatarUrl" TEXT,
|
||||
"authProvider" TEXT NOT NULL DEFAULT 'local',
|
||||
"role" TEXT NOT NULL DEFAULT 'user',
|
||||
"refreshToken" TEXT,
|
||||
"refreshTokenExpiresAt" DATETIME,
|
||||
"onboardingComplete" BOOLEAN NOT NULL DEFAULT false,
|
||||
"trackRecentApps" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL,
|
||||
"themeMode" TEXT,
|
||||
"primaryHue" INTEGER,
|
||||
"primarySaturation" INTEGER,
|
||||
"backgroundType" TEXT,
|
||||
"locale" TEXT
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Group" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "UserGroup" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"groupId" TEXT NOT NULL,
|
||||
CONSTRAINT "UserGroup_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "UserGroup_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "Group" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "App" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"name" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL,
|
||||
"icon" TEXT,
|
||||
"iconType" TEXT NOT NULL DEFAULT 'lucide',
|
||||
"description" TEXT,
|
||||
"category" TEXT,
|
||||
"tags" TEXT NOT NULL DEFAULT '',
|
||||
"healthcheckEnabled" BOOLEAN NOT NULL DEFAULT false,
|
||||
"healthcheckInterval" INTEGER NOT NULL DEFAULT 300,
|
||||
"healthcheckMethod" TEXT NOT NULL DEFAULT 'GET',
|
||||
"healthcheckExpectedStatus" INTEGER NOT NULL DEFAULT 200,
|
||||
"healthcheckTimeout" INTEGER NOT NULL DEFAULT 5000,
|
||||
"integrationType" TEXT,
|
||||
"integrationConfig" TEXT,
|
||||
"integrationEnabled" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdById" TEXT,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL,
|
||||
CONSTRAINT "App_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AppStatus" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"appId" TEXT NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'unknown',
|
||||
"responseTime" INTEGER,
|
||||
"checkedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "AppStatus_appId_fkey" FOREIGN KEY ("appId") REFERENCES "App" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Board" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"name" TEXT NOT NULL,
|
||||
"icon" TEXT,
|
||||
"description" TEXT,
|
||||
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
||||
"isGuestAccessible" BOOLEAN NOT NULL DEFAULT false,
|
||||
"backgroundConfig" TEXT,
|
||||
"themeHue" INTEGER,
|
||||
"themeSaturation" INTEGER,
|
||||
"backgroundType" TEXT,
|
||||
"cardSize" TEXT,
|
||||
"wallpaperUrl" TEXT,
|
||||
"wallpaperBlur" INTEGER,
|
||||
"wallpaperOverlay" REAL,
|
||||
"customCss" TEXT,
|
||||
"createdById" TEXT,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL,
|
||||
CONSTRAINT "Board_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Section" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"boardId" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"icon" TEXT,
|
||||
"order" INTEGER NOT NULL DEFAULT 0,
|
||||
"isExpandedByDefault" BOOLEAN NOT NULL DEFAULT true,
|
||||
"cardSize" TEXT,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL,
|
||||
CONSTRAINT "Section_boardId_fkey" FOREIGN KEY ("boardId") REFERENCES "Board" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Widget" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"sectionId" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"order" INTEGER NOT NULL DEFAULT 0,
|
||||
"config" TEXT NOT NULL DEFAULT '{}',
|
||||
"appId" TEXT,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL,
|
||||
CONSTRAINT "Widget_sectionId_fkey" FOREIGN KEY ("sectionId") REFERENCES "Section" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "Widget_appId_fkey" FOREIGN KEY ("appId") REFERENCES "App" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Permission" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"entityType" TEXT NOT NULL,
|
||||
"entityId" TEXT NOT NULL,
|
||||
"targetType" TEXT NOT NULL,
|
||||
"targetId" TEXT NOT NULL,
|
||||
"level" TEXT NOT NULL,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "SystemSettings" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY DEFAULT 'singleton',
|
||||
"authMode" TEXT NOT NULL DEFAULT 'local',
|
||||
"registrationEnabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"oauthClientId" TEXT,
|
||||
"oauthClientSecret" TEXT,
|
||||
"oauthDiscoveryUrl" TEXT,
|
||||
"defaultTheme" TEXT NOT NULL DEFAULT 'dark',
|
||||
"defaultPrimaryColor" TEXT NOT NULL DEFAULT '#6366f1',
|
||||
"healthcheckDefaults" TEXT NOT NULL DEFAULT '{}',
|
||||
"customCss" TEXT,
|
||||
"onboardingComplete" BOOLEAN NOT NULL DEFAULT false,
|
||||
"backupEnabled" BOOLEAN NOT NULL DEFAULT false,
|
||||
"backupCronExpression" TEXT NOT NULL DEFAULT '0 3 * * *',
|
||||
"backupMaxCount" INTEGER NOT NULL DEFAULT 10,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Tag" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"name" TEXT NOT NULL,
|
||||
"color" TEXT,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AppTag" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"appId" TEXT NOT NULL,
|
||||
"tagId" TEXT NOT NULL,
|
||||
CONSTRAINT "AppTag_appId_fkey" FOREIGN KEY ("appId") REFERENCES "App" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "AppTag_tagId_fkey" FOREIGN KEY ("tagId") REFERENCES "Tag" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AppLink" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"appId" TEXT NOT NULL,
|
||||
"label" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL,
|
||||
"icon" TEXT,
|
||||
"order" INTEGER NOT NULL DEFAULT 0,
|
||||
CONSTRAINT "AppLink_appId_fkey" FOREIGN KEY ("appId") REFERENCES "App" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "UserFavorite" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"appId" TEXT NOT NULL,
|
||||
"order" INTEGER NOT NULL DEFAULT 0,
|
||||
CONSTRAINT "UserFavorite_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "UserFavorite_appId_fkey" FOREIGN KEY ("appId") REFERENCES "App" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AppClick" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"appId" TEXT NOT NULL,
|
||||
"clickedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "AppClick_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "AppClick_appId_fkey" FOREIGN KEY ("appId") REFERENCES "App" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "NotificationChannel" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"config" TEXT NOT NULL DEFAULT '{}',
|
||||
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "NotificationChannel_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Notification" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"appId" TEXT,
|
||||
"event" TEXT NOT NULL,
|
||||
"message" TEXT NOT NULL,
|
||||
"sentAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"readAt" DATETIME,
|
||||
CONSTRAINT "Notification_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "Notification_appId_fkey" FOREIGN KEY ("appId") REFERENCES "App" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ApiToken" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"tokenHash" TEXT NOT NULL,
|
||||
"scope" TEXT NOT NULL,
|
||||
"lastUsedAt" DATETIME,
|
||||
"expiresAt" DATETIME,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "ApiToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AuditLog" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT,
|
||||
"action" TEXT NOT NULL,
|
||||
"entityType" TEXT NOT NULL,
|
||||
"entityId" TEXT NOT NULL,
|
||||
"details" TEXT NOT NULL DEFAULT '{}',
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "AuditLog_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "BoardTemplate" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"icon" TEXT,
|
||||
"config" TEXT NOT NULL DEFAULT '{}',
|
||||
"isBuiltin" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdById" TEXT,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "BoardTemplate_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "User_email_idx" ON "User"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Group_name_key" ON "Group"("name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "UserGroup_userId_idx" ON "UserGroup"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "UserGroup_groupId_idx" ON "UserGroup"("groupId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "UserGroup_userId_groupId_key" ON "UserGroup"("userId", "groupId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "App_name_idx" ON "App"("name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "App_category_idx" ON "App"("category");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "App_createdById_idx" ON "App"("createdById");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AppStatus_appId_idx" ON "AppStatus"("appId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AppStatus_checkedAt_idx" ON "AppStatus"("checkedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Board_createdById_idx" ON "Board"("createdById");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Section_boardId_idx" ON "Section"("boardId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Widget_sectionId_idx" ON "Widget"("sectionId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Widget_appId_idx" ON "Widget"("appId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Permission_entityType_entityId_idx" ON "Permission"("entityType", "entityId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Permission_targetType_targetId_idx" ON "Permission"("targetType", "targetId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Permission_entityType_entityId_targetType_targetId_key" ON "Permission"("entityType", "entityId", "targetType", "targetId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Tag_name_key" ON "Tag"("name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Tag_name_idx" ON "Tag"("name");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AppTag_appId_idx" ON "AppTag"("appId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AppTag_tagId_idx" ON "AppTag"("tagId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "AppTag_appId_tagId_key" ON "AppTag"("appId", "tagId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AppLink_appId_idx" ON "AppLink"("appId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "UserFavorite_userId_idx" ON "UserFavorite"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "UserFavorite_appId_idx" ON "UserFavorite"("appId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "UserFavorite_userId_appId_key" ON "UserFavorite"("userId", "appId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AppClick_userId_idx" ON "AppClick"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AppClick_appId_idx" ON "AppClick"("appId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AppClick_clickedAt_idx" ON "AppClick"("clickedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "NotificationChannel_userId_idx" ON "NotificationChannel"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Notification_userId_idx" ON "Notification"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Notification_appId_idx" ON "Notification"("appId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Notification_sentAt_idx" ON "Notification"("sentAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ApiToken_tokenHash_key" ON "ApiToken"("tokenHash");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ApiToken_userId_idx" ON "ApiToken"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ApiToken_tokenHash_idx" ON "ApiToken"("tokenHash");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AuditLog_userId_idx" ON "AuditLog"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AuditLog_action_idx" ON "AuditLog"("action");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AuditLog_entityType_entityId_idx" ON "AuditLog"("entityType", "entityId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "AuditLog_createdAt_idx" ON "AuditLog"("createdAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "BoardTemplate_createdById_idx" ON "BoardTemplate"("createdById");
|
||||
|
||||
Reference in New Issue
Block a user