317 lines
10 KiB
SQL
317 lines
10 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "UserRole" AS ENUM ('ADMIN', 'PRODUCER', 'SUPERVISOR', 'ARTIST');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "JobStatus" AS ENUM ('DRAFT', 'SENT', 'APPROVED', 'REJECTED', 'ARCHIVED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "users" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT,
|
|
"email" TEXT NOT NULL,
|
|
"emailVerified" TIMESTAMP(3),
|
|
"image" TEXT,
|
|
"password" TEXT,
|
|
"role" "UserRole" NOT NULL DEFAULT 'ARTIST',
|
|
"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,
|
|
"companyName" TEXT NOT NULL,
|
|
"contactPerson" TEXT,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"vatNumber" TEXT,
|
|
"companyRegNumber" TEXT,
|
|
"billingAddress" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "clients_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "jobs" (
|
|
"id" TEXT NOT NULL,
|
|
"projectTitle" TEXT NOT NULL,
|
|
"projectCode" TEXT NOT NULL,
|
|
"clientId" TEXT NOT NULL,
|
|
"createdById" TEXT,
|
|
"issueDate" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"expiryDate" TIMESTAMP(3),
|
|
"currency" TEXT NOT NULL DEFAULT 'USD',
|
|
"status" "JobStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"description" TEXT,
|
|
"internalNotes" TEXT,
|
|
"markupPercent" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"taxPercent" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"discountPercent" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"customHeaderHtml" TEXT,
|
|
"customFooterHtml" TEXT,
|
|
"termsAndConditions" TEXT,
|
|
"version" INTEGER NOT NULL DEFAULT 1,
|
|
"parentJobId" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "jobs_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "job_history" (
|
|
"id" TEXT NOT NULL,
|
|
"jobId" TEXT NOT NULL,
|
|
"field" TEXT NOT NULL,
|
|
"oldValue" TEXT,
|
|
"newValue" TEXT,
|
|
"changedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"changedBy" TEXT,
|
|
|
|
CONSTRAINT "job_history_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "comments" (
|
|
"id" TEXT NOT NULL,
|
|
"jobId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"body" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "comments_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "rate_cards" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"department" TEXT,
|
|
"defaultDailyRate" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"hoursPerDay" DECIMAL(5,2) NOT NULL DEFAULT 8,
|
|
"currency" TEXT NOT NULL DEFAULT 'USD',
|
|
"notes" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "rate_cards_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "shot_templates" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "shot_templates_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "shot_line_item_templates" (
|
|
"id" TEXT NOT NULL,
|
|
"templateId" TEXT NOT NULL,
|
|
"taskName" TEXT NOT NULL,
|
|
"artistRole" TEXT,
|
|
"defaultHours" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"rateCardId" TEXT,
|
|
"notes" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "shot_line_item_templates_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "asset_templates" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "asset_templates_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "asset_line_item_templates" (
|
|
"id" TEXT NOT NULL,
|
|
"templateId" TEXT NOT NULL,
|
|
"taskName" TEXT NOT NULL,
|
|
"artistRole" TEXT,
|
|
"defaultHours" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"rateCardId" TEXT,
|
|
"notes" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "asset_line_item_templates_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "shots" (
|
|
"id" TEXT NOT NULL,
|
|
"jobId" TEXT NOT NULL,
|
|
"shotCode" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"durationSeconds" INTEGER,
|
|
"complexityMultiplier" DECIMAL(5,4) NOT NULL DEFAULT 1,
|
|
"notes" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "shots_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "assets" (
|
|
"id" TEXT NOT NULL,
|
|
"jobId" TEXT NOT NULL,
|
|
"assetName" TEXT NOT NULL,
|
|
"assetType" TEXT,
|
|
"description" TEXT,
|
|
"complexityMultiplier" DECIMAL(5,4) NOT NULL DEFAULT 1,
|
|
"notes" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "assets_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "line_items" (
|
|
"id" TEXT NOT NULL,
|
|
"shotId" TEXT,
|
|
"assetId" TEXT,
|
|
"rateCardId" TEXT,
|
|
"taskName" TEXT NOT NULL,
|
|
"artistRole" TEXT,
|
|
"quantityHours" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"dailyRate" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"hoursPerDay" DECIMAL(5,2) NOT NULL DEFAULT 8,
|
|
"numArtists" DECIMAL(5,2) NOT NULL DEFAULT 1,
|
|
"numDays" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"manualHourlyRate" DECIMAL(10,4),
|
|
"manualSubtotal" DECIMAL(14,4),
|
|
"markupPercent" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"discountPercent" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"taxPercent" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"hourlyRate" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"subtotal" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"markupAmount" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"discountAmount" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"taxAmount" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"total" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"notes" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "line_items_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 "jobs_projectCode_key" ON "jobs"("projectCode");
|
|
|
|
-- 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 "jobs" ADD CONSTRAINT "jobs_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "clients"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "jobs" ADD CONSTRAINT "jobs_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "jobs" ADD CONSTRAINT "jobs_parentJobId_fkey" FOREIGN KEY ("parentJobId") REFERENCES "jobs"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "job_history" ADD CONSTRAINT "job_history_jobId_fkey" FOREIGN KEY ("jobId") REFERENCES "jobs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "comments" ADD CONSTRAINT "comments_jobId_fkey" FOREIGN KEY ("jobId") REFERENCES "jobs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "comments" ADD CONSTRAINT "comments_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "shot_line_item_templates" ADD CONSTRAINT "shot_line_item_templates_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "shot_templates"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "asset_line_item_templates" ADD CONSTRAINT "asset_line_item_templates_templateId_fkey" FOREIGN KEY ("templateId") REFERENCES "asset_templates"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "shots" ADD CONSTRAINT "shots_jobId_fkey" FOREIGN KEY ("jobId") REFERENCES "jobs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "assets" ADD CONSTRAINT "assets_jobId_fkey" FOREIGN KEY ("jobId") REFERENCES "jobs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "line_items" ADD CONSTRAINT "line_items_shotId_fkey" FOREIGN KEY ("shotId") REFERENCES "shots"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "line_items" ADD CONSTRAINT "line_items_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES "assets"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "line_items" ADD CONSTRAINT "line_items_rateCardId_fkey" FOREIGN KEY ("rateCardId") REFERENCES "rate_cards"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|