From b64a2b4c1c085779f64ace958973c487805e0390 Mon Sep 17 00:00:00 2001 From: xiaomai Date: Sat, 9 May 2026 12:56:32 +0800 Subject: [PATCH] feat(bookings): add transaction document uploads for bank payments Add payment method selection (Cash/Bank) to booking details Support uploading, downloading, and deleting transaction documents Update database schema and API endpoints to handle file storage --- .env.example | 1 + app/pages/bookings/index.vue | 241 ++++++++++++++++-- docker-compose.dev.yml | 1 + docker-compose.yml | 4 + nuxt.config.ts | 1 + server/api/bookings/[id].patch.ts | 19 ++ .../[id]/transaction-document.delete.ts | 26 ++ .../bookings/[id]/transaction-document.get.ts | 35 +++ .../[id]/transaction-document.post.ts | 86 +++++++ server/utils/booking-repository.ts | 214 +++++++++++++++- server/utils/bookings.ts | 9 +- server/utils/db-init.ts | 75 ++++++ server/utils/transaction-documents.ts | 192 ++++++++++++++ shared/booking.ts | 15 ++ 14 files changed, 888 insertions(+), 31 deletions(-) create mode 100644 server/api/bookings/[id]/transaction-document.delete.ts create mode 100644 server/api/bookings/[id]/transaction-document.get.ts create mode 100644 server/api/bookings/[id]/transaction-document.post.ts create mode 100644 server/utils/transaction-documents.ts diff --git a/.env.example b/.env.example index 0bb0da4..5224b80 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,7 @@ NUXT_DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:5432/dinner_ticket_system NUXT_REDIS_URL=redis://127.0.0.1:6379 NUXT_SESSION_COOKIE_NAME=dinner_ticket_session +NUXT_TRANSACTION_DOCUMENT_DIR=.data/transaction-documents NUXT_WHATSAPP_ACCESS_TOKEN= NUXT_WHATSAPP_PHONE_NUMBER_ID= NUXT_WHATSAPP_API_VERSION=v23.0 diff --git a/app/pages/bookings/index.vue b/app/pages/bookings/index.vue index cc22c28..8915e5a 100644 --- a/app/pages/bookings/index.vue +++ b/app/pages/bookings/index.vue @@ -197,7 +197,7 @@ :empty="searchQuery.trim() ? 'No matching bookings found.' : 'No bookings available yet.'" sticky="header" caption="Bookings" - class="compact-table min-w-[1120px]" + class="compact-table min-w-[1280px]" > + +