diff --git a/components/EditGuestBookEntryModal.tsx b/components/EditGuestBookEntryModal.tsx index ac55203..505f3aa 100644 --- a/components/EditGuestBookEntryModal.tsx +++ b/components/EditGuestBookEntryModal.tsx @@ -13,6 +13,7 @@ export default function EditGuestBookEntryModal({ isOpen, onClose, initialData, email?: string phone?: string address?: string + congratulated?: boolean | null side?: string notes?: string } @@ -109,6 +110,21 @@ export default function EditGuestBookEntryModal({ isOpen, onClose, initialData, value={formData.address || ''} onChange={handleChange} /> +
+ + setFormData((prev) => ({ + ...prev, + congratulated: e.target.checked, + })) + } + className="checkbox" + /> + +
Email Phone Address + Congratulated Engagement Notes @@ -82,6 +86,7 @@ export default function GuestBookList({ entries, view }: { entries: GuestBookEnt {entry.email || 'N/A'} {entry.phone || 'N/A'} {entry.address || 'N/A'} + {entry.congratulated == true ? 'Yes' : "No"} {entry.notes || 'N/A'} ))} @@ -122,6 +127,7 @@ export default function GuestBookList({ entries, view }: { entries: GuestBookEnt email: editingEntry.email || '', phone: editingEntry.phone || '', address: editingEntry.address || '', + congratulated: editingEntry.congratulated, side: editingEntry.side, notes: editingEntry.notes || '', }} diff --git a/drift_fix.sql b/drift_fix.sql new file mode 100644 index 0000000..7059d14 --- /dev/null +++ b/drift_fix.sql @@ -0,0 +1,169 @@ +-- CreateEnum +CREATE TYPE "Role" AS ENUM ('COUPLE', 'PLANNER', 'GUEST'); + +-- CreateEnum +CREATE TYPE "RsvpStatus" AS ENUM ('YES', 'NO', 'PENDING'); + +-- CreateTable +CREATE TABLE "User" ( + "id" TEXT NOT NULL, + "email" TEXT NOT NULL, + "password" TEXT, + "name" TEXT, + "username" TEXT NOT NULL, + "role" "Role" NOT NULL DEFAULT 'GUEST', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Event" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "date" TIMESTAMP(3), + "locationid" TEXT, + "creatorId" TEXT NOT NULL, + "notes" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Event_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Location" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "address" TEXT NOT NULL, + "city" TEXT NOT NULL, + "state" TEXT NOT NULL, + "postalCode" TEXT NOT NULL, + "country" TEXT NOT NULL DEFAULT 'United States', + "phone" TEXT, + "email" TEXT, + + CONSTRAINT "Location_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Guest" ( + "id" TEXT NOT NULL, + "eventId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "email" TEXT, + "rsvp" "RsvpStatus" NOT NULL DEFAULT 'PENDING', + + CONSTRAINT "Guest_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "InviteToken" ( + "id" TEXT NOT NULL, + "email" TEXT NOT NULL, + "role" "Role" NOT NULL, + "token" TEXT NOT NULL, + "eventId" TEXT, + "expiresAt" TIMESTAMP(3) NOT NULL, + "accepted" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "InviteToken_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GuestBookEntry" ( + "id" TEXT NOT NULL, + "fName" TEXT NOT NULL, + "lName" TEXT NOT NULL, + "email" TEXT, + "phone" TEXT, + "address" TEXT, + "notes" TEXT, + "side" TEXT NOT NULL, + "congratulated" BOOLEAN, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "GuestBookEntry_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "EventGuest" ( + "id" TEXT NOT NULL, + "eventId" TEXT NOT NULL, + "guestBookEntryId" TEXT NOT NULL, + "rsvp" "RsvpStatus" NOT NULL DEFAULT 'PENDING', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "EventGuest_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, + "eventId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "EventTodo_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "FileUpload" ( + "id" TEXT NOT NULL, + "filepath" TEXT NOT NULL, + "filename" TEXT NOT NULL, + "filetype" TEXT NOT NULL, + "filesize" INTEGER NOT NULL, + "uploadedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "uploadedById" TEXT NOT NULL, + "eventId" TEXT, + + CONSTRAINT "FileUpload_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 "InviteToken_email_key" ON "InviteToken"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "InviteToken_token_key" ON "InviteToken"("token"); + +-- CreateIndex +CREATE UNIQUE INDEX "EventGuest_eventId_guestBookEntryId_key" ON "EventGuest"("eventId", "guestBookEntryId"); + +-- CreateIndex +CREATE UNIQUE INDEX "FileUpload_filename_uploadedById_key" ON "FileUpload"("filename", "uploadedById"); + +-- AddForeignKey +ALTER TABLE "Event" ADD CONSTRAINT "Event_locationid_fkey" FOREIGN KEY ("locationid") REFERENCES "Location"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Event" ADD CONSTRAINT "Event_creatorId_fkey" FOREIGN KEY ("creatorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Guest" ADD CONSTRAINT "Guest_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "EventGuest" ADD CONSTRAINT "EventGuest_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "EventGuest" ADD CONSTRAINT "EventGuest_guestBookEntryId_fkey" FOREIGN KEY ("guestBookEntryId") REFERENCES "GuestBookEntry"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "EventTodo" ADD CONSTRAINT "EventTodo_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("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 SET NULL ON UPDATE CASCADE; + diff --git a/lib/queries.ts b/lib/queries.ts index 7bb5a66..5a852c4 100644 --- a/lib/queries.ts +++ b/lib/queries.ts @@ -97,33 +97,33 @@ export const queries = { }) { // ⏱ Quick recent entries (e.g., homepage) if (takeOnlyRecent) { - const entries = await prisma.guestBookEntry.findMany({ - take: takeOnlyRecent, - orderBy: { createdAt: 'desc' }, - }) - return entries + const entries = await prisma.guestBookEntry.findMany({ + take: takeOnlyRecent, + orderBy: { createdAt: 'desc' }, + }) + return entries } // 📄 Paginated GuestBook view const skip = ((page ?? 1) - 1) * pageSize const [entries, totalCount] = await Promise.all([ - prisma.guestBookEntry.findMany({ - skip, - take: pageSize, - orderBy: newestFirst - ? { createdAt: 'desc' } - : [{ lName: 'asc' }, { fName: 'asc' }], - }), - prisma.guestBookEntry.count(), + prisma.guestBookEntry.findMany({ + skip, + take: pageSize, + orderBy: newestFirst + ? { createdAt: 'desc' } + : [{ lName: 'asc' }, { fName: 'asc' }], + }), + prisma.guestBookEntry.count(), ]) const totalPages = Math.ceil(totalCount / pageSize) return { - entries, - totalPages, - currentPage: page ?? 1, + entries, + totalPages, + currentPage: page ?? 1, } }, diff --git a/prisma/migrations/.DS_Store b/prisma/migrations/.DS_Store new file mode 100644 index 0000000..e9004e3 Binary files /dev/null and b/prisma/migrations/.DS_Store differ diff --git a/prisma/migrations/20250715120700_added_congrats_to_guest/migration.sql b/prisma/migrations/20250715120700_added_congrats_to_guest/migration.sql new file mode 100644 index 0000000..337a32d --- /dev/null +++ b/prisma/migrations/20250715120700_added_congrats_to_guest/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "GuestBookEntry" ADD COLUMN "congratulated" BOOLEAN; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 62daf70..8740779 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -84,16 +84,17 @@ model InviteToken { } model GuestBookEntry { - id String @id @default(cuid()) - fName String - lName String - email String? - phone String? - address String? - notes String? - side String // e.g., "Brian", "Janice", etc. - eventGuests EventGuest[] - createdAt DateTime @default(now()) + id String @id @default(cuid()) + fName String + lName String + email String? + phone String? + address String? + notes String? + side String + congratulated Boolean? + eventGuests EventGuest[] + createdAt DateTime @default(now()) } model EventGuest {