Files
ab8556790e feat: add denormalized table for BookingTimeStatus view (#20947)
* feat: add denormalized table for BookingTimeStatus

* Update packages/prisma/migrations/20240320000001_add_booking_time_status_denormalized/migration.sql

Co-authored-by: sean-brydon <[email protected]>

* add more indexes

* improvement

* update schema

* improve indexes

* apply feedback from mrge

* split update trigger for better perf

* remove unnecessary checks

* split migration into two

* less logging

* address feedback

* add updatedAt and userUsername

* remove timeStatus

* add deletion trigger

* clean up denorm table on row deletion at EventType or users

* add timeStatus back as a part of a new view

* keep user and eventType nullable

* rename triggers

* add tests

* clean up migrations

* update tests

* update tests

* update test clean up

* one more try

* similar updates

* use e2e test instead

---------

Co-authored-by: sean-brydon <[email protected]>
2025-05-06 20:34:45 +02:00

63 lines
1.9 KiB
SQL

-- CreateTable
CREATE TABLE "BookingDenormalized" (
"id" INTEGER NOT NULL,
"uid" TEXT NOT NULL,
"eventTypeId" INTEGER,
"title" TEXT NOT NULL,
"description" TEXT,
"startTime" TIMESTAMP(3) NOT NULL,
"endTime" TIMESTAMP(3) NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL,
"updatedAt" TIMESTAMP(3),
"location" TEXT,
"paid" BOOLEAN NOT NULL,
"status" "BookingStatus" NOT NULL,
"rescheduled" BOOLEAN,
"userId" INTEGER,
"teamId" INTEGER,
"eventLength" INTEGER,
"eventParentId" INTEGER,
"userEmail" TEXT,
"userName" TEXT,
"userUsername" TEXT,
"ratingFeedback" TEXT,
"rating" INTEGER,
"noShowHost" BOOLEAN,
"isTeamBooking" BOOLEAN NOT NULL,
CONSTRAINT "BookingDenormalized_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "BookingDenormalized_userId_idx" ON "BookingDenormalized"("userId");
-- CreateIndex
CREATE INDEX "BookingDenormalized_createdAt_idx" ON "BookingDenormalized"("createdAt");
-- CreateIndex
CREATE INDEX "BookingDenormalized_eventTypeId_idx" ON "BookingDenormalized"("eventTypeId");
-- CreateIndex
CREATE INDEX "BookingDenormalized_eventParentId_idx" ON "BookingDenormalized"("eventParentId");
-- CreateIndex
CREATE INDEX "BookingDenormalized_teamId_idx" ON "BookingDenormalized"("teamId");
-- CreateIndex
CREATE INDEX "BookingDenormalized_startTime_idx" ON "BookingDenormalized"("startTime");
-- CreateIndex
CREATE INDEX "BookingDenormalized_endTime_idx" ON "BookingDenormalized"("endTime");
-- CreateIndex
CREATE INDEX "BookingDenormalized_status_idx" ON "BookingDenormalized"("status");
-- CreateIndex
CREATE INDEX "BookingDenormalized_teamId_isTeamBooking_idx" ON "BookingDenormalized"("teamId", "isTeamBooking");
-- CreateIndex
CREATE INDEX "BookingDenormalized_userId_isTeamBooking_idx" ON "BookingDenormalized"("userId", "isTeamBooking");
-- CreateIndex
CREATE UNIQUE INDEX "BookingDenormalized_id_key" ON "BookingDenormalized"("id");