From 29c91fee7f1344786e651a7a475947c4aa1f93f2 Mon Sep 17 00:00:00 2001 From: Brian Nelson Date: Thu, 26 Jun 2025 12:37:34 -0400 Subject: [PATCH] guest book added --- README.md | 13 +- app/(auth)/events/page.tsx | 2 +- app/(auth)/guest-book/page.tsx | 13 ++ app/api/guestbook/[id]/route.ts | 20 +++ app/api/guestbook/add/route.ts | 20 +++ bun.lockb | Bin 177860 -> 185625 bytes components/AddGuestBookEntryModal.tsx | 127 ++++++++++++++++ components/EditGuestBookEntryModal.tsx | 138 ++++++++++++++++++ components/GuestBookList.tsx | 127 ++++++++++++++++ components/GuestBookPageClient.tsx | 64 ++++++++ lib/mutations.ts | 35 ++++- lib/queries.ts | 11 +- package.json | 1 + .../migration.sql | 16 ++ .../migration.sql | 13 ++ .../migration.sql | 12 ++ prisma/schema.prisma | 14 ++ 17 files changed, 622 insertions(+), 4 deletions(-) create mode 100644 app/(auth)/guest-book/page.tsx create mode 100644 app/api/guestbook/[id]/route.ts create mode 100644 app/api/guestbook/add/route.ts create mode 100644 components/AddGuestBookEntryModal.tsx create mode 100644 components/EditGuestBookEntryModal.tsx create mode 100644 components/GuestBookList.tsx create mode 100644 components/GuestBookPageClient.tsx create mode 100644 prisma/migrations/20250626125351_add_guest_book/migration.sql create mode 100644 prisma/migrations/20250626133219_update_guestbook_side/migration.sql create mode 100644 prisma/migrations/20250626150021_guest_book_fname_lname/migration.sql diff --git a/README.md b/README.md index 0604def..9dc964f 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,11 @@ My goal for this project is to be an all-in-one self hosted event planner for ma - Event type - Details - Location -- [ ] Guest book (contact information) +- [x] Guest book (contact information) + - [ ] Ability to switch between table or card view + - [ ] Add Guests to events + - [ ] Invite guests via email + - [ ] Create local account for guest - [ ] Managing RSVP lists - [ ] Guest accounts - [ ] Gift Registries @@ -44,6 +48,13 @@ My goal for this project is to be an all-in-one self hosted event planner for ma #### 6.25.25 - now able to see and edit event data from the individual event page +#### 6.26.25 +### The Guest Book +- added guest-book page, viewable by PLANNER and COUPLE accounts + - db query is secure behind PLANNER and COUPLE auth sessions +- added ability to add and edit guests to guest book +- save guest infomation (name, email, phone, address, side (which side of the couple), notes) + ## Getting Started This is very much a work in progress but this `README` will stay up to date on working features and steps to get it running **in its current state**. That being said if you're interested in starting it as is, you can follow these instructions. diff --git a/app/(auth)/events/page.tsx b/app/(auth)/events/page.tsx index b50e4b3..c257ba4 100644 --- a/app/(auth)/events/page.tsx +++ b/app/(auth)/events/page.tsx @@ -12,7 +12,7 @@ export default async function EventsPage() {
{allEvents.length == 0 ? ( <> - You don't have any events yet. Create One! + You don't have any events yet. Create One! ) : ( diff --git a/app/(auth)/guest-book/page.tsx b/app/(auth)/guest-book/page.tsx new file mode 100644 index 0000000..9dc5905 --- /dev/null +++ b/app/(auth)/guest-book/page.tsx @@ -0,0 +1,13 @@ +import { authOptions } from '@/app/api/auth/[...nextauth]/route' +import { queries } from '@/lib/queries' +import { getServerSession } from 'next-auth' +import GuestBookPageClient from '@/components/GuestBookPageClient' + +export default async function GuestBookPage() { + const session = await getServerSession(authOptions) + if (!session?.user) return

Unauthorized

+ + const entries = await queries.fetchGuestBookEntries() + + return +} diff --git a/app/api/guestbook/[id]/route.ts b/app/api/guestbook/[id]/route.ts new file mode 100644 index 0000000..78f44fa --- /dev/null +++ b/app/api/guestbook/[id]/route.ts @@ -0,0 +1,20 @@ +import { NextRequest, NextResponse } from 'next/server' +import { mutations } from '@/lib/mutations' +import { getServerSession } from 'next-auth' +import { authOptions } from '../../auth/[...nextauth]/route' + +export async function PATCH(req: NextRequest, { params }: { params: { id: string } }) { + const session = await getServerSession(authOptions) + if (!session?.user || !['COUPLE', 'PLANNER'].includes(session.user.role)) { + return new NextResponse('Unauthorized', { status: 403 }) + } + + try { + const data = await req.json() + const updated = await mutations.updateGuestBookEntry(params.id, data) + return NextResponse.json(updated) + } catch (err) { + console.error('[EDIT GUESTBOOK ENTRY]', err) + return new NextResponse('Failed to update guestbook entry', { status: 500 }) + } +} diff --git a/app/api/guestbook/add/route.ts b/app/api/guestbook/add/route.ts new file mode 100644 index 0000000..6bfacd5 --- /dev/null +++ b/app/api/guestbook/add/route.ts @@ -0,0 +1,20 @@ +import { NextRequest, NextResponse } from 'next/server' +import { mutations } from '@/lib/mutations' +import { getServerSession } from 'next-auth' +import { authOptions } from '../../auth/[...nextauth]/route' + +export async function POST(req: NextRequest) { + const session = await getServerSession(authOptions) + if (!session?.user || !['COUPLE', 'PLANNER'].includes(session.user.role)) { + return new NextResponse('Unauthorized', { status: 403 }) + } + + try { + const data = await req.json() + const entry = await mutations.createGuestBookEntry(data) + return NextResponse.json(entry) + } catch (err) { + console.error('[ADD GUESTBOOK ENTRY]', err) + return new NextResponse('Failed to create guestbook entry', { status: 500 }) + } +} diff --git a/bun.lockb b/bun.lockb index 81907f5fea626fd01f87ea951e130bd4b2d6111d..c2ebbb0423e55a2f5ac2a9b6b06dbc29706975f9 100755 GIT binary patch delta 37283 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%0A&s3&|&U zPg%w@IPM-FyX)>LIb2o|SJ1tgJuK~20p_?mRFwx3zmCC`yY zVyY~@bTzB2TACCsxl#LLH$KgeuZ;18m5W%*!K@Ip7P*m;jso!T8ZW9R)+|R)@IXt% z2e%jNb^k*5l5?N$csJ?kJMva(Q?n*DYfb*Qv*_IJ^Fs>8Wj~c61_z}_v7{y_&Z0*4 zNloWYi|{OmGCIxl39w`?Du#F^f6=MaKL&Vlu{d|)D|COUIP+9ev;K2pxb;mPB=tf$ zv&8)RLa~}X)=g!Ynng8M(_@&F%rPk80FG!t`lgS@wt2i#&FVGHl^=IB{6;@gKRcQy wLQZN3BC^drLqw-)>f>sNP=ju$v@{fJnvD`^F+d`TX(-}~cY|#Uan+Fj1%(0tTL1t6 delta 32279 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

kG*uVZK7_>0*8 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 void + onSubmit: (data: { fName: string, lName: string, email: string, phone?: string, address?: string, side: string, notes?: string }) => void +}) { + const [fName, setFName] = useState(''); + const [lName, setLName] = useState(''); + const [email, setEmail] = useState(''); + const [phone, setPhone] = useState(''); + const [address, setAddress] = useState(''); + const [side, setSide] = useState(''); + const [notes, setNotes] = useState(''); + + function handleSubmit(e: React.FormEvent) { + e.preventDefault() + onSubmit({ fName, lName, email, phone, address, side, notes }) + setFName('') + setLName('') + setEmail('') + setPhone('') + setAddress('') + setSide('') + setNotes('') + onClose() + } + + return ( + + + +
+ + +
+ + + + Add Guest Entry + +
+ setFName(e.target.value)} + required + /> + setLName(e.target.value)} + required + /> + setEmail(e.target.value)} + /> + setPhone(e.target.value)} + /> + setAddress(e.target.value)} + /> + setSide(e.target.value)} + required + /> +