1-- AlterEnum 2-- This migration adds more than one value to an enum. 3-- With PostgreSQL versions 11 and earlier, this is not possible 4-- in a single migration. This can be worked around by creating 5-- multiple migrations, each migration adding only one value to 6-- the enum. 7 8 9ALTER TYPE "NotificationType" ADD VALUE 'REVIEW_REQUESTED'; 10ALTER TYPE "NotificationType" ADD VALUE 'APPROVAL_DECISION'; 11ALTER TYPE "NotificationType" ADD VALUE 'WATCH_UPDATE'; 12ALTER TYPE "NotificationType" ADD VALUE 'TASK_DUE'; 13 14-- AlterTable 15ALTER TABLE "pages" ADD COLUMN "kind" TEXT NOT NULL DEFAULT 'page', 16ADD COLUMN "reviewState" TEXT NOT NULL DEFAULT 'published'; 17 18-- AlterTable 19ALTER TABLE "templates" ADD COLUMN "category" TEXT, 20ADD COLUMN "defaultFor" TEXT, 21ADD COLUMN "description" TEXT, 22ADD COLUMN "variables" JSONB; 23 24-- AlterTable 25ALTER TABLE "workspaces" ADD COLUMN "archivedAt" TIMESTAMP(3), 26ADD COLUMN "type" TEXT NOT NULL DEFAULT 'team'; 27 28-- CreateTable 29CREATE TABLE "template_versions" ( 30 "id" TEXT NOT NULL, 31 "templateId" TEXT NOT NULL, 32 "version" INTEGER NOT NULL, 33 "snapshot" JSONB NOT NULL, 34 "name" TEXT, 35 "description" TEXT, 36 "variables" JSONB, 37 "note" TEXT, 38 "createdBy" TEXT, 39 "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 40 41 CONSTRAINT "template_versions_pkey" PRIMARY KEY ("id") 42); 43 44-- CreateTable 45CREATE TABLE "whiteboards" ( 46 "id" TEXT NOT NULL, 47 "pageId" TEXT NOT NULL, 48 "canvas" JSONB NOT NULL, 49 "schemaVersion" INTEGER NOT NULL DEFAULT 1, 50 "updatedBy" TEXT, 51 "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 52 "updatedAt" TIMESTAMP(3) NOT NULL, 53 54 CONSTRAINT "whiteboards_pkey" PRIMARY KEY ("id") 55); 56 57-- CreateTable 58CREATE TABLE "reviews" ( 59 "id" TEXT NOT NULL, 60 "pageId" TEXT NOT NULL, 61 "state" TEXT NOT NULL, 62 "reviewerIds" TEXT[] DEFAULT ARRAY[]::TEXT[], 63 "requestedBy" TEXT NOT NULL, 64 "comment" TEXT, 65 "deadline" TIMESTAMP(3), 66 "decision" TEXT, 67 "decidedAt" TIMESTAMP(3), 68 "decidedBy" TEXT, 69 "openedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 70 "closedAt" TIMESTAMP(3), 71 72 CONSTRAINT "reviews_pkey" PRIMARY KEY ("id") 73); 74 75-- CreateTable 76CREATE TABLE "tasks" ( 77 "id" TEXT NOT NULL, 78 "workspaceId" TEXT NOT NULL, 79 "pageId" TEXT NOT NULL, 80 "title" TEXT NOT NULL, 81 "assigneeIds" TEXT[] DEFAULT ARRAY[]::TEXT[], 82 "createdBy" TEXT NOT NULL, 83 "status" TEXT NOT NULL DEFAULT 'todo', 84 "dueAt" TIMESTAMP(3), 85 "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 86 "updatedAt" TIMESTAMP(3) NOT NULL, 87 88 CONSTRAINT "tasks_pkey" PRIMARY KEY ("id") 89); 90 91-- CreateTable 92CREATE TABLE "page_watches" ( 93 "id" TEXT NOT NULL, 94 "pageId" TEXT NOT NULL, 95 "userId" TEXT NOT NULL, 96 "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 97 98 CONSTRAINT "page_watches_pkey" PRIMARY KEY ("id") 99); 100 101-- CreateTable 102CREATE TABLE "user_recent_items" ( 103 "id" TEXT NOT NULL, 104 "userId" TEXT NOT NULL, 105 "itemType" TEXT NOT NULL, 106 "refId" TEXT NOT NULL, 107 "at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 108 109 CONSTRAINT "user_recent_items_pkey" PRIMARY KEY ("id") 110); 111 112-- CreateTable 113CREATE TABLE "saved_searches" ( 114 "id" TEXT NOT NULL, 115 "userId" TEXT NOT NULL, 116 "workspaceId" TEXT, 117 "name" TEXT NOT NULL, 118 "queryJson" JSONB NOT NULL, 119 "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 120 "updatedAt" TIMESTAMP(3) NOT NULL, 121 122 CONSTRAINT "saved_searches_pkey" PRIMARY KEY ("id") 123); 124 125-- CreateIndex 126CREATE UNIQUE INDEX "template_versions_templateId_version_key" ON "template_versions"("templateId", "version"); 127 128-- CreateIndex 129CREATE UNIQUE INDEX "whiteboards_pageId_key" ON "whiteboards"("pageId"); 130 131-- CreateIndex 132CREATE INDEX "reviews_pageId_state_idx" ON "reviews"("pageId", "state"); 133 134-- CreateIndex 135CREATE INDEX "reviews_reviewerIds_idx" ON "reviews"("reviewerIds"); 136 137-- CreateIndex 138CREATE UNIQUE INDEX "tasks_pageId_key" ON "tasks"("pageId"); 139 140-- CreateIndex 141CREATE INDEX "tasks_workspaceId_status_idx" ON "tasks"("workspaceId", "status"); 142 143-- CreateIndex 144CREATE INDEX "tasks_assigneeIds_idx" ON "tasks"("assigneeIds"); 145 146-- CreateIndex 147CREATE INDEX "tasks_workspaceId_dueAt_idx" ON "tasks"("workspaceId", "dueAt"); 148 149-- CreateIndex 150CREATE INDEX "page_watches_userId_idx" ON "page_watches"("userId"); 151 152-- CreateIndex 153CREATE UNIQUE INDEX "page_watches_pageId_userId_key" ON "page_watches"("pageId", "userId"); 154 155-- CreateIndex 156CREATE INDEX "user_recent_items_userId_at_idx" ON "user_recent_items"("userId", "at"); 157 158-- CreateIndex 159CREATE UNIQUE INDEX "user_recent_items_userId_itemType_refId_key" ON "user_recent_items"("userId", "itemType", "refId"); 160 161-- CreateIndex 162CREATE INDEX "saved_searches_userId_idx" ON "saved_searches"("userId"); 163 164-- AddForeignKey 165ALTER TABLE "template_versions" ADD CONSTRAINT "template_versions_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "templates"("id") ON DELETE CASCADE ON UPDATE CASCADE; 166 167-- AddForeignKey 168ALTER TABLE "whiteboards" ADD CONSTRAINT "whiteboards_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE; 169 170-- AddForeignKey 171ALTER TABLE "reviews" ADD CONSTRAINT "reviews_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE; 172 173-- AddForeignKey 174ALTER TABLE "tasks" ADD CONSTRAINT "tasks_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE; 175 176-- AddForeignKey 177ALTER TABLE "page_watches" ADD CONSTRAINT "page_watches_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE; 178 179-- AddForeignKey 180ALTER TABLE "page_watches" ADD CONSTRAINT "page_watches_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; 181 182-- AddForeignKey 183ALTER TABLE "user_recent_items" ADD CONSTRAINT "user_recent_items_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; 184 185-- AddForeignKey 186ALTER TABLE "saved_searches" ADD CONSTRAINT "saved_searches_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; 187