From 3a2b20e4682a9f946b1d364df40d205c3af031d6 Mon Sep 17 00:00:00 2001 From: Brian Nelson Date: Tue, 15 Jul 2025 09:23:33 -0400 Subject: [PATCH] added engagement congratulations to guest book --- components/EditGuestBookEntryModal.tsx | 16 ++ components/GuestBookList.tsx | 6 + drift_fix.sql | 169 ++++++++++++++++++ lib/queries.ts | 32 ++-- prisma/migrations/.DS_Store | Bin 0 -> 6148 bytes .../migration.sql | 2 + prisma/schema.prisma | 21 +-- 7 files changed, 220 insertions(+), 26 deletions(-) create mode 100644 drift_fix.sql create mode 100644 prisma/migrations/.DS_Store create mode 100644 prisma/migrations/20250715120700_added_congrats_to_guest/migration.sql 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 0000000000000000000000000000000000000000..e9004e32393fb48627790b93c3d6ba4160ccf556 GIT binary patch literal 6148 zcmeHKO-}+b5Pd}s7%v<>_79i^4AJ9;z|D9uo)uVPNCa^g;&p$zZ)OUHpeKzXI)n^r^iAZ#Ntx1G0CKyVarg z*?#QbCHp;G;{j8=V2LM`7-Nl!mJ&0(VuQK%iq(2@v#Hi4bB%CMj~VS1GE9hbMlJcw z@JyRz$}l8O8NZ-)sW~&PQqWr}Wq9LE!N4Gi zFLw!vi3#(BwIOFH!9s}^8qyUbSUBx5`Q-^~LkmaH%FL50hjc>;TAlW&?g+V|x6Xhw zu+PAW4cl`5kG{VD?+5wF8E^*v6a%3-yc-Ul(V*1Ka cd`?xNJxYg|C#(%=q4