153 lines
4.9 KiB
SQL
153 lines
4.9 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "Role" AS ENUM ('SUPER_ADMIN', 'INSTRUCTOR', 'CLIENT');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "MediaStatus" AS ENUM ('PROCESSING', 'READY');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "BookingStatus" AS ENUM ('CONFIRMED', 'CANCELLED', 'ATTENDED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "tenants" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"domain" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "tenants_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "users" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"name" TEXT,
|
|
"role" "Role" NOT NULL DEFAULT 'CLIENT',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "class_sessions" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"startTime" TIMESTAMP(3) NOT NULL,
|
|
"endTime" TIMESTAMP(3) NOT NULL,
|
|
"capacity" INTEGER NOT NULL,
|
|
"jitsiRoomId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "class_sessions_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "bookings" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"classSessionId" TEXT NOT NULL,
|
|
"status" "BookingStatus" NOT NULL DEFAULT 'CONFIRMED',
|
|
"signedWaiverAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "bookings_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "media_assets" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"s3Key" TEXT NOT NULL,
|
|
"status" "MediaStatus" NOT NULL DEFAULT 'PROCESSING',
|
|
"rawUrl" TEXT,
|
|
"transcodedUrl" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "media_assets_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "e_waivers" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"parqStatus" TEXT NOT NULL,
|
|
"signedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"ipAddress" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "e_waivers_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "tenants_slug_key" ON "tenants"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "tenants_domain_key" ON "tenants"("domain");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "users_tenantId_idx" ON "users"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_tenantId_email_key" ON "users"("tenantId", "email");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "class_sessions_tenantId_idx" ON "class_sessions"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bookings_tenantId_idx" ON "bookings"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bookings_userId_idx" ON "bookings"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "bookings_classSessionId_idx" ON "bookings"("classSessionId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "bookings_userId_classSessionId_key" ON "bookings"("userId", "classSessionId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "media_assets_tenantId_idx" ON "media_assets"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "e_waivers_tenantId_idx" ON "e_waivers"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "e_waivers_userId_idx" ON "e_waivers"("userId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "users" ADD CONSTRAINT "users_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "tenants"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "class_sessions" ADD CONSTRAINT "class_sessions_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "tenants"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "bookings" ADD CONSTRAINT "bookings_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "tenants"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "bookings" ADD CONSTRAINT "bookings_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "bookings" ADD CONSTRAINT "bookings_classSessionId_fkey" FOREIGN KEY ("classSessionId") REFERENCES "class_sessions"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "media_assets" ADD CONSTRAINT "media_assets_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "tenants"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "e_waivers" ADD CONSTRAINT "e_waivers_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "tenants"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "e_waivers" ADD CONSTRAINT "e_waivers_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|