Events can take a name (and optional email/phone) for each main-ticket place. Each named person gets their own quantity-1 ticket and attendee form; unnamed places share one ticket. Tickets go to the payer or to each person, attendees matching one existing account are linked to it, and the payer can edit names and send form links from My Events. Ticket generation is now planned per line (utils/attendees.js), free registrations use the same generator, and guest registration matches accounts by phone too, refusing conflicting email/phone pairs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
70 lines
2.5 KiB
SQL
70 lines
2.5 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "TicketDelivery" AS ENUM ('payer', 'each');
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "Event" ADD COLUMN "allowNamedAttendees" BOOLEAN NOT NULL DEFAULT false;
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "FormResponse" ADD COLUMN "attendeeId" TEXT;
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "Registration" ADD COLUMN "ticketDelivery" "TicketDelivery" NOT NULL DEFAULT 'payer';
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "Ticket" ADD COLUMN "attendeeId" TEXT,
|
|
ADD COLUMN "holderUserId" TEXT;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Attendee" (
|
|
"id" TEXT NOT NULL,
|
|
"registrationId" TEXT NOT NULL,
|
|
"registrationOptionId" TEXT,
|
|
"eventOptionId" TEXT NOT NULL,
|
|
"variantId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"userId" TEXT,
|
|
"dateOfBirth" TIMESTAMP(3),
|
|
"gender" TEXT,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Attendee_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Attendee_registrationId_idx" ON "Attendee"("registrationId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Attendee_registrationOptionId_idx" ON "Attendee"("registrationOptionId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Attendee_userId_idx" ON "Attendee"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Ticket_attendeeId_key" ON "Ticket"("attendeeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Ticket_holderUserId_idx" ON "Ticket"("holderUserId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_attendeeId_fkey" FOREIGN KEY ("attendeeId") REFERENCES "Attendee"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_holderUserId_fkey" FOREIGN KEY ("holderUserId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FormResponse" ADD CONSTRAINT "FormResponse_attendeeId_fkey" FOREIGN KEY ("attendeeId") REFERENCES "Attendee"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Attendee" ADD CONSTRAINT "Attendee_registrationId_fkey" FOREIGN KEY ("registrationId") REFERENCES "Registration"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Attendee" ADD CONSTRAINT "Attendee_registrationOptionId_fkey" FOREIGN KEY ("registrationOptionId") REFERENCES "RegistrationOption"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Attendee" ADD CONSTRAINT "Attendee_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|