Events can run over several sessions: per-session check-in with a whole-day or session-time window, late joining with pro-rata or fixed late pricing, an attendance register (Excel/PDF), session reminders, and completion certificates (four templates, public verify page). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
133 lines
4.9 KiB
SQL
133 lines
4.9 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "ScheduleType" AS ENUM ('single', 'sessions');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "AttendanceMode" AS ENUM ('whole', 'pick');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "LatePricing" AS ENUM ('full', 'prorata', 'fixed');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CheckInWindow" AS ENUM ('whole_day', 'session_only');
|
|
|
|
-- 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 "AdminAuditAction" ADD VALUE 'event_sessions_changed';
|
|
ALTER TYPE "AdminAuditAction" ADD VALUE 'attendance_marked';
|
|
ALTER TYPE "AdminAuditAction" ADD VALUE 'attendance_unmarked';
|
|
ALTER TYPE "AdminAuditAction" ADD VALUE 'certificate_issued';
|
|
ALTER TYPE "AdminAuditAction" ADD VALUE 'certificate_revoked';
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "Event" ADD COLUMN "attendanceMode" "AttendanceMode" NOT NULL DEFAULT 'whole',
|
|
ADD COLUMN "certificateConfig" JSONB,
|
|
ADD COLUMN "certificatesEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
ADD COLUMN "checkInWindow" "CheckInWindow" NOT NULL DEFAULT 'whole_day',
|
|
ADD COLUMN "lateFixedPrice" DOUBLE PRECISION,
|
|
ADD COLUMN "lateJoinEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
ADD COLUMN "lateJoinUntilSessionId" TEXT,
|
|
ADD COLUMN "latePricing" "LatePricing" NOT NULL DEFAULT 'full',
|
|
ADD COLUMN "scheduleType" "ScheduleType" NOT NULL DEFAULT 'single',
|
|
ADD COLUMN "sessionReminders" JSONB;
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "TicketUsage" ADD COLUMN "manual" BOOLEAN NOT NULL DEFAULT false,
|
|
ADD COLUMN "sessionId" TEXT;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "EventSession" (
|
|
"id" TEXT NOT NULL,
|
|
"eventId" TEXT NOT NULL,
|
|
"label" TEXT,
|
|
"startsAt" TIMESTAMP(3) NOT NULL,
|
|
"endsAt" TIMESTAMP(3) NOT NULL,
|
|
"location" TEXT,
|
|
"cancelledAt" TIMESTAMP(3),
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "EventSession_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SessionReminderLog" (
|
|
"id" TEXT NOT NULL,
|
|
"sessionId" TEXT NOT NULL,
|
|
"offset" INTEGER NOT NULL,
|
|
"sent" INTEGER NOT NULL DEFAULT 0,
|
|
"sentAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "SessionReminderLog_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Certificate" (
|
|
"id" TEXT NOT NULL,
|
|
"eventId" TEXT NOT NULL,
|
|
"ticketId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"sessionsAttended" INTEGER NOT NULL DEFAULT 0,
|
|
"totalSessions" INTEGER NOT NULL DEFAULT 0,
|
|
"manual" BOOLEAN NOT NULL DEFAULT false,
|
|
"issuedById" TEXT,
|
|
"issuedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"emailedAt" TIMESTAMP(3),
|
|
"revokedAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "Certificate_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventSession_eventId_startsAt_idx" ON "EventSession"("eventId", "startsAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "SessionReminderLog_sessionId_offset_key" ON "SessionReminderLog"("sessionId", "offset");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Certificate_code_key" ON "Certificate"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Certificate_userId_idx" ON "Certificate"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Certificate_ticketId_idx" ON "Certificate"("ticketId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Certificate_issuedById_idx" ON "Certificate"("issuedById");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Certificate_eventId_ticketId_key" ON "Certificate"("eventId", "ticketId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TicketUsage_sessionId_idx" ON "TicketUsage"("sessionId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TicketUsage" ADD CONSTRAINT "TicketUsage_sessionId_fkey" FOREIGN KEY ("sessionId") REFERENCES "EventSession"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventSession" ADD CONSTRAINT "EventSession_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "SessionReminderLog" ADD CONSTRAINT "SessionReminderLog_sessionId_fkey" FOREIGN KEY ("sessionId") REFERENCES "EventSession"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Certificate" ADD CONSTRAINT "Certificate_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Certificate" ADD CONSTRAINT "Certificate_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "Ticket"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Certificate" ADD CONSTRAINT "Certificate_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Certificate" ADD CONSTRAINT "Certificate_issuedById_fkey" FOREIGN KEY ("issuedById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|