373 lines
12 KiB
SQL
373 lines
12 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "Role" AS ENUM ('COUPLE', 'PLANNER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RsvpStatus" AS ENUM ('PENDING', 'ACCEPTED', 'DECLINED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "VendorStatus" AS ENUM ('RESEARCHING', 'CONTACTING', 'RESPONDED', 'PROPOSAL_RECEIVED', 'NEGOTIATING', 'CONTRACT_SENT', 'CONTRACT_SIGNED', 'DECLINED', 'BACKUP');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "FileKind" AS ENUM ('CONTRACT', 'PROPOSAL', 'OTHER');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"password" TEXT,
|
|
"authProvider" TEXT,
|
|
"providerId" TEXT,
|
|
"isAdmin" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Project" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"archivedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Project_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Membership" (
|
|
"id" TEXT NOT NULL,
|
|
"role" "Role" NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"userId" TEXT NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"eventId" TEXT,
|
|
|
|
CONSTRAINT "Membership_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "InviteToken" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"role" "Role" NOT NULL,
|
|
"token" TEXT NOT NULL,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"acceptedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"projectId" TEXT NOT NULL,
|
|
"eventId" TEXT,
|
|
|
|
CONSTRAINT "InviteToken_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Event" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"date" TIMESTAMP(3),
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Event_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "EventTodo" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"complete" BOOLEAN NOT NULL DEFAULT false,
|
|
"dueDate" TIMESTAMP(3),
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"eventId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "EventTodo_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Address" (
|
|
"id" TEXT NOT NULL,
|
|
"line1" TEXT NOT NULL,
|
|
"line2" TEXT,
|
|
"city" TEXT NOT NULL,
|
|
"state" TEXT NOT NULL,
|
|
"postalCode" TEXT NOT NULL,
|
|
"country" TEXT NOT NULL DEFAULT 'United States',
|
|
|
|
CONSTRAINT "Address_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Household" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"token" TEXT NOT NULL,
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"addressId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Household_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Guest" (
|
|
"id" TEXT NOT NULL,
|
|
"firstName" TEXT NOT NULL,
|
|
"lastName" TEXT,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"notes" TEXT,
|
|
"side" TEXT,
|
|
"congratulated" BOOLEAN NOT NULL DEFAULT false,
|
|
"isPlaceHolder" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"householdId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Guest_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "EventGuest" (
|
|
"id" TEXT NOT NULL,
|
|
"rsvp" "RsvpStatus" NOT NULL DEFAULT 'PENDING',
|
|
"respodedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"eventId" TEXT NOT NULL,
|
|
"guestId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "EventGuest_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "VendorCategory" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"color" TEXT DEFAULT '#3B82F6',
|
|
|
|
CONSTRAINT "VendorCategory_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Vendor" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"website" TEXT,
|
|
"contactPerson" TEXT,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"categoryId" TEXT,
|
|
"addressId" TEXT,
|
|
|
|
CONSTRAINT "Vendor_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "EventVendor" (
|
|
"id" TEXT NOT NULL,
|
|
"status" "VendorStatus" NOT NULL DEFAULT 'RESEARCHING',
|
|
"bookedDate" TIMESTAMP(3),
|
|
"quotedPrice" DECIMAL(65,30),
|
|
"finalCost" DECIMAL(65,30),
|
|
"depositPaid" DECIMAL(65,30),
|
|
"depositDueDate" TIMESTAMP(3),
|
|
"finalPaymentDue" TIMESTAMP(3),
|
|
"paymentNotes" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"eventId" TEXT NOT NULL,
|
|
"vendorId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "EventVendor_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FileUpload" (
|
|
"id" TEXT NOT NULL,
|
|
"originalName" TEXT NOT NULL,
|
|
"storageKey" TEXT NOT NULL,
|
|
"mimeType" TEXT NOT NULL,
|
|
"size" INTEGER NOT NULL,
|
|
"kind" "FileKind" NOT NULL DEFAULT 'OTHER',
|
|
"uploadedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"uploadedById" TEXT NOT NULL,
|
|
"eventId" TEXT,
|
|
"eventVendorId" TEXT,
|
|
|
|
CONSTRAINT "FileUpload_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RegistryItem" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"url" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"eventId" TEXT,
|
|
|
|
CONSTRAINT "RegistryItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AllowedOrigin" (
|
|
"id" TEXT NOT NULL,
|
|
"origin" TEXT NOT NULL,
|
|
"isDefault" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"addedById" TEXT,
|
|
|
|
CONSTRAINT "AllowedOrigin_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_authProvider_providerId_key" ON "User"("authProvider", "providerId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Project_name_key" ON "Project"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Membership_userId_idx" ON "Membership"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Membership_projectId_idx" ON "Membership"("projectId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "InviteToken_token_key" ON "InviteToken"("token");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "InviteToken_email_idx" ON "InviteToken"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Event_slug_key" ON "Event"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Event_projectId_idx" ON "Event"("projectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventTodo_eventId_idx" ON "EventTodo"("eventId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Household_token_key" ON "Household"("token");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Household_addressId_key" ON "Household"("addressId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Household_projectId_idx" ON "Household"("projectId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Guest_householdId_idx" ON "Guest"("householdId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventGuest_guestId_idx" ON "EventGuest"("guestId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "EventGuest_eventId_guestId_key" ON "EventGuest"("eventId", "guestId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Vendor_slug_key" ON "Vendor"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Vendor_addressId_key" ON "Vendor"("addressId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventVendor_vendorId_idx" ON "EventVendor"("vendorId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "EventVendor_vendorId_eventId_key" ON "EventVendor"("vendorId", "eventId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "FileUpload_storageKey_key" ON "FileUpload"("storageKey");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RegistryItem_eventId_slug_key" ON "RegistryItem"("eventId", "slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AllowedOrigin_origin_key" ON "AllowedOrigin"("origin");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Membership" ADD CONSTRAINT "Membership_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Membership" ADD CONSTRAINT "Membership_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Membership" ADD CONSTRAINT "Membership_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "InviteToken" ADD CONSTRAINT "InviteToken_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "InviteToken" ADD CONSTRAINT "InviteToken_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Event" ADD CONSTRAINT "Event_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventTodo" ADD CONSTRAINT "EventTodo_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Household" ADD CONSTRAINT "Household_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Household" ADD CONSTRAINT "Household_addressId_fkey" FOREIGN KEY ("addressId") REFERENCES "Address"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Guest" ADD CONSTRAINT "Guest_householdId_fkey" FOREIGN KEY ("householdId") REFERENCES "Household"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventGuest" ADD CONSTRAINT "EventGuest_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventGuest" ADD CONSTRAINT "EventGuest_guestId_fkey" FOREIGN KEY ("guestId") REFERENCES "Guest"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Vendor" ADD CONSTRAINT "Vendor_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "VendorCategory"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Vendor" ADD CONSTRAINT "Vendor_addressId_fkey" FOREIGN KEY ("addressId") REFERENCES "Address"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventVendor" ADD CONSTRAINT "EventVendor_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventVendor" ADD CONSTRAINT "EventVendor_vendorId_fkey" FOREIGN KEY ("vendorId") REFERENCES "Vendor"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FileUpload" ADD CONSTRAINT "FileUpload_uploadedById_fkey" FOREIGN KEY ("uploadedById") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FileUpload" ADD CONSTRAINT "FileUpload_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FileUpload" ADD CONSTRAINT "FileUpload_eventVendorId_fkey" FOREIGN KEY ("eventVendorId") REFERENCES "EventVendor"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RegistryItem" ADD CONSTRAINT "RegistryItem_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "AllowedOrigin" ADD CONSTRAINT "AllowedOrigin_addedById_fkey" FOREIGN KEY ("addedById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|