Initial commit
This commit is contained in:
@@ -0,0 +1,347 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "Role" AS ENUM ('ADMIN', 'PRODUCER', 'SUPERVISOR', 'ARTIST', 'CLIENT');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ProjectStatus" AS ENUM ('ACTIVE', 'ON_HOLD', 'COMPLETED', 'ARCHIVED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ShotStatus" AS ENUM ('WAITING', 'IN_PROGRESS', 'INTERNAL_REVIEW', 'CLIENT_REVIEW', 'REVISIONS', 'APPROVED', 'FINAL');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ShotPriority" AS ENUM ('LOW', 'NORMAL', 'HIGH', 'URGENT');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ApprovalStatus" AS ENUM ('PENDING_REVIEW', 'APPROVED', 'REJECTED', 'NEEDS_CHANGES');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ReviewStatus" AS ENUM ('PENDING', 'INTERNAL_APPROVED', 'CLIENT_APPROVED', 'NEEDS_CHANGES', 'FINAL_APPROVED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "NotificationType" AS ENUM ('VERSION_UPLOADED', 'FEEDBACK_ADDED', 'SHOT_APPROVED', 'SHOT_REJECTED', 'COMMENT_REPLY', 'MENTION', 'REVISION_REQUESTED');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "users" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT,
|
||||
"email" TEXT NOT NULL,
|
||||
"emailVerified" TIMESTAMP(3),
|
||||
"image" TEXT,
|
||||
"passwordHash" TEXT,
|
||||
"role" "Role" NOT NULL DEFAULT 'ARTIST',
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "accounts" (
|
||||
"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,
|
||||
|
||||
CONSTRAINT "accounts_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "sessions" (
|
||||
"id" TEXT NOT NULL,
|
||||
"sessionToken" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"expires" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "sessions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "verification_tokens" (
|
||||
"identifier" TEXT NOT NULL,
|
||||
"token" TEXT NOT NULL,
|
||||
"expires" TIMESTAMP(3) NOT NULL
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "clients" (
|
||||
"id" TEXT NOT NULL,
|
||||
"company" TEXT NOT NULL,
|
||||
"contactPerson" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"phone" TEXT,
|
||||
"notes" TEXT,
|
||||
"logoUrl" TEXT,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "clients_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "client_access" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"clientId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "client_access_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "projects" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"code" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"status" "ProjectStatus" NOT NULL DEFAULT 'ACTIVE',
|
||||
"dueDate" TIMESTAMP(3),
|
||||
"startDate" TIMESTAMP(3),
|
||||
"clientId" TEXT NOT NULL,
|
||||
"producerId" TEXT,
|
||||
"supervisorId" TEXT,
|
||||
"slackWebhook" TEXT,
|
||||
"slackChannel" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "projects_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "shots" (
|
||||
"id" TEXT NOT NULL,
|
||||
"shotCode" TEXT NOT NULL,
|
||||
"sequence" TEXT,
|
||||
"description" TEXT,
|
||||
"status" "ShotStatus" NOT NULL DEFAULT 'WAITING',
|
||||
"priority" "ShotPriority" NOT NULL DEFAULT 'NORMAL',
|
||||
"artistId" TEXT,
|
||||
"projectId" TEXT NOT NULL,
|
||||
"frameStart" INTEGER,
|
||||
"frameEnd" INTEGER,
|
||||
"fps" DOUBLE PRECISION NOT NULL DEFAULT 24,
|
||||
"dueDate" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "shots_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "versions" (
|
||||
"id" TEXT NOT NULL,
|
||||
"versionNumber" INTEGER NOT NULL,
|
||||
"shotId" TEXT NOT NULL,
|
||||
"artistId" TEXT,
|
||||
"fileUrl" TEXT NOT NULL,
|
||||
"fileName" TEXT NOT NULL,
|
||||
"fileSize" BIGINT,
|
||||
"mimeType" TEXT,
|
||||
"thumbnailUrl" TEXT,
|
||||
"posterUrl" TEXT,
|
||||
"proxyUrl" TEXT,
|
||||
"fps" DOUBLE PRECISION NOT NULL DEFAULT 24,
|
||||
"duration" DOUBLE PRECISION,
|
||||
"frameCount" INTEGER,
|
||||
"width" INTEGER,
|
||||
"height" INTEGER,
|
||||
"notes" TEXT,
|
||||
"approvalStatus" "ApprovalStatus" NOT NULL DEFAULT 'PENDING_REVIEW',
|
||||
"reviewStatus" "ReviewStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"isLatest" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "versions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "comments" (
|
||||
"id" TEXT NOT NULL,
|
||||
"versionId" TEXT NOT NULL,
|
||||
"authorId" TEXT NOT NULL,
|
||||
"frameNumber" INTEGER NOT NULL,
|
||||
"timestamp" DOUBLE PRECISION NOT NULL,
|
||||
"text" TEXT NOT NULL,
|
||||
"isResolved" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "comments_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "comment_replies" (
|
||||
"id" TEXT NOT NULL,
|
||||
"commentId" TEXT NOT NULL,
|
||||
"authorId" TEXT NOT NULL,
|
||||
"text" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "comment_replies_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "annotations" (
|
||||
"id" TEXT NOT NULL,
|
||||
"versionId" TEXT NOT NULL,
|
||||
"commentId" TEXT,
|
||||
"authorId" TEXT NOT NULL,
|
||||
"frameNumber" INTEGER NOT NULL,
|
||||
"drawingData" JSONB NOT NULL,
|
||||
"color" TEXT NOT NULL DEFAULT '#ef4444',
|
||||
"isVisible" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "annotations_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "approvals" (
|
||||
"id" TEXT NOT NULL,
|
||||
"versionId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"status" "ApprovalStatus" NOT NULL,
|
||||
"notes" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "approvals_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "notifications" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"type" "NotificationType" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"message" TEXT NOT NULL,
|
||||
"data" JSONB,
|
||||
"isRead" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "notifications_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "review_sessions" (
|
||||
"id" TEXT NOT NULL,
|
||||
"projectId" TEXT NOT NULL,
|
||||
"token" TEXT NOT NULL,
|
||||
"label" TEXT,
|
||||
"email" TEXT,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"accessCount" INTEGER NOT NULL DEFAULT 0,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "review_sessions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "accounts_provider_providerAccountId_key" ON "accounts"("provider", "providerAccountId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "sessions_sessionToken_key" ON "sessions"("sessionToken");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "verification_tokens_token_key" ON "verification_tokens"("token");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "verification_tokens_identifier_token_key" ON "verification_tokens"("identifier", "token");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "clients_email_key" ON "clients"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "client_access_userId_clientId_key" ON "client_access"("userId", "clientId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "projects_code_key" ON "projects"("code");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "shots_projectId_shotCode_key" ON "shots"("projectId", "shotCode");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "versions_shotId_versionNumber_key" ON "versions"("shotId", "versionNumber");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "review_sessions_token_key" ON "review_sessions"("token");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "accounts" ADD CONSTRAINT "accounts_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "sessions" ADD CONSTRAINT "sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "client_access" ADD CONSTRAINT "client_access_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "client_access" ADD CONSTRAINT "client_access_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "clients"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "projects" ADD CONSTRAINT "projects_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "clients"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "projects" ADD CONSTRAINT "projects_producerId_fkey" FOREIGN KEY ("producerId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "projects" ADD CONSTRAINT "projects_supervisorId_fkey" FOREIGN KEY ("supervisorId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "shots" ADD CONSTRAINT "shots_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "shots" ADD CONSTRAINT "shots_artistId_fkey" FOREIGN KEY ("artistId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "versions" ADD CONSTRAINT "versions_shotId_fkey" FOREIGN KEY ("shotId") REFERENCES "shots"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "versions" ADD CONSTRAINT "versions_artistId_fkey" FOREIGN KEY ("artistId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "comments" ADD CONSTRAINT "comments_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "versions"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "comments" ADD CONSTRAINT "comments_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "comment_replies" ADD CONSTRAINT "comment_replies_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "comments"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "comment_replies" ADD CONSTRAINT "comment_replies_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "annotations" ADD CONSTRAINT "annotations_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "versions"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "annotations" ADD CONSTRAINT "annotations_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "comments"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "annotations" ADD CONSTRAINT "annotations_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "approvals" ADD CONSTRAINT "approvals_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "versions"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "approvals" ADD CONSTRAINT "approvals_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "review_sessions" ADD CONSTRAINT "review_sessions_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,107 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "TaskStatus" AS ENUM ('TODO', 'IN_PROGRESS', 'INTERNAL_REVIEW', 'CLIENT_REVIEW', 'CHANGES', 'DONE');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "TaskType" AS ENUM ('TRACK', 'ROTO', 'KEY', 'COMP', 'FX', 'LIGHTING', 'RENDER', 'ANIMATION', 'MODEL', 'TEXTURE', 'RIG', 'LOOKDEV', 'GENERAL');
|
||||
|
||||
-- AlterEnum
|
||||
-- This migration adds more than one value to an enum.
|
||||
-- With PostgreSQL versions 11 and earlier, this is not possible
|
||||
-- in a single migration. This can be worked around by creating
|
||||
-- multiple migrations, each migration adding only one value to
|
||||
-- the enum.
|
||||
|
||||
|
||||
ALTER TYPE "NotificationType" ADD VALUE 'TASK_ASSIGNED';
|
||||
ALTER TYPE "NotificationType" ADD VALUE 'TASK_OVERDUE';
|
||||
ALTER TYPE "NotificationType" ADD VALUE 'TASK_APPROVED';
|
||||
ALTER TYPE "NotificationType" ADD VALUE 'TASK_CHANGES_REQUESTED';
|
||||
ALTER TYPE "NotificationType" ADD VALUE 'TASK_READY_FOR_REVIEW';
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "projects" DROP CONSTRAINT "projects_clientId_fkey";
|
||||
|
||||
-- DropIndex
|
||||
DROP INDEX "versions_shotId_versionNumber_key";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "projects" ALTER COLUMN "clientId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "versions" ADD COLUMN "isClientVisible" BOOLEAN NOT NULL DEFAULT false,
|
||||
ADD COLUMN "sharedAt" TIMESTAMP(3),
|
||||
ADD COLUMN "sharedById" TEXT,
|
||||
ADD COLUMN "taskId" TEXT,
|
||||
ALTER COLUMN "shotId" DROP NOT NULL;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "assets" (
|
||||
"id" TEXT NOT NULL,
|
||||
"projectId" TEXT NOT NULL,
|
||||
"assetCode" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"status" "ShotStatus" NOT NULL DEFAULT 'WAITING',
|
||||
"priority" "ShotPriority" NOT NULL DEFAULT 'NORMAL',
|
||||
"leadId" TEXT,
|
||||
"dueDate" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "assets_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "tasks" (
|
||||
"id" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"type" "TaskType" NOT NULL DEFAULT 'GENERAL',
|
||||
"status" "TaskStatus" NOT NULL DEFAULT 'TODO',
|
||||
"priority" "ShotPriority" NOT NULL DEFAULT 'NORMAL',
|
||||
"dueDate" TIMESTAMP(3),
|
||||
"estimatedHours" DOUBLE PRECISION,
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
"shotId" TEXT,
|
||||
"assetId" TEXT,
|
||||
"assignedArtistId" TEXT,
|
||||
"createdById" TEXT NOT NULL,
|
||||
"projectId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "tasks_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "assets_projectId_assetCode_key" ON "assets"("projectId", "assetCode");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "projects" ADD CONSTRAINT "projects_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "clients"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "versions" ADD CONSTRAINT "versions_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "versions" ADD CONSTRAINT "versions_sharedById_fkey" FOREIGN KEY ("sharedById") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "assets" ADD CONSTRAINT "assets_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "assets" ADD CONSTRAINT "assets_leadId_fkey" FOREIGN KEY ("leadId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_shotId_fkey" FOREIGN KEY ("shotId") REFERENCES "shots"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES "assets"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_assignedArtistId_fkey" FOREIGN KEY ("assignedArtistId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,29 @@
|
||||
-- Migration: Task-First Workflow Refactor
|
||||
-- 1. Delete old shot-based versions (versions linked to shots, not tasks)
|
||||
DELETE FROM "versions" WHERE "shotId" IS NOT NULL AND "taskId" IS NULL;
|
||||
|
||||
-- 2. Drop defaults before type changes (they hold a reference to the enum)
|
||||
ALTER TABLE "shots" ALTER COLUMN "status" DROP DEFAULT;
|
||||
ALTER TABLE "assets" ALTER COLUMN "status" DROP DEFAULT;
|
||||
|
||||
-- 3. Cast status columns to text so we can rename values
|
||||
ALTER TABLE "shots" ALTER COLUMN "status" TYPE TEXT;
|
||||
ALTER TABLE "assets" ALTER COLUMN "status" TYPE TEXT;
|
||||
|
||||
-- 4. Rename old enum values in the data
|
||||
UPDATE "shots" SET "status" = 'IN_REVIEW' WHERE "status" IN ('INTERNAL_REVIEW', 'CLIENT_REVIEW');
|
||||
UPDATE "shots" SET "status" = 'COMPLETE' WHERE "status" IN ('APPROVED', 'FINAL');
|
||||
UPDATE "assets" SET "status" = 'IN_REVIEW' WHERE "status" IN ('INTERNAL_REVIEW', 'CLIENT_REVIEW');
|
||||
UPDATE "assets" SET "status" = 'COMPLETE' WHERE "status" IN ('APPROVED', 'FINAL');
|
||||
|
||||
-- 5. Drop old enum type (no dependents remain)
|
||||
DROP TYPE "ShotStatus";
|
||||
|
||||
-- 6. Create new enum type with 5 values
|
||||
CREATE TYPE "ShotStatus" AS ENUM ('WAITING', 'IN_PROGRESS', 'IN_REVIEW', 'REVISIONS', 'COMPLETE');
|
||||
|
||||
-- 7. Convert columns back to the new enum and restore defaults
|
||||
ALTER TABLE "shots" ALTER COLUMN "status" TYPE "ShotStatus" USING "status"::"ShotStatus";
|
||||
ALTER TABLE "shots" ALTER COLUMN "status" SET DEFAULT 'WAITING';
|
||||
ALTER TABLE "assets" ALTER COLUMN "status" TYPE "ShotStatus" USING "status"::"ShotStatus";
|
||||
ALTER TABLE "assets" ALTER COLUMN "status" SET DEFAULT 'WAITING';
|
||||
@@ -0,0 +1,11 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ProjectType" AS ENUM ('STANDARD', 'EPISODIC');
|
||||
|
||||
-- AlterTable projects: add showId and projectType
|
||||
ALTER TABLE "projects" ADD COLUMN "showId" TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE "projects" ADD COLUMN "projectType" "ProjectType" NOT NULL DEFAULT 'STANDARD';
|
||||
|
||||
-- AlterTable shots: add scene, episode, shotNumber
|
||||
ALTER TABLE "shots" ADD COLUMN "scene" TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE "shots" ADD COLUMN "episode" TEXT;
|
||||
ALTER TABLE "shots" ADD COLUMN "shotNumber" INTEGER NOT NULL DEFAULT 0;
|
||||
@@ -0,0 +1,2 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "shots" ADD COLUMN "thumbnailUrl" TEXT;
|
||||
@@ -0,0 +1,2 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "users" ADD COLUMN "mustChangePassword" BOOLEAN NOT NULL DEFAULT false;
|
||||
@@ -0,0 +1,44 @@
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "annotations" DROP CONSTRAINT "annotations_authorId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "approvals" DROP CONSTRAINT "approvals_userId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "comment_replies" DROP CONSTRAINT "comment_replies_authorId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "comments" DROP CONSTRAINT "comments_authorId_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "tasks" DROP CONSTRAINT "tasks_createdById_fkey";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "annotations" ALTER COLUMN "authorId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "approvals" ALTER COLUMN "userId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "comment_replies" ALTER COLUMN "authorId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "comments" ALTER COLUMN "authorId" DROP NOT NULL;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "tasks" ALTER COLUMN "createdById" DROP NOT NULL;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "comments" ADD CONSTRAINT "comments_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "comment_replies" ADD CONSTRAINT "comment_replies_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "annotations" ADD CONSTRAINT "annotations_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "approvals" ADD CONSTRAINT "approvals_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,10 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "tasks" ADD COLUMN "scheduleNotes" TEXT,
|
||||
ADD COLUMN "scheduledEndDate" TIMESTAMP(3),
|
||||
ADD COLUMN "scheduledStartDate" TIMESTAMP(3);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "tasks_scheduledStartDate_idx" ON "tasks"("scheduledStartDate");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "tasks_scheduledEndDate_idx" ON "tasks"("scheduledEndDate");
|
||||
@@ -0,0 +1,3 @@
|
||||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (e.g., Git)
|
||||
provider = "postgresql"
|
||||
Reference in New Issue
Block a user