reservation implementation

This commit is contained in:
root
2026-06-11 15:35:25 -04:00
parent 6eeba99c45
commit 37a6ed8a76
30 changed files with 2598 additions and 477 deletions
@@ -0,0 +1,30 @@
ALTER TYPE "NotificationType" ADD VALUE IF NOT EXISTS 'DOCUMENTS_REQUIRED';
ALTER TYPE "NotificationType" ADD VALUE IF NOT EXISTS 'PAYMENT_REQUIRED';
CREATE TABLE IF NOT EXISTS "marketplace_funnel_events" (
"id" TEXT PRIMARY KEY,
"eventName" TEXT NOT NULL,
"companyId" TEXT,
"companySlug" TEXT NOT NULL,
"vehicleId" TEXT NOT NULL,
"renterId" TEXT,
"sessionId" TEXT,
"path" TEXT,
"metadata" JSONB NOT NULL DEFAULT '{}',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS "marketplace_funnel_events_eventName_createdAt_idx"
ON "marketplace_funnel_events"("eventName", "createdAt");
CREATE INDEX IF NOT EXISTS "marketplace_funnel_events_companyId_createdAt_idx"
ON "marketplace_funnel_events"("companyId", "createdAt");
CREATE INDEX IF NOT EXISTS "marketplace_funnel_events_companySlug_createdAt_idx"
ON "marketplace_funnel_events"("companySlug", "createdAt");
CREATE INDEX IF NOT EXISTS "marketplace_funnel_events_vehicleId_createdAt_idx"
ON "marketplace_funnel_events"("vehicleId", "createdAt");
CREATE INDEX IF NOT EXISTS "marketplace_funnel_events_renterId_createdAt_idx"
ON "marketplace_funnel_events"("renterId", "createdAt");
@@ -0,0 +1,5 @@
ALTER TABLE "reservations"
ADD COLUMN IF NOT EXISTS "bookingReference" TEXT;
CREATE UNIQUE INDEX IF NOT EXISTS "reservations_bookingReference_key"
ON "reservations"("bookingReference");
+23
View File
@@ -422,6 +422,8 @@ enum NotificationType {
BOOKING_CANCELLED
PAYMENT_RECEIVED
PAYMENT_FAILED
DOCUMENTS_REQUIRED
PAYMENT_REQUIRED
SUBSCRIPTION_TRIAL_ENDING
SUBSCRIPTION_SUSPENDED
VEHICLE_MAINTENANCE_DUE
@@ -1293,6 +1295,7 @@ model Reservation {
notes String?
cancelReason String?
cancelledBy CancelledBy?
bookingReference String? @unique
contractNumber String? @unique
invoiceNumber String? @unique
reviewToken String? @unique
@@ -1345,6 +1348,26 @@ model ReservationPublicAccess {
@@map("reservation_public_access")
}
model MarketplaceFunnelEvent {
id String @id @default(cuid())
eventName String
companyId String?
companySlug String
vehicleId String
renterId String?
sessionId String?
path String?
metadata Json @default("{}")
createdAt DateTime @default(now())
@@index([eventName, createdAt])
@@index([companyId, createdAt])
@@index([companySlug, createdAt])
@@index([vehicleId, createdAt])
@@index([renterId, createdAt])
@@map("marketplace_funnel_events")
}
model WebhookEvent {
id String @id @default(cuid())
+2
View File
@@ -9,6 +9,8 @@ export type NotificationType =
| 'BOOKING_CANCELLED'
| 'PAYMENT_RECEIVED'
| 'PAYMENT_FAILED'
| 'DOCUMENTS_REQUIRED'
| 'PAYMENT_REQUIRED'
| 'SUBSCRIPTION_TRIAL_ENDING'
| 'SUBSCRIPTION_SUSPENDED'
| 'VEHICLE_MAINTENANCE_DUE'