diff --git a/PAYMENT_ROADMAP.md b/PAYMENT_ROADMAP.md index 432f817..e4b4667 100644 --- a/PAYMENT_ROADMAP.md +++ b/PAYMENT_ROADMAP.md @@ -49,9 +49,9 @@ Selesai. `tsc --noEmit` lulus. Tanpa schema baru, tanpa migration. --- -## PR B — Refactor schema ke `Booking` + `Payment` (provider MANUAL only) ⏳ +## PR B — Refactor schema ke `Booking` + `Payment` (provider MANUAL only) ✅ -Pondasi untuk Midtrans tanpa lompat ke gateway dulu. UI tetap, sumber kebenaran pindah dari timestamp di `TripParticipant` ke tabel `Booking`/`Payment`. +Selesai. `tsc --noEmit` lulus. Pondasi untuk Midtrans sudah siap. ### Schema (target) @@ -134,21 +134,27 @@ enum PaymentStatus { ### Tugas -| # | Item | Status | Catatan | +| # | Item | Status | File | |---|---|---|---| -| B1 | Update [prisma/schema.prisma](prisma/schema.prisma) — tambah `Booking`, `Payment`, 3 enum | ⏳ | Relasi 1-1 ke `TripParticipant` via `participantId` unique. | -| B2 | Migration baru `add_booking_payment` | ⏳ | CreateTable Booking & Payment + CreateEnum + index. | -| B3 | Data backfill migration: bikin `Booking` + `Payment` untuk semua `TripParticipant` aktif yang sudah punya `markedPaidAt` atau `paymentConfirmedAt` | ⏳ | Provider `MANUAL`. Status mapping: `paymentConfirmedAt → PAID`, `markedPaidAt only → AWAITING`, none → PENDING. Trip gratis → Booking PAID, tanpa Payment row. | -| B4 | `server/repositories/booking.repo.ts` + `payment.repo.ts` | ⏳ | findByTrip, findByUser, findByExternalOrderId. | -| B5 | `server/services/booking.service.ts` | ⏳ | `createForParticipant`, `markPaid (manual)`, `confirmPaid (organizer)`, `expireOldPending`. Idempotent. | -| B6 | Refactor `tripService.markParticipantPayment` → delegate ke `bookingService` | ⏳ | Backward compat: tetap update `TripParticipant` timestamp untuk transisi UI. | -| B7 | Refactor `confirmParticipantPayment` → delegate ke `bookingService` | ⏳ | Sama. | -| B8 | Update halaman payment (PR A) untuk baca dari `Booking`/`Payment` | ⏳ | Status timeline lebih kaya: dibuat → menunggu bayar → menunggu konfirmasi → lunas. | -| B9 | Update `OrganizerPaymentQueue` query | ⏳ | List Booking dengan Payment status AWAITING (manual) vs status sebelumnya. | -| B10 | Deprecate `TripParticipant.markedPaidAt` + `paymentConfirmedAt` | ⏳ | Tetap ada di DB untuk transisi. Hapus di PR berikutnya setelah UI fully cutover. | -| B11 | Index optimization | ⏳ | `@@index([tripId, status])` di Booking, `@@index([provider, status])` di Payment. | +| B1 | Schema: tambah `Booking`, `Payment`, 3 enum (`BookingStatus`, `PaymentProvider`, `PaymentStatus`) + relasi di `User`, `Trip`, `TripParticipant` | ✅ | [prisma/schema.prisma](prisma/schema.prisma) | +| B2 | Migration `add_booking_payment` (CreateEnum + CreateTable + Index + FK) | ✅ | [prisma/migrations/20260508150000_add_booking_payment/migration.sql](prisma/migrations/20260508150000_add_booking_payment/migration.sql) | +| B3 | Backfill script TS (idempotent, skip baris yang sudah punya Booking) | ✅ | [prisma/backfill-bookings.ts](prisma/backfill-bookings.ts) | +| B4 | `bookingRepo` + `paymentRepo` | ✅ | [server/repositories/booking.repo.ts](server/repositories/booking.repo.ts), [server/repositories/payment.repo.ts](server/repositories/payment.repo.ts) | +| B5 | `bookingService` — `markPaidManual`, `confirmPaidManual`, `getByTripAndUser`, `getAwaitingManualForTrip` (idempotent, transactional dengan retry serialisasi) | ✅ | [server/services/booking.service.ts](server/services/booking.service.ts) | +| B6 | `tripService.markParticipantPayment` → delegate ke `bookingService.markPaidManual`. Tetap update `TripParticipant.markedPaidAt` untuk backcompat. | ✅ | [server/services/trip.service.ts](server/services/trip.service.ts) | +| B7 | `tripService.confirmParticipantPayment` → delegate ke `bookingService.confirmPaidManual`. Tetap update `paymentConfirmedAt`. | ✅ | [server/services/trip.service.ts](server/services/trip.service.ts) | +| B+ | `tripService.joinTrip` → upsert Booking PENDING (handle re-join dari CANCELLED) | ✅ | [server/services/trip.service.ts](server/services/trip.service.ts) | +| B+ | `tripService.confirmParticipant` → transition Booking PENDING → AWAITING_PAY (paid) atau PAID (free) | ✅ | [server/services/trip.service.ts](server/services/trip.service.ts) | +| B+ | `tripService.cancelJoin` & `rejectParticipant` → Booking → CANCELLED | ✅ | [server/services/trip.service.ts](server/services/trip.service.ts) | +| B8 | Halaman `/trips/[id]/payment` baca dari Booking + Payment (bukan timestamp lama) | ✅ | [app/trips/[id]/payment/page.tsx](app/trips/%5Bid%5D/payment/page.tsx) | +| B9 | `OrganizerPaymentQueue` di trip detail dapat data dari `bookingService.getAwaitingManualForTrip` | ✅ | [app/trips/[id]/page.tsx](app/trips/%5Bid%5D/page.tsx) | +| B10 | Deprecate `TripParticipant.markedPaidAt` + `paymentConfirmedAt` (komen `@deprecated`, tetap di-update untuk backcompat) | ✅ | [prisma/schema.prisma](prisma/schema.prisma) | +| B11 | Index optimization (`@@index([tripId, status])` di Booking, `@@index([provider, status])` di Payment, `@@index([userId])` di Booking) | ✅ | [prisma/schema.prisma](prisma/schema.prisma) | -**Tindakan manual:** `npx prisma migrate deploy` + jalankan backfill script (B3 bisa dimasukkan ke migration SQL atau script TS terpisah). +**Tindakan manual (urutan penting):** +1. `npx prisma migrate deploy` — apply schema migration `20260508150000_add_booking_payment`. +2. `npx tsx prisma/backfill-bookings.ts` — populate Booking + Payment dari `TripParticipant` lama. Idempotent, aman dijalankan ulang. +3. Verifikasi: jumlah Booking aktif = jumlah TripParticipant aktif setelah backfill. --- diff --git a/app/generated/prisma/browser.ts b/app/generated/prisma/browser.ts index e92e427..428df25 100644 --- a/app/generated/prisma/browser.ts +++ b/app/generated/prisma/browser.ts @@ -59,3 +59,19 @@ export type TripImage = Prisma.TripImageModel * */ export type TripParticipant = Prisma.TripParticipantModel +/** + * Model Booking + * Booking 1-1 ke TripParticipant. Lifecycle ikut peserta: + * - join → Booking PENDING (menunggu approve organizer) + * - organizer confirm → AWAITING_PAY (paid trip) atau PAID (free trip) + * - peserta + organizer rampungkan pembayaran → PAID + * - cancel/reject → CANCELLED + * `amount` adalah snapshot harga saat booking dibuat — protect dari perubahan trip.price. + */ +export type Booking = Prisma.BookingModel +/** + * Model Payment + * Satu attempt pembayaran. Satu Booking bisa punya banyak Payment kalau retry + * (di Phase MIDTRANS nanti). Untuk MANUAL biasanya cukup 1 Payment. + */ +export type Payment = Prisma.PaymentModel diff --git a/app/generated/prisma/client.ts b/app/generated/prisma/client.ts index f2696e4..032b895 100644 --- a/app/generated/prisma/client.ts +++ b/app/generated/prisma/client.ts @@ -83,3 +83,19 @@ export type TripImage = Prisma.TripImageModel * */ export type TripParticipant = Prisma.TripParticipantModel +/** + * Model Booking + * Booking 1-1 ke TripParticipant. Lifecycle ikut peserta: + * - join → Booking PENDING (menunggu approve organizer) + * - organizer confirm → AWAITING_PAY (paid trip) atau PAID (free trip) + * - peserta + organizer rampungkan pembayaran → PAID + * - cancel/reject → CANCELLED + * `amount` adalah snapshot harga saat booking dibuat — protect dari perubahan trip.price. + */ +export type Booking = Prisma.BookingModel +/** + * Model Payment + * Satu attempt pembayaran. Satu Booking bisa punya banyak Payment kalau retry + * (di Phase MIDTRANS nanti). Untuk MANUAL biasanya cukup 1 Payment. + */ +export type Payment = Prisma.PaymentModel diff --git a/app/generated/prisma/commonInputTypes.ts b/app/generated/prisma/commonInputTypes.ts index 3db6156..fdbd48b 100644 --- a/app/generated/prisma/commonInputTypes.ts +++ b/app/generated/prisma/commonInputTypes.ts @@ -287,6 +287,108 @@ export type EnumParticipantStatusWithAggregatesFilter<$PrismaModel = never> = { _max?: Prisma.NestedEnumParticipantStatusFilter<$PrismaModel> } +export type EnumBookingStatusFilter<$PrismaModel = never> = { + equals?: $Enums.BookingStatus | Prisma.EnumBookingStatusFieldRefInput<$PrismaModel> + in?: $Enums.BookingStatus[] | Prisma.ListEnumBookingStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.BookingStatus[] | Prisma.ListEnumBookingStatusFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumBookingStatusFilter<$PrismaModel> | $Enums.BookingStatus +} + +export type EnumBookingStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.BookingStatus | Prisma.EnumBookingStatusFieldRefInput<$PrismaModel> + in?: $Enums.BookingStatus[] | Prisma.ListEnumBookingStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.BookingStatus[] | Prisma.ListEnumBookingStatusFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumBookingStatusWithAggregatesFilter<$PrismaModel> | $Enums.BookingStatus + _count?: Prisma.NestedIntFilter<$PrismaModel> + _min?: Prisma.NestedEnumBookingStatusFilter<$PrismaModel> + _max?: Prisma.NestedEnumBookingStatusFilter<$PrismaModel> +} + +export type EnumPaymentProviderFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentProvider | Prisma.EnumPaymentProviderFieldRefInput<$PrismaModel> + in?: $Enums.PaymentProvider[] | Prisma.ListEnumPaymentProviderFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentProvider[] | Prisma.ListEnumPaymentProviderFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumPaymentProviderFilter<$PrismaModel> | $Enums.PaymentProvider +} + +export type EnumPaymentStatusFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentStatus | Prisma.EnumPaymentStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentStatus[] | Prisma.ListEnumPaymentStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentStatus[] | Prisma.ListEnumPaymentStatusFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumPaymentStatusFilter<$PrismaModel> | $Enums.PaymentStatus +} + +export type JsonNullableFilter<$PrismaModel = never> = +| Prisma.PatchUndefined< + Prisma.Either>, Exclude>, 'path'>>, + Required> + > +| Prisma.OptionalFlat>, 'path'>> + +export type JsonNullableFilterBase<$PrismaModel = never> = { + equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter + path?: string[] + mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel> + string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel> + string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel> + string_ends_with?: string | Prisma.StringFieldRefInput<$PrismaModel> + array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter +} + +export type EnumPaymentProviderWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentProvider | Prisma.EnumPaymentProviderFieldRefInput<$PrismaModel> + in?: $Enums.PaymentProvider[] | Prisma.ListEnumPaymentProviderFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentProvider[] | Prisma.ListEnumPaymentProviderFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumPaymentProviderWithAggregatesFilter<$PrismaModel> | $Enums.PaymentProvider + _count?: Prisma.NestedIntFilter<$PrismaModel> + _min?: Prisma.NestedEnumPaymentProviderFilter<$PrismaModel> + _max?: Prisma.NestedEnumPaymentProviderFilter<$PrismaModel> +} + +export type EnumPaymentStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentStatus | Prisma.EnumPaymentStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentStatus[] | Prisma.ListEnumPaymentStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentStatus[] | Prisma.ListEnumPaymentStatusFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumPaymentStatusWithAggregatesFilter<$PrismaModel> | $Enums.PaymentStatus + _count?: Prisma.NestedIntFilter<$PrismaModel> + _min?: Prisma.NestedEnumPaymentStatusFilter<$PrismaModel> + _max?: Prisma.NestedEnumPaymentStatusFilter<$PrismaModel> +} + +export type JsonNullableWithAggregatesFilter<$PrismaModel = never> = +| Prisma.PatchUndefined< + Prisma.Either>, Exclude>, 'path'>>, + Required> + > +| Prisma.OptionalFlat>, 'path'>> + +export type JsonNullableWithAggregatesFilterBase<$PrismaModel = never> = { + equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter + path?: string[] + mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel> + string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel> + string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel> + string_ends_with?: string | Prisma.StringFieldRefInput<$PrismaModel> + array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter + _count?: Prisma.NestedIntNullableFilter<$PrismaModel> + _min?: Prisma.NestedJsonNullableFilter<$PrismaModel> + _max?: Prisma.NestedJsonNullableFilter<$PrismaModel> +} + export type NestedStringFilter<$PrismaModel = never> = { equals?: string | Prisma.StringFieldRefInput<$PrismaModel> in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> @@ -573,4 +675,79 @@ export type NestedEnumParticipantStatusWithAggregatesFilter<$PrismaModel = never _max?: Prisma.NestedEnumParticipantStatusFilter<$PrismaModel> } +export type NestedEnumBookingStatusFilter<$PrismaModel = never> = { + equals?: $Enums.BookingStatus | Prisma.EnumBookingStatusFieldRefInput<$PrismaModel> + in?: $Enums.BookingStatus[] | Prisma.ListEnumBookingStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.BookingStatus[] | Prisma.ListEnumBookingStatusFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumBookingStatusFilter<$PrismaModel> | $Enums.BookingStatus +} + +export type NestedEnumBookingStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.BookingStatus | Prisma.EnumBookingStatusFieldRefInput<$PrismaModel> + in?: $Enums.BookingStatus[] | Prisma.ListEnumBookingStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.BookingStatus[] | Prisma.ListEnumBookingStatusFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumBookingStatusWithAggregatesFilter<$PrismaModel> | $Enums.BookingStatus + _count?: Prisma.NestedIntFilter<$PrismaModel> + _min?: Prisma.NestedEnumBookingStatusFilter<$PrismaModel> + _max?: Prisma.NestedEnumBookingStatusFilter<$PrismaModel> +} + +export type NestedEnumPaymentProviderFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentProvider | Prisma.EnumPaymentProviderFieldRefInput<$PrismaModel> + in?: $Enums.PaymentProvider[] | Prisma.ListEnumPaymentProviderFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentProvider[] | Prisma.ListEnumPaymentProviderFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumPaymentProviderFilter<$PrismaModel> | $Enums.PaymentProvider +} + +export type NestedEnumPaymentStatusFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentStatus | Prisma.EnumPaymentStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentStatus[] | Prisma.ListEnumPaymentStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentStatus[] | Prisma.ListEnumPaymentStatusFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumPaymentStatusFilter<$PrismaModel> | $Enums.PaymentStatus +} + +export type NestedEnumPaymentProviderWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentProvider | Prisma.EnumPaymentProviderFieldRefInput<$PrismaModel> + in?: $Enums.PaymentProvider[] | Prisma.ListEnumPaymentProviderFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentProvider[] | Prisma.ListEnumPaymentProviderFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumPaymentProviderWithAggregatesFilter<$PrismaModel> | $Enums.PaymentProvider + _count?: Prisma.NestedIntFilter<$PrismaModel> + _min?: Prisma.NestedEnumPaymentProviderFilter<$PrismaModel> + _max?: Prisma.NestedEnumPaymentProviderFilter<$PrismaModel> +} + +export type NestedEnumPaymentStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentStatus | Prisma.EnumPaymentStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentStatus[] | Prisma.ListEnumPaymentStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentStatus[] | Prisma.ListEnumPaymentStatusFieldRefInput<$PrismaModel> + not?: Prisma.NestedEnumPaymentStatusWithAggregatesFilter<$PrismaModel> | $Enums.PaymentStatus + _count?: Prisma.NestedIntFilter<$PrismaModel> + _min?: Prisma.NestedEnumPaymentStatusFilter<$PrismaModel> + _max?: Prisma.NestedEnumPaymentStatusFilter<$PrismaModel> +} + +export type NestedJsonNullableFilter<$PrismaModel = never> = +| Prisma.PatchUndefined< + Prisma.Either>, Exclude>, 'path'>>, + Required> + > +| Prisma.OptionalFlat>, 'path'>> + +export type NestedJsonNullableFilterBase<$PrismaModel = never> = { + equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter + path?: string[] + mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel> + string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel> + string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel> + string_ends_with?: string | Prisma.StringFieldRefInput<$PrismaModel> + array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null + lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> + not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter +} + diff --git a/app/generated/prisma/enums.ts b/app/generated/prisma/enums.ts index 00f9140..5ca4ef8 100644 --- a/app/generated/prisma/enums.ts +++ b/app/generated/prisma/enums.ts @@ -60,3 +60,36 @@ export const ParticipantStatus = { } as const export type ParticipantStatus = (typeof ParticipantStatus)[keyof typeof ParticipantStatus] + + +export const BookingStatus = { + PENDING: 'PENDING', + AWAITING_PAY: 'AWAITING_PAY', + PAID: 'PAID', + CANCELLED: 'CANCELLED', + REFUNDED: 'REFUNDED', + EXPIRED: 'EXPIRED' +} as const + +export type BookingStatus = (typeof BookingStatus)[keyof typeof BookingStatus] + + +export const PaymentProvider = { + MANUAL: 'MANUAL', + MIDTRANS: 'MIDTRANS' +} as const + +export type PaymentProvider = (typeof PaymentProvider)[keyof typeof PaymentProvider] + + +export const PaymentStatus = { + PENDING: 'PENDING', + AWAITING: 'AWAITING', + PAID: 'PAID', + FAILED: 'FAILED', + EXPIRED: 'EXPIRED', + CANCELLED: 'CANCELLED', + REFUNDED: 'REFUNDED' +} as const + +export type PaymentStatus = (typeof PaymentStatus)[keyof typeof PaymentStatus] diff --git a/app/generated/prisma/internal/class.ts b/app/generated/prisma/internal/class.ts index e877eb0..e19f04f 100644 --- a/app/generated/prisma/internal/class.ts +++ b/app/generated/prisma/internal/class.ts @@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = { "clientVersion": "7.8.0", "engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a", "activeProvider": "postgresql", - "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../app/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel User {\n id String @id @default(cuid())\n name String\n email String @unique\n /// Hash bcrypt. Null untuk user yang sign-in via OAuth (mis. Google).\n password String?\n image String?\n /// Diisi PrismaAdapter NextAuth saat email diverifikasi provider OAuth (Google selalu sudah verified).\n emailVerified DateTime?\n /// Apakah user telah menyetujui Syarat & Ketentuan dan Kebijakan Privasi\n acceptedTermsAndPrivacy Boolean @default(false)\n /// Waktu user menyetujui Syarat & Ketentuan dan Kebijakan Privasi\n acceptedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n accounts Account[]\n trips Trip[]\n participations TripParticipant[]\n tripReviews TripReview[]\n\n organizerVerification OrganizerVerification? @relation(\"OrganizerVerificationOwner\")\n reviewedVerifications OrganizerVerification[] @relation(\"OrganizerVerificationReviewer\")\n\n profile UserProfile?\n}\n\n/// Profil sosial publik. Berisi info yang user pilih untuk dibagikan ke peserta lain\n/// (bio, kota, minat, vibe). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification.\nmodel UserProfile {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n /// Bio singkat, teks bebas\n bio String?\n /// Kota domisili (teks bebas, mis. \"Bandung\", \"Jakarta Selatan\")\n city String?\n /// Tag minat aktivitas (mis. [\"hiking\", \"fotografi\", \"yoga\"])\n interests String[] @default([])\n /// Username Instagram (tanpa @, opsional)\n instagram String?\n /// Gaya jalan / energi user — dipakai untuk matching teman dengan ritme serupa.\n vibe Vibe?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nenum Vibe {\n CHILL\n BALANCED\n HARDCORE\n}\n\n/// Tabel link akun OAuth pihak ketiga (Google, dst). Diisi oleh PrismaAdapter NextAuth.\n/// Session tidak pakai DB — kita pakai JWT, jadi Session/VerificationToken tidak perlu.\nmodel Account {\n id String @id @default(cuid())\n userId String\n type String\n provider String\n providerAccountId String\n refresh_token String?\n access_token String?\n expires_at Int?\n token_type String?\n scope String?\n id_token String?\n session_state String?\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n}\n\nmodel OrganizerVerification {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(\"OrganizerVerificationOwner\", fields: [userId], references: [id], onDelete: Cascade)\n\n /// Nama lengkap sesuai KTP\n fullName String\n /// NIK terenkripsi (AES-256-GCM, base64). Plaintext tidak disimpan.\n nikEncrypted String\n /// HMAC-SHA256(NIK + pepper) untuk uniqueness lookup tanpa membuka plaintext.\n nikHash String @unique\n birthDate DateTime\n address String\n\n /// Storage key foto KTP (mis. `ktp/.jpg`). File disimpan terenkripsi di luar /public.\n ktpImageKey String\n /// Storage key foto liveness — user memegang kertas bertuliskan \"SETRIP\".\n /// (Sebelumnya: selfie memegang KTP. Diganti supaya user tidak perlu memajang KTP dua kali.)\n livenessKey String\n\n bankName String\n bankAccountNumber String\n bankAccountName String\n\n status VerificationStatus @default(PENDING)\n rejectionReason String?\n reviewedAt DateTime?\n reviewedById String?\n reviewedBy User? @relation(\"OrganizerVerificationReviewer\", fields: [reviewedById], references: [id])\n verifiedAt DateTime?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nenum VerificationStatus {\n PENDING\n APPROVED\n REJECTED\n}\n\nmodel Trip {\n id String @id @default(cuid())\n title String\n description String?\n /// Kategori aktivitas.\n category ActivityCategory @default(HIKING)\n /// Destinasi/subjek aktivitas — interpretasinya tergantung kategori (gunung untuk HIKING, spot untuk DIVING, venue untuk CONCERT, tema untuk WORKSHOP, dst).\n destination String\n location String\n /// Titik kumpul / meeting point (teks bebas)\n meetingPoint String?\n /// Itinerary hari per hari (teks bebas, bullet OK)\n itinerary String?\n /// Yang termasuk harga (teks bebas)\n whatsIncluded String?\n /// Yang tidak termasuk (teks bebas)\n whatsExcluded String?\n date DateTime\n endDate DateTime?\n maxParticipants Int\n price Int\n /// Ritme/energi trip — dipakai untuk matching dengan vibe user.\n vibe Vibe?\n status TripStatus @default(OPEN)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organizerId String\n organizer User @relation(fields: [organizerId], references: [id])\n\n participants TripParticipant[]\n images TripImage[]\n reviews TripReview[]\n\n @@index([category, status, date])\n @@index([vibe, status, date])\n}\n\nmodel TripReview {\n id String @id @default(cuid())\n rating Int\n comment String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n tripId String\n trip Trip @relation(fields: [tripId], references: [id], onDelete: Cascade)\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([tripId, userId])\n}\n\nmodel TripImage {\n id String @id @default(cuid())\n url String\n caption String?\n order Int @default(0)\n\n tripId String\n trip Trip @relation(fields: [tripId], references: [id], onDelete: Cascade)\n}\n\nmodel TripParticipant {\n id String @id @default(cuid())\n status ParticipantStatus @default(PENDING)\n createdAt DateTime @default(now())\n /// Peserta menekan \"Saya sudah bayar\" (pembayaran manual)\n markedPaidAt DateTime?\n /// Organizer mengonfirmasi uang sudah masuk\n paymentConfirmedAt DateTime?\n\n tripId String\n trip Trip @relation(fields: [tripId], references: [id])\n\n userId String\n user User @relation(fields: [userId], references: [id])\n\n @@unique([tripId, userId])\n}\n\nenum TripStatus {\n OPEN\n FULL\n CLOSED\n COMPLETED\n}\n\nenum ActivityCategory {\n HIKING\n CAMPING\n SNORKELING\n DIVING\n ISLAND_HOPPING\n CITY_TRIP\n CULINARY\n CONCERT\n WORKSHOP\n RETREAT\n}\n\nenum ParticipantStatus {\n PENDING\n CONFIRMED\n CANCELLED\n}\n", + "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../app/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel User {\n id String @id @default(cuid())\n name String\n email String @unique\n /// Hash bcrypt. Null untuk user yang sign-in via OAuth (mis. Google).\n password String?\n image String?\n /// Diisi PrismaAdapter NextAuth saat email diverifikasi provider OAuth (Google selalu sudah verified).\n emailVerified DateTime?\n /// Apakah user telah menyetujui Syarat & Ketentuan dan Kebijakan Privasi\n acceptedTermsAndPrivacy Boolean @default(false)\n /// Waktu user menyetujui Syarat & Ketentuan dan Kebijakan Privasi\n acceptedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n accounts Account[]\n trips Trip[]\n participations TripParticipant[]\n tripReviews TripReview[]\n bookings Booking[]\n\n organizerVerification OrganizerVerification? @relation(\"OrganizerVerificationOwner\")\n reviewedVerifications OrganizerVerification[] @relation(\"OrganizerVerificationReviewer\")\n\n profile UserProfile?\n}\n\n/// Profil sosial publik. Berisi info yang user pilih untuk dibagikan ke peserta lain\n/// (bio, kota, minat, vibe). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification.\nmodel UserProfile {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n /// Bio singkat, teks bebas\n bio String?\n /// Kota domisili (teks bebas, mis. \"Bandung\", \"Jakarta Selatan\")\n city String?\n /// Tag minat aktivitas (mis. [\"hiking\", \"fotografi\", \"yoga\"])\n interests String[] @default([])\n /// Username Instagram (tanpa @, opsional)\n instagram String?\n /// Gaya jalan / energi user — dipakai untuk matching teman dengan ritme serupa.\n vibe Vibe?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nenum Vibe {\n CHILL\n BALANCED\n HARDCORE\n}\n\n/// Tabel link akun OAuth pihak ketiga (Google, dst). Diisi oleh PrismaAdapter NextAuth.\n/// Session tidak pakai DB — kita pakai JWT, jadi Session/VerificationToken tidak perlu.\nmodel Account {\n id String @id @default(cuid())\n userId String\n type String\n provider String\n providerAccountId String\n refresh_token String?\n access_token String?\n expires_at Int?\n token_type String?\n scope String?\n id_token String?\n session_state String?\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n}\n\nmodel OrganizerVerification {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(\"OrganizerVerificationOwner\", fields: [userId], references: [id], onDelete: Cascade)\n\n /// Nama lengkap sesuai KTP\n fullName String\n /// NIK terenkripsi (AES-256-GCM, base64). Plaintext tidak disimpan.\n nikEncrypted String\n /// HMAC-SHA256(NIK + pepper) untuk uniqueness lookup tanpa membuka plaintext.\n nikHash String @unique\n birthDate DateTime\n address String\n\n /// Storage key foto KTP (mis. `ktp/.jpg`). File disimpan terenkripsi di luar /public.\n ktpImageKey String\n /// Storage key foto liveness — user memegang kertas bertuliskan \"SETRIP\".\n /// (Sebelumnya: selfie memegang KTP. Diganti supaya user tidak perlu memajang KTP dua kali.)\n livenessKey String\n\n bankName String\n bankAccountNumber String\n bankAccountName String\n\n status VerificationStatus @default(PENDING)\n rejectionReason String?\n reviewedAt DateTime?\n reviewedById String?\n reviewedBy User? @relation(\"OrganizerVerificationReviewer\", fields: [reviewedById], references: [id])\n verifiedAt DateTime?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nenum VerificationStatus {\n PENDING\n APPROVED\n REJECTED\n}\n\nmodel Trip {\n id String @id @default(cuid())\n title String\n description String?\n /// Kategori aktivitas.\n category ActivityCategory @default(HIKING)\n /// Destinasi/subjek aktivitas — interpretasinya tergantung kategori (gunung untuk HIKING, spot untuk DIVING, venue untuk CONCERT, tema untuk WORKSHOP, dst).\n destination String\n location String\n /// Titik kumpul / meeting point (teks bebas)\n meetingPoint String?\n /// Itinerary hari per hari (teks bebas, bullet OK)\n itinerary String?\n /// Yang termasuk harga (teks bebas)\n whatsIncluded String?\n /// Yang tidak termasuk (teks bebas)\n whatsExcluded String?\n date DateTime\n endDate DateTime?\n maxParticipants Int\n price Int\n /// Ritme/energi trip — dipakai untuk matching dengan vibe user.\n vibe Vibe?\n status TripStatus @default(OPEN)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organizerId String\n organizer User @relation(fields: [organizerId], references: [id])\n\n participants TripParticipant[]\n images TripImage[]\n reviews TripReview[]\n bookings Booking[]\n\n @@index([category, status, date])\n @@index([vibe, status, date])\n}\n\nmodel TripReview {\n id String @id @default(cuid())\n rating Int\n comment String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n tripId String\n trip Trip @relation(fields: [tripId], references: [id], onDelete: Cascade)\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([tripId, userId])\n}\n\nmodel TripImage {\n id String @id @default(cuid())\n url String\n caption String?\n order Int @default(0)\n\n tripId String\n trip Trip @relation(fields: [tripId], references: [id], onDelete: Cascade)\n}\n\nmodel TripParticipant {\n id String @id @default(cuid())\n status ParticipantStatus @default(PENDING)\n createdAt DateTime @default(now())\n /// @deprecated — sumber kebenaran pindah ke Booking/Payment. Tetap di-update\n /// untuk backward-compat selama transisi UI lama. Akan dihapus PR berikutnya.\n markedPaidAt DateTime?\n /// @deprecated — sumber kebenaran pindah ke Booking/Payment. Tetap di-update\n /// untuk backward-compat selama transisi UI lama. Akan dihapus PR berikutnya.\n paymentConfirmedAt DateTime?\n\n tripId String\n trip Trip @relation(fields: [tripId], references: [id])\n\n userId String\n user User @relation(fields: [userId], references: [id])\n\n booking Booking?\n\n @@unique([tripId, userId])\n}\n\nenum TripStatus {\n OPEN\n FULL\n CLOSED\n COMPLETED\n}\n\nenum ActivityCategory {\n HIKING\n CAMPING\n SNORKELING\n DIVING\n ISLAND_HOPPING\n CITY_TRIP\n CULINARY\n CONCERT\n WORKSHOP\n RETREAT\n}\n\nenum ParticipantStatus {\n PENDING\n CONFIRMED\n CANCELLED\n}\n\n/// Booking 1-1 ke TripParticipant. Lifecycle ikut peserta:\n/// - join → Booking PENDING (menunggu approve organizer)\n/// - organizer confirm → AWAITING_PAY (paid trip) atau PAID (free trip)\n/// - peserta + organizer rampungkan pembayaran → PAID\n/// - cancel/reject → CANCELLED\n/// `amount` adalah snapshot harga saat booking dibuat — protect dari perubahan trip.price.\nmodel Booking {\n id String @id @default(cuid())\n tripId String\n trip Trip @relation(fields: [tripId], references: [id])\n userId String\n user User @relation(fields: [userId], references: [id])\n participantId String @unique\n participant TripParticipant @relation(fields: [participantId], references: [id], onDelete: Cascade)\n\n amount Int\n currency String @default(\"IDR\")\n status BookingStatus @default(PENDING)\n\n payments Payment[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([tripId, status])\n @@index([userId])\n}\n\nenum BookingStatus {\n PENDING\n AWAITING_PAY\n PAID\n CANCELLED\n REFUNDED\n EXPIRED\n}\n\n/// Satu attempt pembayaran. Satu Booking bisa punya banyak Payment kalau retry\n/// (di Phase MIDTRANS nanti). Untuk MANUAL biasanya cukup 1 Payment.\nmodel Payment {\n id String @id @default(cuid())\n bookingId String\n booking Booking @relation(fields: [bookingId], references: [id], onDelete: Cascade)\n\n provider PaymentProvider\n /// order_id eksternal (unik per attempt). Format MANUAL: `manual-`.\n /// Format MIDTRANS nanti: `midtrans--`.\n externalOrderId String @unique\n /// transaction_id dari gateway. Kosong untuk MANUAL atau sebelum first callback.\n externalTxId String?\n /// Metode konkret: bca_va, gopay, qris, manual_transfer, dst.\n method String?\n amount Int\n status PaymentStatus @default(PENDING)\n\n /// Snapshot mentah callback gateway (untuk audit & dispute).\n rawCallback Json?\n /// Snap token Midtrans / redirect URL.\n snapToken String?\n /// Kapan attempt ini kadaluarsa (Midtrans default 24 jam).\n expiresAt DateTime?\n\n paidAt DateTime?\n failedAt DateTime?\n rejectionReason String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([bookingId, status])\n @@index([provider, status])\n}\n\nenum PaymentProvider {\n MANUAL\n MIDTRANS\n}\n\nenum PaymentStatus {\n PENDING\n AWAITING\n PAID\n FAILED\n EXPIRED\n CANCELLED\n REFUNDED\n}\n", "runtimeDataModel": { "models": {}, "enums": {}, @@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = { } } -config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"acceptedTermsAndPrivacy\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"acceptedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"accounts\",\"kind\":\"object\",\"type\":\"Account\",\"relationName\":\"AccountToUser\"},{\"name\":\"trips\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"TripToUser\"},{\"name\":\"participations\",\"kind\":\"object\",\"type\":\"TripParticipant\",\"relationName\":\"TripParticipantToUser\"},{\"name\":\"tripReviews\",\"kind\":\"object\",\"type\":\"TripReview\",\"relationName\":\"TripReviewToUser\"},{\"name\":\"organizerVerification\",\"kind\":\"object\",\"type\":\"OrganizerVerification\",\"relationName\":\"OrganizerVerificationOwner\"},{\"name\":\"reviewedVerifications\",\"kind\":\"object\",\"type\":\"OrganizerVerification\",\"relationName\":\"OrganizerVerificationReviewer\"},{\"name\":\"profile\",\"kind\":\"object\",\"type\":\"UserProfile\",\"relationName\":\"UserToUserProfile\"}],\"dbName\":null},\"UserProfile\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserProfile\"},{\"name\":\"bio\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"interests\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"instagram\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"vibe\",\"kind\":\"enum\",\"type\":\"Vibe\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Account\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refresh_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"access_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires_at\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"token_type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"id_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"session_state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AccountToUser\"}],\"dbName\":null},\"OrganizerVerification\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizerVerificationOwner\"},{\"name\":\"fullName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nikEncrypted\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nikHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"birthDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"address\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ktpImageKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"livenessKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bankName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bankAccountNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bankAccountName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VerificationStatus\"},{\"name\":\"rejectionReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reviewedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"reviewedById\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reviewedBy\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizerVerificationReviewer\"},{\"name\":\"verifiedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Trip\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"enum\",\"type\":\"ActivityCategory\"},{\"name\":\"destination\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"location\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"meetingPoint\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"itinerary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"whatsIncluded\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"whatsExcluded\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"maxParticipants\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"vibe\",\"kind\":\"enum\",\"type\":\"Vibe\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"TripStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organizerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizer\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TripToUser\"},{\"name\":\"participants\",\"kind\":\"object\",\"type\":\"TripParticipant\",\"relationName\":\"TripToTripParticipant\"},{\"name\":\"images\",\"kind\":\"object\",\"type\":\"TripImage\",\"relationName\":\"TripToTripImage\"},{\"name\":\"reviews\",\"kind\":\"object\",\"type\":\"TripReview\",\"relationName\":\"TripToTripReview\"}],\"dbName\":null},\"TripReview\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rating\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"comment\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"tripId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trip\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"TripToTripReview\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TripReviewToUser\"}],\"dbName\":null},\"TripImage\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"caption\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tripId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trip\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"TripToTripImage\"}],\"dbName\":null},\"TripParticipant\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"ParticipantStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"markedPaidAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"paymentConfirmedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"tripId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trip\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"TripToTripParticipant\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TripParticipantToUser\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"image\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"acceptedTermsAndPrivacy\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"acceptedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"accounts\",\"kind\":\"object\",\"type\":\"Account\",\"relationName\":\"AccountToUser\"},{\"name\":\"trips\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"TripToUser\"},{\"name\":\"participations\",\"kind\":\"object\",\"type\":\"TripParticipant\",\"relationName\":\"TripParticipantToUser\"},{\"name\":\"tripReviews\",\"kind\":\"object\",\"type\":\"TripReview\",\"relationName\":\"TripReviewToUser\"},{\"name\":\"bookings\",\"kind\":\"object\",\"type\":\"Booking\",\"relationName\":\"BookingToUser\"},{\"name\":\"organizerVerification\",\"kind\":\"object\",\"type\":\"OrganizerVerification\",\"relationName\":\"OrganizerVerificationOwner\"},{\"name\":\"reviewedVerifications\",\"kind\":\"object\",\"type\":\"OrganizerVerification\",\"relationName\":\"OrganizerVerificationReviewer\"},{\"name\":\"profile\",\"kind\":\"object\",\"type\":\"UserProfile\",\"relationName\":\"UserToUserProfile\"}],\"dbName\":null},\"UserProfile\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserProfile\"},{\"name\":\"bio\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"interests\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"instagram\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"vibe\",\"kind\":\"enum\",\"type\":\"Vibe\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Account\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refresh_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"access_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expires_at\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"token_type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"id_token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"session_state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AccountToUser\"}],\"dbName\":null},\"OrganizerVerification\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizerVerificationOwner\"},{\"name\":\"fullName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nikEncrypted\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nikHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"birthDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"address\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ktpImageKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"livenessKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bankName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bankAccountNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bankAccountName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VerificationStatus\"},{\"name\":\"rejectionReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reviewedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"reviewedById\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reviewedBy\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizerVerificationReviewer\"},{\"name\":\"verifiedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Trip\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"enum\",\"type\":\"ActivityCategory\"},{\"name\":\"destination\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"location\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"meetingPoint\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"itinerary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"whatsIncluded\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"whatsExcluded\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"maxParticipants\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"vibe\",\"kind\":\"enum\",\"type\":\"Vibe\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"TripStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organizerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organizer\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TripToUser\"},{\"name\":\"participants\",\"kind\":\"object\",\"type\":\"TripParticipant\",\"relationName\":\"TripToTripParticipant\"},{\"name\":\"images\",\"kind\":\"object\",\"type\":\"TripImage\",\"relationName\":\"TripToTripImage\"},{\"name\":\"reviews\",\"kind\":\"object\",\"type\":\"TripReview\",\"relationName\":\"TripToTripReview\"},{\"name\":\"bookings\",\"kind\":\"object\",\"type\":\"Booking\",\"relationName\":\"BookingToTrip\"}],\"dbName\":null},\"TripReview\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rating\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"comment\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"tripId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trip\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"TripToTripReview\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TripReviewToUser\"}],\"dbName\":null},\"TripImage\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"caption\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tripId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trip\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"TripToTripImage\"}],\"dbName\":null},\"TripParticipant\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"ParticipantStatus\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"markedPaidAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"paymentConfirmedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"tripId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trip\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"TripToTripParticipant\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TripParticipantToUser\"},{\"name\":\"booking\",\"kind\":\"object\",\"type\":\"Booking\",\"relationName\":\"BookingToTripParticipant\"}],\"dbName\":null},\"Booking\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tripId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trip\",\"kind\":\"object\",\"type\":\"Trip\",\"relationName\":\"BookingToTrip\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"BookingToUser\"},{\"name\":\"participantId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"participant\",\"kind\":\"object\",\"type\":\"TripParticipant\",\"relationName\":\"BookingToTripParticipant\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"BookingStatus\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"BookingToPayment\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bookingId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"booking\",\"kind\":\"object\",\"type\":\"Booking\",\"relationName\":\"BookingToPayment\"},{\"name\":\"provider\",\"kind\":\"enum\",\"type\":\"PaymentProvider\"},{\"name\":\"externalOrderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"externalTxId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"method\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"rawCallback\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"snapToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"paidAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"failedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"rejectionReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"accounts\",\"organizer\",\"trip\",\"participants\",\"images\",\"reviews\",\"_count\",\"trips\",\"participations\",\"tripReviews\",\"reviewedBy\",\"organizerVerification\",\"reviewedVerifications\",\"profile\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"UserProfile.findUnique\",\"UserProfile.findUniqueOrThrow\",\"UserProfile.findFirst\",\"UserProfile.findFirstOrThrow\",\"UserProfile.findMany\",\"UserProfile.createOne\",\"UserProfile.createMany\",\"UserProfile.createManyAndReturn\",\"UserProfile.updateOne\",\"UserProfile.updateMany\",\"UserProfile.updateManyAndReturn\",\"UserProfile.upsertOne\",\"UserProfile.deleteOne\",\"UserProfile.deleteMany\",\"UserProfile.groupBy\",\"UserProfile.aggregate\",\"Account.findUnique\",\"Account.findUniqueOrThrow\",\"Account.findFirst\",\"Account.findFirstOrThrow\",\"Account.findMany\",\"Account.createOne\",\"Account.createMany\",\"Account.createManyAndReturn\",\"Account.updateOne\",\"Account.updateMany\",\"Account.updateManyAndReturn\",\"Account.upsertOne\",\"Account.deleteOne\",\"Account.deleteMany\",\"_avg\",\"_sum\",\"Account.groupBy\",\"Account.aggregate\",\"OrganizerVerification.findUnique\",\"OrganizerVerification.findUniqueOrThrow\",\"OrganizerVerification.findFirst\",\"OrganizerVerification.findFirstOrThrow\",\"OrganizerVerification.findMany\",\"OrganizerVerification.createOne\",\"OrganizerVerification.createMany\",\"OrganizerVerification.createManyAndReturn\",\"OrganizerVerification.updateOne\",\"OrganizerVerification.updateMany\",\"OrganizerVerification.updateManyAndReturn\",\"OrganizerVerification.upsertOne\",\"OrganizerVerification.deleteOne\",\"OrganizerVerification.deleteMany\",\"OrganizerVerification.groupBy\",\"OrganizerVerification.aggregate\",\"Trip.findUnique\",\"Trip.findUniqueOrThrow\",\"Trip.findFirst\",\"Trip.findFirstOrThrow\",\"Trip.findMany\",\"Trip.createOne\",\"Trip.createMany\",\"Trip.createManyAndReturn\",\"Trip.updateOne\",\"Trip.updateMany\",\"Trip.updateManyAndReturn\",\"Trip.upsertOne\",\"Trip.deleteOne\",\"Trip.deleteMany\",\"Trip.groupBy\",\"Trip.aggregate\",\"TripReview.findUnique\",\"TripReview.findUniqueOrThrow\",\"TripReview.findFirst\",\"TripReview.findFirstOrThrow\",\"TripReview.findMany\",\"TripReview.createOne\",\"TripReview.createMany\",\"TripReview.createManyAndReturn\",\"TripReview.updateOne\",\"TripReview.updateMany\",\"TripReview.updateManyAndReturn\",\"TripReview.upsertOne\",\"TripReview.deleteOne\",\"TripReview.deleteMany\",\"TripReview.groupBy\",\"TripReview.aggregate\",\"TripImage.findUnique\",\"TripImage.findUniqueOrThrow\",\"TripImage.findFirst\",\"TripImage.findFirstOrThrow\",\"TripImage.findMany\",\"TripImage.createOne\",\"TripImage.createMany\",\"TripImage.createManyAndReturn\",\"TripImage.updateOne\",\"TripImage.updateMany\",\"TripImage.updateManyAndReturn\",\"TripImage.upsertOne\",\"TripImage.deleteOne\",\"TripImage.deleteMany\",\"TripImage.groupBy\",\"TripImage.aggregate\",\"TripParticipant.findUnique\",\"TripParticipant.findUniqueOrThrow\",\"TripParticipant.findFirst\",\"TripParticipant.findFirstOrThrow\",\"TripParticipant.findMany\",\"TripParticipant.createOne\",\"TripParticipant.createMany\",\"TripParticipant.createManyAndReturn\",\"TripParticipant.updateOne\",\"TripParticipant.updateMany\",\"TripParticipant.updateManyAndReturn\",\"TripParticipant.upsertOne\",\"TripParticipant.deleteOne\",\"TripParticipant.deleteMany\",\"TripParticipant.groupBy\",\"TripParticipant.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"ParticipantStatus\",\"status\",\"createdAt\",\"markedPaidAt\",\"paymentConfirmedAt\",\"tripId\",\"userId\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"url\",\"caption\",\"order\",\"rating\",\"comment\",\"updatedAt\",\"title\",\"description\",\"ActivityCategory\",\"category\",\"destination\",\"location\",\"meetingPoint\",\"itinerary\",\"whatsIncluded\",\"whatsExcluded\",\"date\",\"endDate\",\"maxParticipants\",\"price\",\"Vibe\",\"vibe\",\"TripStatus\",\"organizerId\",\"fullName\",\"nikEncrypted\",\"nikHash\",\"birthDate\",\"address\",\"ktpImageKey\",\"livenessKey\",\"bankName\",\"bankAccountNumber\",\"bankAccountName\",\"VerificationStatus\",\"rejectionReason\",\"reviewedAt\",\"reviewedById\",\"verifiedAt\",\"type\",\"provider\",\"providerAccountId\",\"refresh_token\",\"access_token\",\"expires_at\",\"token_type\",\"scope\",\"id_token\",\"session_state\",\"bio\",\"city\",\"interests\",\"instagram\",\"has\",\"hasEvery\",\"hasSome\",\"name\",\"email\",\"password\",\"image\",\"emailVerified\",\"acceptedTermsAndPrivacy\",\"acceptedAt\",\"every\",\"some\",\"none\",\"tripId_userId\",\"provider_providerAccountId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"push\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "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_AQAwmwEAAIMBABCcAQAA_wEAMJ0BAQDfAQAhnwEAAIAC0wEioAFAAOEBACGkAQEA3wEAIbUBQADhAQAhyAEBAN8BACHJAQEA3wEAIcoBAQDfAQAhywFAAOEBACHMAQEA3wEAIc0BAQDfAQAhzgEBAN8BACHPAQEA3wEAIdABAQDfAQAh0QEBAN8BACHTAQEA7gEAIdQBQADiAQAh1QEBAO4BACHWAUAA4gEAIQMAAAAcACABAACCAQAwIwAAgwEAIAMAAAAcACABAAAgADACAAAhACABAAAACQAgAQAAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIBcFAAD9AgAgBwAA_gIAIAgAAP8CACAJAACAAwAgnQEBAAAAAZ8BAAAAxwECoAFAAAAAAbUBQAAAAAG2AQEAAAABtwEBAAAAAbkBAAAAuQECugEBAAAAAbsBAQAAAAG8AQEAAAABvQEBAAAAAb4BAQAAAAG_AQEAAAABwAFAAAAAAcEBQAAAAAHCAQIAAAABwwECAAAAAcUBAAAAxQEDxwEBAAAAAQEXAACLAQAgE50BAQAAAAGfAQAAAMcBAqABQAAAAAG1AUAAAAABtgEBAAAAAbcBAQAAAAG5AQAAALkBAroBAQAAAAG7AQEAAAABvAEBAAAAAb0BAQAAAAG-AQEAAAABvwEBAAAAAcABQAAAAAHBAUAAAAABwgECAAAAAcMBAgAAAAHFAQAAAMUBA8cBAQAAAAEBFwAAjQEAMAEXAACNAQAwFwUAANUCACAHAADWAgAgCAAA1wIAIAkAANgCACCdAQEAswIAIZ8BAADUAscBIqABQAC1AgAhtQFAALUCACG2AQEAswIAIbcBAQDAAgAhuQEAANICuQEiugEBALMCACG7AQEAswIAIbwBAQDAAgAhvQEBAMACACG-AQEAwAIAIb8BAQDAAgAhwAFAALUCACHBAUAAtgIAIcIBAgDBAgAhwwECAMECACHFAQAA0wLFASPHAQEAswIAIQIAAAAJACAXAACQAQAgE50BAQCzAgAhnwEAANQCxwEioAFAALUCACG1AUAAtQIAIbYBAQCzAgAhtwEBAMACACG5AQAA0gK5ASK6AQEAswIAIbsBAQCzAgAhvAEBAMACACG9AQEAwAIAIb4BAQDAAgAhvwEBAMACACHAAUAAtQIAIcEBQAC2AgAhwgECAMECACHDAQIAwQIAIcUBAADTAsUBI8cBAQCzAgAhAgAAAAcAIBcAAJIBACACAAAABwAgFwAAkgEAIAMAAAAJACAeAACLAQAgHwAAkAEAIAEAAAAJACABAAAABwAgDAoAAM0CACAkAADQAgAgJQAAzwIAIEYAAM4CACBHAADRAgAgtwEAAK8CACC8AQAArwIAIL0BAACvAgAgvgEAAK8CACC_AQAArwIAIMEBAACvAgAgxQEAAK8CACAWmgEAAPUBADCbAQAAmQEAEJwBAAD1AQAwnQEBAN8BACGfAQAA-AHHASKgAUAA4QEAIbUBQADhAQAhtgEBAN8BACG3AQEA7gEAIbkBAAD2AbkBIroBAQDfAQAhuwEBAN8BACG8AQEA7gEAIb0BAQDuAQAhvgEBAO4BACG_AQEA7gEAIcABQADhAQAhwQFAAOIBACHCAQIA7wEAIcMBAgDvAQAhxQEAAPcBxQEjxwEBAN8BACEDAAAABwAgAQAAmAEAMCMAAJkBACADAAAABwAgAQAACAAwAgAACQAgAQAAABUAIAEAAAAVACADAAAAEwAgAQAAFAAwAgAAFQAgAwAAABMAIAEAABQAMAIAABUAIAMAAAATACABAAAUADACAAAVACAJAwAAzAIAIAYAAMsCACCdAQEAAAABoAFAAAAAAaMBAQAAAAGkAQEAAAABswECAAAAAbQBAQAAAAG1AUAAAAABARcAAKEBACAHnQEBAAAAAaABQAAAAAGjAQEAAAABpAEBAAAAAbMBAgAAAAG0AQEAAAABtQFAAAAAAQEXAACjAQAwARcAAKMBADAJAwAAygIAIAYAAMkCACCdAQEAswIAIaABQAC1AgAhowEBALMCACGkAQEAswIAIbMBAgDBAgAhtAEBAMACACG1AUAAtQIAIQIAAAAVACAXAACmAQAgB50BAQCzAgAhoAFAALUCACGjAQEAswIAIaQBAQCzAgAhswECAMECACG0AQEAwAIAIbUBQAC1AgAhAgAAABMAIBcAAKgBACACAAAAEwAgFwAAqAEAIAMAAAAVACAeAAChAQAgHwAApgEAIAEAAAAVACABAAAAEwAgBgoAAMQCACAkAADHAgAgJQAAxgIAIEYAAMUCACBHAADIAgAgtAEAAK8CACAKmgEAAPQBADCbAQAArwEAEJwBAAD0AQAwnQEBAN8BACGgAUAA4QEAIaMBAQDfAQAhpAEBAN8BACGzAQIA7wEAIbQBAQDuAQAhtQFAAOEBACEDAAAAEwAgAQAArgEAMCMAAK8BACADAAAAEwAgAQAAFAAwAgAAFQAgAQAAABEAIAEAAAARACADAAAADwAgAQAAEAAwAgAAEQAgAwAAAA8AIAEAABAAMAIAABEAIAMAAAAPACABAAAQADACAAARACAGBgAAwwIAIJ0BAQAAAAGjAQEAAAABsAEBAAAAAbEBAQAAAAGyAQIAAAABARcAALcBACAFnQEBAAAAAaMBAQAAAAGwAQEAAAABsQEBAAAAAbIBAgAAAAEBFwAAuQEAMAEXAAC5AQAwBgYAAMICACCdAQEAswIAIaMBAQCzAgAhsAEBALMCACGxAQEAwAIAIbIBAgDBAgAhAgAAABEAIBcAALwBACAFnQEBALMCACGjAQEAswIAIbABAQCzAgAhsQEBAMACACGyAQIAwQIAIQIAAAAPACAXAAC-AQAgAgAAAA8AIBcAAL4BACADAAAAEQAgHgAAtwEAIB8AALwBACABAAAAEQAgAQAAAA8AIAYKAAC7AgAgJAAAvgIAICUAAL0CACBGAAC8AgAgRwAAvwIAILEBAACvAgAgCJoBAADtAQAwmwEAAMUBABCcAQAA7QEAMJ0BAQDfAQAhowEBAN8BACGwAQEA3wEAIbEBAQDuAQAhsgECAO8BACEDAAAADwAgAQAAxAEAMCMAAMUBACADAAAADwAgAQAAEAAwAgAAEQAgAQAAAA0AIAEAAAANACADAAAACwAgAQAADAAwAgAADQAgAwAAAAsAIAEAAAwAMAIAAA0AIAMAAAALACABAAAMADACAAANACAJAwAAugIAIAYAALkCACCdAQEAAAABnwEAAACfAQKgAUAAAAABoQFAAAAAAaIBQAAAAAGjAQEAAAABpAEBAAAAAQEXAADNAQAgB50BAQAAAAGfAQAAAJ8BAqABQAAAAAGhAUAAAAABogFAAAAAAaMBAQAAAAGkAQEAAAABARcAAM8BADABFwAAzwEAMAkDAAC4AgAgBgAAtwIAIJ0BAQCzAgAhnwEAALQCnwEioAFAALUCACGhAUAAtgIAIaIBQAC2AgAhowEBALMCACGkAQEAswIAIQIAAAANACAXAADSAQAgB50BAQCzAgAhnwEAALQCnwEioAFAALUCACGhAUAAtgIAIaIBQAC2AgAhowEBALMCACGkAQEAswIAIQIAAAALACAXAADUAQAgAgAAAAsAIBcAANQBACADAAAADQAgHgAAzQEAIB8AANIBACABAAAADQAgAQAAAAsAIAUKAACwAgAgJAAAsgIAICUAALECACChAQAArwIAIKIBAACvAgAgCpoBAADeAQAwmwEAANsBABCcAQAA3gEAMJ0BAQDfAQAhnwEAAOABnwEioAFAAOEBACGhAUAA4gEAIaIBQADiAQAhowEBAN8BACGkAQEA3wEAIQMAAAALACABAADaAQAwIwAA2wEAIAMAAAALACABAAAMADACAAANACAKmgEAAN4BADCbAQAA2wEAEJwBAADeAQAwnQEBAN8BACGfAQAA4AGfASKgAUAA4QEAIaEBQADiAQAhogFAAOIBACGjAQEA3wEAIaQBAQDfAQAhDgoAAOcBACAkAADsAQAgJQAA7AEAIKUBAQAAAAGmAQEAAAAEpwEB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_AQEA7gEAIcABQADhAQAhwQFAAOIBACHCAQIA7wEAIcMBAgDvAQAhxQEAAPcBxQEjxwEBAN8BACEHCgAA5wEAICQAAP4BACAlAAD-AQAgpQEAAAC5AQKmAQAAALkBCKcBAAAAuQEIrAEAAP0BuQEiBwoAAOQBACAkAAD8AQAgJQAA_AEAIKUBAAAAxQEDpgEAAADFAQmnAQAAAMUBCawBAAD7AcUBIwcKAADnAQAgJAAA-gEAICUAAPoBACClAQAAAMcBAqYBAAAAxwEIpwEAAADHAQisAQAA-QHHASIHCgAA5wEAICQAAPoBACAlAAD6AQAgpQEAAADHAQKmAQAAAMcBCKcBAAAAxwEIrAEAAPkBxwEiBKUBAAAAxwECpgEAAADHAQinAQAAAMcBCKwBAAD6AccBIgcKAADkAQAgJAAA_AEAICUAAPwBACClAQAAAMUBA6YBAAAAxQEJpwEAAADFAQmsAQAA-wHFASMEpQEAAADFAQOmAQAAAMUBCacBAAAAxQEJrAEAAPwBxQEjBwoAAOcBACAkAAD-AQAgJQAA_gEAIKUBAAAAuQECpgEAAAC5AQinAQAAALkBCKwBAAD9AbkBIgSlAQAAALkBAqYBAAAAuQEIpwEAAAC5AQisAQAA_gG5ASIWmgEAAP8BADCbAQAAgwEAEJwBAAD_AQAwnQEBAN8BACGfAQAAgALTASKgAUAA4QEAIaQBAQDfAQAhtQFAAOEBACHIAQEA3wEAIckBAQDfAQAhygEBAN8BACHLAUAA4QEAIcwBAQDfAQAhzQEBAN8BACHOAQEA3wEAIc8BAQDfAQAh0AEBAN8BACHRAQEA3wEAIdMBAQDuAQAh1AFAAOIBACHVAQEA7gEAIdYBQADiAQAhBwoAAOcBACAkAACCAgAgJQAAggIAIKUBAAAA0wECpgEAAADTAQinAQAAANMBCKwBAACBAtMBIgcKAADnAQAgJAAAggIAICUAAIICACClAQAAANMBAqYBAAAA0wEIpwEAAADTAQisAQAAgQLTASIEpQEAAADTAQKmAQAAANMBCKcBAAAA0wEIrAEAAIIC0wEiD5oBAACDAgAwmwEAAGsAEJwBAACDAgAwnQEBAN8BACGkAQEA3wEAIdcBAQDfAQAh2AEBAN8BACHZAQEA3wEAIdoBAQDuAQAh2wEBAO4BACHcAQIAhAIAId0BAQDuAQAh3gEBAO4BACHfAQEA7gEAIeABAQDuAQAhDQoAAOQBACAkAADkAQAgJQAA5AEAIEYAAIYCACBHAADkAQAgpQECAAAAAaYBAgAAAAWnAQIAAAAFqAECAAAAAakBAgAAAAGqAQIAAAABqwECAAAAAawBAgCFAgAhDQoAAOQBACAkAADkAQAgJQAA5AEAIEYAAIYCACBHAADkAQAgpQECAAAAAaYBAgAAAAWnAQIAAAAFqAECAAAAAakBAgAAAAGqAQIAAAABqwECAAAAAawBAgCFAgAhCKUBCAAAAAGmAQgAAAAFpwEIAAAABagBCAAAAAGpAQgAAAABqgEIAAAAAasBCAAAAAGsAQgAhgIAIQyaAQAAhwIAMJsBAABVABCcAQAAhwIAMJ0BAQDfAQAhoAFAAOEBACGkAQEA3wEAIbUBQADhAQAhxQEAAPcBxQEj4QEBAO4BACHiAQEA7gEAIeMBAACIAgAg5AEBAO4BACEEpQEBAAAABeUBAQAAAAHmAQEAAAAE5wEBAAAABA0DAACNAgAgmgEAAIkCADCbAQAAIwAQnAEAAIkCADCdAQEAkgIAIaABQACMAgAhpAEBAJICACG1AUAAjAIAIcUBAACLAsUBI-EBAQCKAgAh4gEBAIoCACHjAQAAiAIAIOQBAQCKAgAhC6UBAQAAAAGmAQEAAAAFpwEBAAAABagBAQAAAAGpAQEAAAABqgEBAAAAAasBAQAAAAGsAQEA8wEAIa0BAQAAAAGuAQEAAAABrwEBAAAAAQSlAQAAAMUBA6YBAAAAxQEJpwEAAADFAQmsAQAA_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_gG5ASIEpQEAAADHAQKmAQAAAMcBCKcBAAAAxwEIrAEAAPoBxwEiA-8BAAAPACDwAQAADwAg8QEAAA8AIALYAQEAAAAB2QEBAAAAARADAACNAgAgmgEAAK0CADCbAQAAAwAQnAEAAK0CADCdAQEAkgIAIaQBAQCSAgAh1wEBAJICACHYAQEAkgIAIdkBAQCSAgAh2gEBAIoCACHbAQEAigIAIdwBAgCuAgAh3QEBAIoCACHeAQEAigIAId8BAQCKAgAh4AEBAIoCACEIpQECAAAAAaYBAgAAAAWnAQIAAAAFqAECAAAAAakBAgAAAAGqAQIAAAABqwECAAAAAawBAgDkAQAhAAAAAAH5AQEAAAABAfkBAAAAnwECAfkBQAAAAAEB-QFAAAAAAQUeAACmBAAgHwAArAQAIPYBAACnBAAg9wEAAKsEACD8AQAACQAgBR4AAKQEACAfAACpBAAg9gEAAKUEACD3AQAAqAQAIPwBAAABACADHgAApgQAIPYBAACnBAAg_AEAAAkAIAMeAACkBAAg9gEAAKUEACD8AQAAAQAgAAAAAAAB-QEBAAAAAQX5AQIAAAABgAICAAAAAYECAgAAAAGCAgIAAAABgwICAAAAAQUeAACfBAAgHwAAogQAIPYBAACgBAAg9wEAAKEEACD8AQAACQAgAx4AAJ8EACD2AQAAoAQAIPwBAAAJACAAAAAAAAUeAACXBAAgHwAAnQQAIPYBAACYBAAg9wEAAJwEACD8AQAACQAgBR4AAJUEACAfAACaBAAg9gEAAJYEACD3AQAAmQQAIPwBAAABACADHgAAlwQAIPYBAACYBAAg_AEAAAkAIAMeAACVBAAg9gEAAJYEACD8AQAAAQAgAAAAAAAB-QEAAAC5AQIB-QEAAADFAQMB-QEAAADHAQIFHgAAjQQAIB8AAJMEACD2AQAAjgQAIPcBAACSBAAg_AEAAAEAIAseAADxAgAwHwAA9gIAMPYBAADyAgAw9wEAAPMCADD4AQAA9AIAIPkBAAD1AgAw-gEAAPUCADD7AQAA9QIAMPwBAAD1AgAw_QEAAPcCADD-AQAA-AIAMAseAADlAgAwHwAA6gIAMPYBAADmAgAw9wEAAOcCADD4AQAA6AIAIPkBAADpAgAw-gEAAOkCADD7AQAA6QIAMPwBAADpAgAw_QEAAOsCADD-AQAA7AIAMAseAADZAgAwHwAA3gIAMPYBAADaAgAw9wEAANsCADD4AQAA3AIAIPkBAADdAgAw-gEAAN0CADD7AQAA3QIAMPwBAADdAgAw_QEAAN8CADD-AQAA4AIAMAcDAADMAgAgnQEBAAAAAaABQAAAAAGkAQEAAAABswECAAAAAbQBAQAAAAG1AUAAAAABAgAAABUAIB4AAOQCACADAAAAFQAgHgAA5AIAIB8AAOMCACABFwAAkQQAMA0DAACNAgAgBgAAowIAIJoBAAChAgAwmwEAABMAEJwBAAChAgAwnQEBAAAAAaABQACMAgAhowEBAJICACGkAQEAkgIAIbMBAgCiAgAhtAEBAIoCACG1AUAAjAIAIfIBAACgAgAgAgAAABUAIBcAAOMCACACAAAA4QIAIBcAAOICACAKmgEAAOACADCbAQAA4QIAEJwBAADgAgAwnQEBAJICACGgAUAAjAIAIaMBAQCSAgAhpAEBAJICACGzAQIAogIAIbQBAQCKAgAhtQFAAIwCACEKmgEAAOACADCbAQAA4QIAEJwBAADgAgAwnQEBAJICACGgAUAAjAIAIaMBAQCSAgAhpAEBAJICACGzAQIAogIAIbQBAQCKAgAhtQFAAIwCACEGnQEBALMCACGgAUAAtQIAIaQBAQCzAgAhswECAMECACG0AQEAwAIAIbUBQAC1AgAhBwMAAMoCACCdAQEAswIAIaABQAC1AgAhpAEBALMCACGzAQIAwQIAIbQBAQDAAgAhtQFAALUCACEHAwAAzAIAIJ0BAQAAAAGgAUAAAAABpAEBAAAAAbMBAgAAAAG0AQEAAAABtQFAAAAAAQSdAQEAAAABsAEBAAAAAbEBAQAAAAGyAQIAAAABAgAAABEAIB4AAPACACADAAAAEQAgHgAA8AIAIB8AAO8CACABFwAAkAQAMAkGAACjAgAgmgEAAKQCADCbAQAADwAQnAEAAKQCADCdAQEAAAABowEBAJICACGwAQEAkgIAIbEBAQCKAgAhsgECAKICACECAAAAEQAgFwAA7wIAIAIAAADtAgAgFwAA7gIAIAiaAQAA7AIAMJsBAADtAgAQnAEAAOwCADCdAQEAkgIAIaMBAQCSAgAhsAEBAJICACGxAQEAigIAIbIBAgCiAgAhCJoBAADsAgAwmwEAAO0CABCcAQAA7AIAMJ0BAQCSAgAhowEBAJICACGwAQEAkgIAIbEBAQCKAgAhsgECAKICACEEnQEBALMCACGwAQEAswIAIbEBAQDAAgAhsgECAMECACEEnQEBALMCACGwAQEAswIAIbEBAQDAAgAhsgECAMECACEEnQEBAAAAAbABAQAAAAGxAQEAAAABsgECAAAAAQcDAAC6AgAgnQEBAAAAAZ8BAAAAnwECoAFAAAAAAaEBQAAAAAGiAUAAAAABpAEBAAAAAQIAAAANACAeAAD8AgAgAwAAAA0AIB4AAPwCACAfAAD7AgAgARcAAI8EADANAwAAjQIAIAYAAKMCACCaAQAApgIAMJsBAAALABCcAQAApgIAMJ0BAQAAAAGfAQAApwKfASKgAUAAjAIAIaEBQACVAgAhogFAAJUCACGjAQEAkgIAIaQBAQCSAgAh8gEAAKUCACACAAAADQAgFwAA-wIAIAIAAAD5AgAgFwAA-gIAIAqaAQAA-AIAMJsBAAD5AgAQnAEAAPgCADCdAQEAkgIAIZ8BAACnAp8BIqABQACMAgAhoQFAAJUCACGiAUAAlQIAIaMBAQCSAgAhpAEBAJICACEKmgEAAPgCADCbAQAA-QIAEJwBAAD4AgAwnQEBAJICACGfAQAApwKfASKgAUAAjAIAIaEBQACVAgAhogFAAJUCACGjAQEAkgIAIaQBAQCSAgAhBp0BAQCzAgAhnwEAALQCnwEioAFAALUCACGhAUAAtgIAIaIBQAC2AgAhpAEBALMCACEHAwAAuAIAIJ0BAQCzAgAhnwEAALQCnwEioAFAALUCACGhAUAAtgIAIaIBQAC2AgAhpAEBALMCACEHAwAAugIAIJ0BAQAAAAGfAQAAAJ8BAqABQAAAAAGhAUAAAAABogFAAAAAAaQBAQAAAAEDHgAAjQQAIPYBAACOBAAg_AEAAAEAIAQeAADxAgAw9gEAAPICADD4AQAA9AIAIPwBAAD1AgAwBB4AAOUCADD2AQAA5gIAMPgBAADoAgAg_AEAAOkCADAEHgAA2QIAMPYBAADaAgAw-AEAANwCACD8AQAA3QIAMAAAAAH5AQAAANMBAgUeAACFBAAgHwAAiwQAIPYBAACGBAAg9wEAAIoEACD8AQAAAQAgBx4AAIMEACAfAACIBAAg9gEAAIQEACD3AQAAhwQAIPoBAAAeACD7AQAAHgAg_AEAAAEAIAMeAACFBAAg9gEAAIYEACD8AQAAAQAgAx4AAIMEACD2AQAAhAQAIPwBAAABACAAAAAAAAX5AQIAAAABgAICAAAAAYECAgAAAAGCAgIAAAABgwICAAAAAQUeAAD-AwAgHwAAgQQAIPYBAAD_AwAg9wEAAIAEACD8AQAAAQAgAx4AAP4DACD2AQAA_wMAIPwBAAABACAAAAAC-QEBAAAABP8BAQAAAAUFHgAA-QMAIB8AAPwDACD2AQAA-gMAIPcBAAD7AwAg_AEAAAEAIAH5AQEAAAAEAx4AAPkDACD2AQAA-gMAIPwBAAABACALBAAA6wMAIAsAAOwDACAMAADtAwAgDQAA7gMAIA8AAO8DACAQAADwAwAgEQAA8QMAIOoBAACvAgAg6wEAAK8CACDsAQAArwIAIO4BAACvAgAgAAAAAfkBIAAAAAELHgAA2AMAMB8AAN0DADD2AQAA2QMAMPcBAADaAwAw-AEAANsDACD5AQAA3AMAMPoBAADcAwAw-wEAANwDADD8AQAA3AMAMP0BAADeAwAw_gEAAN8DADALHgAAzAMAMB8AANEDADD2AQAAzQMAMPcBAADOAwAw-AEAAM8DACD5AQAA0AMAMPoBAADQAwAw-wEAANADADD8AQAA0AMAMP0BAADSAwAw_gEAANMDADALHgAAwwMAMB8AAMcDADD2AQAAxAMAMPcBAADFAwAw-AEAAMYDACD5AQAA9QIAMPoBAAD1AgAw-wEAAPUCADD8AQAA9QIAMP0BAADIAwAw_gEAAPgCADALHgAAugMAMB8AAL4DADD2AQAAuwMAMPcBAAC8AwAw-AEAAL0DACD5AQAA3QIAMPoBAADdAgAw-wEAAN0CADD8AQAA3QIAMP0BAAC_AwAw_gEAAOACADAHHgAAtQMAIB8AALgDACD2AQAAtgMAIPcBAAC3AwAg-gEAABwAIPsBAAAcACD8AQAAIQAgCx4AAKkDADAfAACuAwAw9gEAAKoDADD3AQAAqwMAMPgBAACsAwAg-QEAAK0DADD6AQAArQMAMPsBAACtAwAw_AEAAK0DADD9AQAArwMAMP4BAACwAwAwBx4AAKQDACAfAACnAwAg9gEAAKUDACD3AQAApgMAIPoBAAAjACD7AQAAIwAg_AEAAEAAIAidAQEAAAABoAFAAAAAAbUBQAAAAAHFAQAAAMUBA-EBAQAAAAHiAQEAAAAB4wEAAJYDACDkAQEAAAABAgAAAEAAIB4AAKQDACADAAAAIwAgHgAApAMAIB8AAKgDACAKAAAAIwAgFwAAqAMAIJ0BAQCzAgAhoAFAALUCACG1AUAAtQIAIcUBAADTAsUBI-EBAQDAAgAh4gEBAMACACHjAQAAlAMAIOQBAQDAAgAhCJ0BAQCzAgAhoAFAALUCACG1AUAAtQIAIcUBAADTAsUBI-EBAQDAAgAh4gEBAMACACHjAQAAlAMAIOQBAQDAAgAhEwMAAIcDACCdAQEAAAABnwEAAADTAQKgAUAAAAABpAEBAAAAAbUBQAAAAAHIAQEAAAAByQEBAAAAAcoBAQAAAAHLAUAAAAABzAEBAAAAAc0BAQAAAAHOAQEAAAABzwEBAAAAAdABAQAAAAHRAQEAAAAB0wEBAAAAAdQBQAAAAAHWAUAAAAABAgAAACEAIB4AALQDACADAAAAIQAgHgAAtAMAIB8AALMDACABFwAA-AMAMBgDAACNAgAgDgAAlgIAIJoBAACTAgAwmwEAABwAEJwBAACTAgAwnQEBAAAAAZ8BAACUAtMBIqABQACMAgAhpAEBAAAAAbUBQACMAgAhyAEBAJICACHJAQEAkgIAIcoBAQAAAAHLAUAAjAIAIcwBAQCSAgAhzQEBAJICACHOAQEAkgIAIc8BAQCSAgAh0AEBAJICACHRAQEAkgIAIdMBAQCKAgAh1AFAAJUCACHVAQEAigIAIdYBQACVAgAhAgAAACEAIBcAALMDACACAAAAsQMAIBcAALIDACAWmgEAALADADCbAQAAsQMAEJwBAACwAwAwnQEBAJICACGfAQAAlALTASKgAUAAjAIAIaQBAQCSAgAhtQFAAIwCACHIAQEAkgIAIckBAQCSAgAhygEBAJICACHLAUAAjAIAIcwBAQCSAgAhzQEBAJICACHOAQEAkgIAIc8BAQCSAgAh0AEBAJICACHRAQEAkgIAIdMBAQCKAgAh1AFAAJUCACHVAQEAigIAIdYBQACVAgAhFpoBAACwAwAwmwEAALEDABCcAQAAsAMAMJ0BAQCSAgAhnwEAAJQC0wEioAFAAIwCACGkAQEAkgIAIbUBQACMAgAhyAEBAJICACHJAQEAkgIAIcoBAQCSAgAhywFAAIwCACHMAQEAkgIAIc0BAQCSAgAhzgEBAJICACHPAQEAkgIAIdABAQCSAgAh0QEBAJICACHTAQEAigIAIdQBQACVAgAh1QEBAIoCACHWAUAAlQIAIRKdAQEAswIAIZ8BAACEA9MBIqABQAC1AgAhpAEBALMCACG1AUAAtQIAIcgBAQCzAgAhyQEBALMCACHKAQEAswIAIcsBQAC1AgAhzAEBALMCACHNAQEAswIAIc4BAQCzAgAhzwEBALMCACHQAQEAswIAIdEBAQCzAgAh0wEBAMACACHUAUAAtgIAIdYBQAC2AgAhEwMAAIUDACCdAQEAswIAIZ8BAACEA9MBIqABQAC1AgAhpAEBALMCACG1AUAAtQIAIcgBAQCzAgAhyQEBALMCACHKAQEAswIAIcsBQAC1AgAhzAEBALMCACHNAQEAswIAIc4BAQCzAgAhzwEBALMCACHQAQEAswIAIdEBAQCzAgAh0wEBAMACACHUAUAAtgIAIdYBQAC2AgAhEwMAAIcDACCdAQEAAAABnwEAAADTAQKgAUAAAAABpAEBAAAAAbUBQAAAAAHIAQEAAAAByQEBAAAAAcoBAQAAAAHLAUAAAAABzAEBAAAAAc0BAQAAAAHOAQEAAAABzwEBAAAAAdABAQAAAAHRAQEAAAAB0wEBAAAAAdQBQAAAAAHWAUAAAAABEw4AAIgDACCdAQEAAAABnwEAAADTAQKgAUAAAAABtQFAAAAAAcgBAQAAAAHJAQEAAAABygEBAAAAAcsBQAAAAAHMAQEAAAABzQEBAAAAAc4BAQAAAAHPAQEAAAAB0AEBAAAAAdEBAQAAAAHTAQEAAAAB1AFAAAAAAdUBAQAAAAHWAUAAAAABAgAAACEAIB4AALUDACADAAAAHAAgHgAAtQMAIB8AALkDACAVAAAAHAAgDgAAhgMAIBcAALkDACCdAQEAswIAIZ8BAACEA9MBIqABQAC1AgAhtQFAALUCACHIAQEAswIAIckBAQCzAgAhygEBALMCACHLAUAAtQIAIcwBAQCzAgAhzQEBALMCACHOAQEAswIAIc8BAQCzAgAh0AEBALMCACHRAQEAswIAIdMBAQDAAgAh1AFAALYCACHVAQEAwAIAIdYBQAC2AgAhEw4AAIYDACCdAQEAswIAIZ8BAACEA9MBIqABQAC1AgAhtQFAALUCACHIAQEAswIAIckBAQCzAgAhygEBALMCACHLAUAAtQIAIcwBAQCzAgAhzQEBALMCACHOAQEAswIAIc8BAQCzAgAh0AEBALMCACHRAQEAswIAIdMBAQDAAgAh1AFAALYCACHVAQEAwAIAIdYBQAC2AgAhBwYAAMsCACCdAQEAAAABoAFAAAAAAaMBAQAAAAGzAQIAAAABtAEBAAAAAbUBQAAAAAECAAAAFQAgHgAAwgMAIAMAAAAVACAeAADCAwAgHwAAwQMAIAEXAAD3AwAwAgAAABUAIBcAAMEDACACAAAA4QIAIBcAAMADACAGnQEBALMCACGgAUAAtQIAIaMBAQCzAgAhswECAMECACG0AQEAwAIAIbUBQAC1AgAhBwYAAMkCACCdAQEAswIAIaABQAC1AgAhowEBALMCACGzAQIAwQIAIbQBAQDAAgAhtQFAALUCACEHBgAAywIAIJ0BAQAAAAGgAUAAAAABowEBAAAAAbMBAgAAAAG0AQEAAAABtQFAAAAAAQcGAAC5AgAgnQEBAAAAAZ8BAAAAnwECoAFAAAAAAaEBQAAAAAGiAUAAAAABowEBAAAAAQIAAAANACAeAADLAwAgAwAAAA0AIB4AAMsDACAfAADKAwAgARcAAPYDADACAAAADQAgFwAAygMAIAIAAAD5AgAgFwAAyQMAIAadAQEAswIAIZ8BAAC0Ap8BIqABQAC1AgAhoQFAALYCACGiAUAAtgIAIaMBAQCzAgAhBwYAALcCACCdAQEAswIAIZ8BAAC0Ap8BIqABQAC1AgAhoQFAALYCACGiAUAAtgIAIaMBAQCzAgAhBwYAALkCACCdAQEAAAABnwEAAACfAQKgAUAAAAABoQFAAAAAAaIBQAAAAAGjAQEAAAABFQcAAP4CACAIAAD_AgAgCQAAgAMAIJ0BAQAAAAGfAQAAAMcBAqABQAAAAAG1AUAAAAABtgEBAAAAAbcBAQAAAAG5AQAAALkBAroBAQAAAAG7AQEAAAABvAEBAAAAAb0BAQAAAAG-AQEAAAABvwEBAAAAAcABQAAAAAHBAUAAAAABwgECAAAAAcMBAgAAAAHFAQAAAMUBAwIAAAAJACAeAADXAwAgAwAAAAkAIB4AANcDACAfAADWAwAgARcAAPUDADAaBQAAjQIAIAcAAJsCACAIAACrAgAgCQAAnAIAIJoBAACoAgAwmwEAAAcAEJwBAACoAgAwnQEBAAAAAZ8BAACqAscBIqABQACMAgAhtQFAAIwCACG2AQEAkgIAIbcBAQCKAgAhuQEAAKkCuQEiugEBAJICACG7AQEAkgIAIbwBAQCKAgAhvQEBAIoCACG-AQEAigIAIb8BAQCKAgAhwAFAAIwCACHBAUAAlQIAIcIBAgCiAgAhwwECAKICACHFAQAAiwLFASPHAQEAkgIAIQIAAAAJACAXAADWAwAgAgAAANQDACAXAADVAwAgFpoBAADTAwAwmwEAANQDABCcAQAA0wMAMJ0BAQCSAgAhnwEAAKoCxwEioAFAAIwCACG1AUAAjAIAIbYBAQCSAgAhtwEBAIoCACG5AQAAqQK5ASK6AQEAkgIAIbsBAQCSAgAhvAEBAIoCACG9AQEAigIAIb4BAQCKAgAhvwEBAIoCACHAAUAAjAIAIcEBQACVAgAhwgECAKICACHDAQIAogIAIcUBAACLAsUBI8cBAQCSAgAhFpoBAADTAwAwmwEAANQDABCcAQAA0wMAMJ0BAQCSAgAhnwEAAKoCxwEioAFAAIwCACG1AUAAjAIAIbYBAQCSAgAhtwEBAIoCACG5AQAAqQK5ASK6AQEAkgIAIbsBAQCSAgAhvAEBAIoCACG9AQEAigIAIb4BAQCKAgAhvwEBAIoCACHAAUAAjAIAIcEBQACVAgAhwgECAKICACHDAQIAogIAIcUBAACLAsUBI8cBAQCSAgAhEp0BAQCzAgAhnwEAANQCxwEioAFAALUCACG1AUAAtQIAIbYBAQCzAgAhtwEBAMACACG5AQAA0gK5ASK6AQEAswIAIbsBAQCzAgAhvAEBAMACACG9AQEAwAIAIb4BAQDAAgAhvwEBAMACACHAAUAAtQIAIcEBQAC2AgAhwgECAMECACHDAQIAwQIAIcUBAADTAsUBIxUHAADWAgAgCAAA1wIAIAkAANgCACCdAQEAswIAIZ8BAADUAscBIqABQAC1AgAhtQFAALUCACG2AQEAswIAIbcBAQDAAgAhuQEAANICuQEiugEBALMCACG7AQEAswIAIbwBAQDAAgAhvQEBAMACACG-AQEAwAIAIb8BAQDAAgAhwAFAALUCACHBAUAAtgIAIcIBAgDBAgAhwwECAMECACHFAQAA0wLFASMVBwAA_gIAIAgAAP8CACAJAACAAwAgnQEBAAAAAZ8BAAAAxwECoAFAAAAAAbUBQAAAAAG2AQEAAAABtwEBAAAAAbkBAAAAuQECugEBAAAAAbsBAQAAAAG8AQEAAAABvQEBAAAAAb4BAQAAAAG_AQEAAAABwAFAAAAAAcEBQAAAAAHCAQIAAAABwwECAAAAAcUBAAAAxQEDC50BAQAAAAHXAQEAAAAB2AEBAAAAAdkBAQAAAAHaAQEAAAAB2wEBAAAAAdwBAgAAAAHdAQEAAAAB3gEBAAAAAd8BAQAAAAHgAQEAAAABAgAAAAUAIB4AAOMDACADAAAABQAgHgAA4wMAIB8AAOIDACABFwAA9AMAMBEDAACNAgAgmgEAAK0CADCbAQAAAwAQnAEAAK0CADCdAQEAAAABpAEBAJICACHXAQEAkgIAIdgBAQCSAgAh2QEBAJICACHaAQEAigIAIdsBAQCKAgAh3AECAK4CACHdAQEAigIAId4BAQCKAgAh3wEBAIoCACHgAQEAigIAIfMBAACsAgAgAgAAAAUAIBcAAOIDACACAAAA4AMAIBcAAOEDACAPmgEAAN8DADCbAQAA4AMAEJwBAADfAwAwnQEBAJICACGkAQEAkgIAIdcBAQCSAgAh2AEBAJICACHZAQEAkgIAIdoBAQCKAgAh2wEBAIoCACHcAQIArgIAId0BAQCKAgAh3gEBAIoCACHfAQEAigIAIeABAQCKAgAhD5oBAADfAwAwmwEAAOADABCcAQAA3wMAMJ0BAQCSAgAhpAEBAJICACHXAQEAkgIAIdgBAQCSAgAh2QEBAJICACHaAQEAigIAIdsBAQCKAgAh3AECAK4CACHdAQEAigIAId4BAQCKAgAh3wEBAIoCACHgAQEAigIAIQudAQEAswIAIdcBAQCzAgAh2AEBALMCACHZAQEAswIAIdoBAQDAAgAh2wEBAMACACHcAQIAjgMAId0BAQDAAgAh3gEBAMACACHfAQEAwAIAIeABAQDAAgAhC50BAQCzAgAh1wEBALMCACHYAQEAswIAIdkBAQCzAgAh2gEBAMACACHbAQEAwAIAIdwBAgCOAwAh3QEBAMACACHeAQEAwAIAId8BAQDAAgAh4AEBAMACACELnQEBAAAAAdcBAQAAAAHYAQEAAAAB2QEBAAAAAdoBAQAAAAHbAQEAAAAB3AECAAAAAd0BAQAAAAHeAQEAAAAB3wEBAAAAAeABAQAAAAEEHgAA2AMAMPYBAADZAwAw-AEAANsDACD8AQAA3AMAMAQeAADMAwAw9gEAAM0DADD4AQAAzwMAIPwBAADQAwAwBB4AAMMDADD2AQAAxAMAMPgBAADGAwAg_AEAAPUCADAEHgAAugMAMPYBAAC7AwAw-AEAAL0DACD8AQAA3QIAMAMeAAC1AwAg9gEAALYDACD8AQAAIQAgBB4AAKkDADD2AQAAqgMAMPgBAACsAwAg_AEAAK0DADADHgAApAMAIPYBAAClAwAg_AEAAEAAIAAAAAAGAwAAmAMAIA4AAJgDACDTAQAArwIAINQBAACvAgAg1QEAAK8CACDWAQAArwIAIAAFAwAAmAMAIMUBAACvAgAg4QEAAK8CACDiAQAArwIAIOQBAACvAgAgCwUAAJgDACAHAADtAwAgCAAA8wMAIAkAAO4DACC3AQAArwIAILwBAACvAgAgvQEAAK8CACC-AQAArwIAIL8BAACvAgAgwQEAAK8CACDFAQAArwIAIAALnQEBAAAAAdcBAQAAAAHYAQEAAAAB2QEBAAAAAdoBAQAAAAHbAQEAAAAB3AECAAAAAd0BAQAAAAHeAQEAAAAB3wEBAAAAAeABAQAAAAESnQEBAAAAAZ8BAAAAxwECoAFAAAAAAbUBQAAAAAG2AQEAAAABtwEBAAAAAbkBAAAAuQECugEBAAAAAbsBAQAAAAG8AQEAAAABvQEBAAAAAb4BAQAAAAG_AQEAAAABwAFAAAAAAcEBQAAAAAHCAQIAAAABwwECAAAAAcUBAAAAxQEDBp0BAQAAAAGfAQAAAJ8BAqABQAAAAAGhAUAAAAABogFAAAAAAaMBAQAAAAEGnQEBAAAAAaABQAAAAAGjAQEAAAABswECAAAAAbQBAQAAAAG1AUAAAAABEp0BAQAAAAGfAQAAANMBAqABQAAAAAGkAQEAAAABtQFAAAAAAcgBAQAAAAHJAQEAAAABygEBAAAAAcsBQAAAAAHMAQEAAAABzQEBAAAAAc4BAQAAAAHPAQEAAAAB0AEBAAAAAdEBAQAAAAHTAQEAAAAB1AFAAAAAAdYBQAAAAAEQBAAA5AMAIAsAAOUDACAMAADmAwAgDQAA5wMAIA8AAOgDACAQAADpAwAgnQEBAAAAAaABQAAAAAG1AUAAAAAB6AEBAAAAAekBAQAAAAHqAQEAAAAB6wEBAAAAAewBQAAAAAHtASAAAAAB7gFAAAAAAQIAAAABACAeAAD5AwAgAwAAAB4AIB4AAPkDACAfAAD9AwAgEgAAAB4AIAQAAJ0DACALAACeAwAgDAAAnwMAIA0AAKADACAPAAChAwAgEAAAogMAIBcAAP0DACCdAQEAswIAIaABQAC1AgAhtQFAALUCACHoAQEAswIAIekBAQCzAgAh6gEBAMACACHrAQEAwAIAIewBQAC2AgAh7QEgAJwDACHuAUAAtgIAIRAEAACdAwAgCwAAngMAIAwAAJ8DACANAACgAwAgDwAAoQMAIBAAAKIDACCdAQEAswIAIaABQAC1AgAhtQFAALUCACHoAQEAswIAIekBAQCzAgAh6gEBAMACACHrAQEAwAIAIewBQAC2AgAh7QEgAJwDACHuAUAAtgIAIRALAADlAwAgDAAA5gMAIA0AAOcDACAPAADoAwAgEAAA6QMAIBEAAOoDACCdAQEAAAABoAFAAAAAAbUBQAAAAAHoAQEAAAAB6QEBAAAAAeoBAQAAAAHrAQEAAAAB7AFAAAAAAe0BIAAAAAHuAUAAAAABAgAAAAEAIB4AAP4DACADAAAAHgAgHgAA_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-AgAgCAAA_wIAIJ0BAQAAAAGfAQAAAMcBAqABQAAAAAG1AUAAAAABtgEBAAAAAbcBAQAAAAG5AQAAALkBAroBAQAAAAG7AQEAAAABvAEBAAAAAb0BAQAAAAG-AQEAAAABvwEBAAAAAcABQAAAAAHBAUAAAAABwgECAAAAAcMBAgAAAAHFAQAAAMUBA8cBAQAAAAECAAAACQAgHgAAlwQAIAMAAAAeACAeAACVBAAgHwAAmwQAIBIAAAAeACAEAACdAwAgCwAAngMAIAwAAJ8DACAPAAChAwAgEAAAogMAIBEAAKMDACAXAACbBAAgnQEBALMCACGgAUAAtQIAIbUBQAC1AgAh6AEBALMCACHpAQEAswIAIeoBAQDAAgAh6wEBAMACACHsAUAAtgIAIe0BIACcAwAh7gFAALYCACEQBAAAnQMAIAsAAJ4DACAMAACfAwAgDwAAoQMAIBAAAKIDACARAACjAwAgnQEBALMCACGgAUAAtQIAIbUBQAC1AgAh6AEBALMCACHpAQEAswIAIeoBAQDAAgAh6wEBAMACACHsAUAAtgIAIe0BIACcAwAh7gFAALYCACEDAAAABwAgHgAAlwQAIB8AAJ4EACAYAAAABwAgBQAA1QIAIAcAANYCACAIAADXAgAgFwAAngQAIJ0BAQCzAgAhnwEAANQCxwEioAFAALUCACG1AUAAtQIAIbYBAQCzAgAhtwEBAMACACG5AQAA0gK5ASK6AQEAswIAIbsBAQCzAgAhvAEBAMACACG9AQEAwAIAIb4BAQDAAgAhvwEBAMACACHAAUAAtQIAIcEBQAC2AgAhwgECAMECACHDAQIAwQIAIcUBAADTAsUBI8cBAQCzAgAhFgUAANUCACAHAADWAgAgCAAA1wIAIJ0BAQCzAgAhnwEAANQCxwEioAFAALUCACG1AUAAtQIAIbYBAQCzAgAhtwEBAMACACG5AQAA0gK5ASK6AQEAswIAIbsBAQCzAgAhvAEBAMACACG9AQEAwAIAIb4BAQDAAgAhvwEBAMACACHAAUAAtQIAIcEBQAC2AgAhwgECAMECACHDAQIAwQIAIcUBAADTAsUBI8cBAQCzAgAhFgUAAP0CACAHAAD-AgAgCQAAgAMAIJ0BAQAAAAGfAQAAAMcBAqABQAAAAAG1AUAAAAABtgEBAAAAAbcBAQAAAAG5AQAAALkBAroBAQAAAAG7AQEAAAABvAEBAAAAAb0BAQAAAAG-AQEAAAABvwEBAAAAAcABQAAAAAHBAUAAAAABwgECAAAAAcMBAgAAAAHFAQAAAMUBA8cBAQAAAAECAAAACQAgHgAAnwQAIAMAAAAHACAeAACfBAAgHwAAowQAIBgAAAAHACAFAADVAgAgBwAA1gIAIAkAANgCACAXAACjBAAgnQEBALMCACGfAQAA1ALHASKgAUAAtQIAIbUBQAC1AgAhtgEBALMCACG3AQEAwAIAIbkBAADSArkBIroBAQCzAgAhuwEBALMCACG8AQEAwAIAIb0BAQDAAgAhvgEBAMACACG_AQEAwAIAIcABQAC1AgAhwQFAALYCACHCAQIAwQIAIcMBAgDBAgAhxQEAANMCxQEjxwEBALMCACEWBQAA1QIAIAcAANYCACAJAADYAgAgnQEBALMCACGfAQAA1ALHASKgAUAAtQIAIbUBQAC1AgAhtgEBALMCACG3AQEAwAIAIbkBAADSArkBIroBAQCzAgAhuwEBALMCACG8AQEAwAIAIb0BAQDAAgAhvgEBAMACACG_AQEAwAIAIcABQAC1AgAhwQFAALYCACHCAQIAwQIAIcMBAgDBAgAhxQEAANMCxQEjxwEBALMCACEQBAAA5AMAIAsAAOUDACANAADnAwAgDwAA6AMAIBAAAOkDACARAADqAwAgnQEBAAAAAaABQAAAAAG1AUAAAAAB6AEBAAAAAekBAQAAAAHqAQEAAAAB6wEBAAAAAewBQAAAAAHtASAAAAAB7gFAAAAAAQIAAAABACAeAACkBAAgFgUAAP0CACAIAAD_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_uAEFgAG6AQuBAbsBPIIBvQEFgwG_AQuEAcABPYUBwQEFhgHCAQWHAcMBC4gBxgE-iQHHAUSKAcgBBIsByQEEjAHKAQSNAcsBBI4BzAEEjwHOAQSQAdABC5EB0QFFkgHTAQSTAdUBC5QB1gFGlQHXAQSWAdgBBJcB2QELmAHcAUeZAd0BSw" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"accounts\",\"organizer\",\"trip\",\"participant\",\"booking\",\"payments\",\"_count\",\"participants\",\"images\",\"reviews\",\"bookings\",\"trips\",\"participations\",\"tripReviews\",\"reviewedBy\",\"organizerVerification\",\"reviewedVerifications\",\"profile\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"UserProfile.findUnique\",\"UserProfile.findUniqueOrThrow\",\"UserProfile.findFirst\",\"UserProfile.findFirstOrThrow\",\"UserProfile.findMany\",\"UserProfile.createOne\",\"UserProfile.createMany\",\"UserProfile.createManyAndReturn\",\"UserProfile.updateOne\",\"UserProfile.updateMany\",\"UserProfile.updateManyAndReturn\",\"UserProfile.upsertOne\",\"UserProfile.deleteOne\",\"UserProfile.deleteMany\",\"UserProfile.groupBy\",\"UserProfile.aggregate\",\"Account.findUnique\",\"Account.findUniqueOrThrow\",\"Account.findFirst\",\"Account.findFirstOrThrow\",\"Account.findMany\",\"Account.createOne\",\"Account.createMany\",\"Account.createManyAndReturn\",\"Account.updateOne\",\"Account.updateMany\",\"Account.updateManyAndReturn\",\"Account.upsertOne\",\"Account.deleteOne\",\"Account.deleteMany\",\"_avg\",\"_sum\",\"Account.groupBy\",\"Account.aggregate\",\"OrganizerVerification.findUnique\",\"OrganizerVerification.findUniqueOrThrow\",\"OrganizerVerification.findFirst\",\"OrganizerVerification.findFirstOrThrow\",\"OrganizerVerification.findMany\",\"OrganizerVerification.createOne\",\"OrganizerVerification.createMany\",\"OrganizerVerification.createManyAndReturn\",\"OrganizerVerification.updateOne\",\"OrganizerVerification.updateMany\",\"OrganizerVerification.updateManyAndReturn\",\"OrganizerVerification.upsertOne\",\"OrganizerVerification.deleteOne\",\"OrganizerVerification.deleteMany\",\"OrganizerVerification.groupBy\",\"OrganizerVerification.aggregate\",\"Trip.findUnique\",\"Trip.findUniqueOrThrow\",\"Trip.findFirst\",\"Trip.findFirstOrThrow\",\"Trip.findMany\",\"Trip.createOne\",\"Trip.createMany\",\"Trip.createManyAndReturn\",\"Trip.updateOne\",\"Trip.updateMany\",\"Trip.updateManyAndReturn\",\"Trip.upsertOne\",\"Trip.deleteOne\",\"Trip.deleteMany\",\"Trip.groupBy\",\"Trip.aggregate\",\"TripReview.findUnique\",\"TripReview.findUniqueOrThrow\",\"TripReview.findFirst\",\"TripReview.findFirstOrThrow\",\"TripReview.findMany\",\"TripReview.createOne\",\"TripReview.createMany\",\"TripReview.createManyAndReturn\",\"TripReview.updateOne\",\"TripReview.updateMany\",\"TripReview.updateManyAndReturn\",\"TripReview.upsertOne\",\"TripReview.deleteOne\",\"TripReview.deleteMany\",\"TripReview.groupBy\",\"TripReview.aggregate\",\"TripImage.findUnique\",\"TripImage.findUniqueOrThrow\",\"TripImage.findFirst\",\"TripImage.findFirstOrThrow\",\"TripImage.findMany\",\"TripImage.createOne\",\"TripImage.createMany\",\"TripImage.createManyAndReturn\",\"TripImage.updateOne\",\"TripImage.updateMany\",\"TripImage.updateManyAndReturn\",\"TripImage.upsertOne\",\"TripImage.deleteOne\",\"TripImage.deleteMany\",\"TripImage.groupBy\",\"TripImage.aggregate\",\"TripParticipant.findUnique\",\"TripParticipant.findUniqueOrThrow\",\"TripParticipant.findFirst\",\"TripParticipant.findFirstOrThrow\",\"TripParticipant.findMany\",\"TripParticipant.createOne\",\"TripParticipant.createMany\",\"TripParticipant.createManyAndReturn\",\"TripParticipant.updateOne\",\"TripParticipant.updateMany\",\"TripParticipant.updateManyAndReturn\",\"TripParticipant.upsertOne\",\"TripParticipant.deleteOne\",\"TripParticipant.deleteMany\",\"TripParticipant.groupBy\",\"TripParticipant.aggregate\",\"Booking.findUnique\",\"Booking.findUniqueOrThrow\",\"Booking.findFirst\",\"Booking.findFirstOrThrow\",\"Booking.findMany\",\"Booking.createOne\",\"Booking.createMany\",\"Booking.createManyAndReturn\",\"Booking.updateOne\",\"Booking.updateMany\",\"Booking.updateManyAndReturn\",\"Booking.upsertOne\",\"Booking.deleteOne\",\"Booking.deleteMany\",\"Booking.groupBy\",\"Booking.aggregate\",\"Payment.findUnique\",\"Payment.findUniqueOrThrow\",\"Payment.findFirst\",\"Payment.findFirstOrThrow\",\"Payment.findMany\",\"Payment.createOne\",\"Payment.createMany\",\"Payment.createManyAndReturn\",\"Payment.updateOne\",\"Payment.updateMany\",\"Payment.updateManyAndReturn\",\"Payment.upsertOne\",\"Payment.deleteOne\",\"Payment.deleteMany\",\"Payment.groupBy\",\"Payment.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"bookingId\",\"PaymentProvider\",\"provider\",\"externalOrderId\",\"externalTxId\",\"method\",\"amount\",\"PaymentStatus\",\"status\",\"rawCallback\",\"snapToken\",\"expiresAt\",\"paidAt\",\"failedAt\",\"rejectionReason\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"tripId\",\"userId\",\"participantId\",\"currency\",\"BookingStatus\",\"ParticipantStatus\",\"markedPaidAt\",\"paymentConfirmedAt\",\"url\",\"caption\",\"order\",\"rating\",\"comment\",\"title\",\"description\",\"ActivityCategory\",\"category\",\"destination\",\"location\",\"meetingPoint\",\"itinerary\",\"whatsIncluded\",\"whatsExcluded\",\"date\",\"endDate\",\"maxParticipants\",\"price\",\"Vibe\",\"vibe\",\"TripStatus\",\"organizerId\",\"fullName\",\"nikEncrypted\",\"nikHash\",\"birthDate\",\"address\",\"ktpImageKey\",\"livenessKey\",\"bankName\",\"bankAccountNumber\",\"bankAccountName\",\"VerificationStatus\",\"reviewedAt\",\"reviewedById\",\"verifiedAt\",\"type\",\"providerAccountId\",\"refresh_token\",\"access_token\",\"expires_at\",\"token_type\",\"scope\",\"id_token\",\"session_state\",\"bio\",\"city\",\"interests\",\"instagram\",\"has\",\"hasEvery\",\"hasSome\",\"name\",\"email\",\"password\",\"image\",\"emailVerified\",\"acceptedTermsAndPrivacy\",\"acceptedAt\",\"every\",\"some\",\"none\",\"tripId_userId\",\"provider_providerAccountId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"push\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "3AVgoAEVBAAA3wIAIA4AAOMCACAPAADgAgAgEAAA4QIAIBEAAOICACATAADkAgAgFAAA5QIAIBUAAOYCACC-AQAA3QIAML8BAAAqABDAAQAA3QIAMMEBAQAAAAHRAUAA0gIAIdIBQADSAgAhoQIBANgCACGiAgEAAAABowIBANACACGkAgEA0AIAIaUCQADbAgAhpgIgAN4CACGnAkAA2wIAIQEAAAABACAQAwAA0wIAIL4BAAD-AgAwvwEAAAMAEMABAAD-AgAwwQEBANgCACHEAQEA2AIAIeUBAQDYAgAhkQIBANgCACGSAgEA2AIAIZMCAQDQAgAhlAIBANACACGVAgIA_wIAIZYCAQDQAgAhlwIBANACACGYAgEA0AIAIZkCAQDQAgAhCAMAAKEEACCTAgAAgAMAIJQCAACAAwAglQIAAIADACCWAgAAgAMAIJcCAACAAwAgmAIAAIADACCZAgAAgAMAIBEDAADTAgAgvgEAAP4CADC_AQAAAwAQwAEAAP4CADDBAQEAAAABxAEBANgCACHlAQEA2AIAIZECAQDYAgAhkgIBANgCACGTAgEA0AIAIZQCAQDQAgAhlQICAP8CACGWAgEA0AIAIZcCAQDQAgAhmAIBANACACGZAgEA0AIAIawCAAD9AgAgAwAAAAMAIAEAAAQAMAIAAAUAIBsFAADTAgAgCwAA4QIAIAwAAPwCACANAADiAgAgDgAA4wIAIL4BAAD5AgAwvwEAAAcAEMABAAD5AgAwwQEBANgCACHKAQAA-wKCAiLRAUAA0gIAIdIBQADSAgAh8QEBANgCACHyAQEA0AIAIfQBAAD6AvQBIvUBAQDYAgAh9gEBANgCACH3AQEA0AIAIfgBAQDQAgAh-QEBANACACH6AQEA0AIAIfsBQADSAgAh_AFAANsCACH9AQIA6AIAIf4BAgDoAgAhgAIAANECgAIjggIBANgCACEMBQAAoQQAIAsAAIEFACAMAACLBQAgDQAAggUAIA4AAIMFACDyAQAAgAMAIPcBAACAAwAg-AEAAIADACD5AQAAgAMAIPoBAACAAwAg_AEAAIADACCAAgAAgAMAIBsFAADTAgAgCwAA4QIAIAwAAPwCACANAADiAgAgDgAA4wIAIL4BAAD5AgAwvwEAAAcAEMABAAD5AgAwwQEBAAAAAcoBAAD7AoICItEBQADSAgAh0gFAANICACHxAQEA2AIAIfIBAQDQAgAh9AEAAPoC9AEi9QEBANgCACH2AQEA2AIAIfcBAQDQAgAh-AEBANACACH5AQEA0AIAIfoBAQDQAgAh-wFAANICACH8AUAA2wIAIf0BAgDoAgAh_gECAOgCACGAAgAA0QKAAiOCAgEA2AIAIQMAAAAHACABAAAIADACAAAJACANAwAA0wIAIAYAAOoCACAIAAD4AgAgvgEAAPYCADC_AQAACwAQwAEAAPYCADDBAQEA2AIAIcoBAAD3AuoBItEBQADSAgAh5AEBANgCACHlAQEA2AIAIeoBQADbAgAh6wFAANsCACEFAwAAoQQAIAYAAIcFACAIAACKBQAg6gEAAIADACDrAQAAgAMAIA4DAADTAgAgBgAA6gIAIAgAAPgCACC-AQAA9gIAML8BAAALABDAAQAA9gIAMMEBAQAAAAHKAQAA9wLqASLRAUAA0gIAIeQBAQDYAgAh5QEBANgCACHqAUAA2wIAIesBQADbAgAhqwIAAPUCACADAAAACwAgAQAADAAwAgAADQAgEAMAANMCACAGAADqAgAgBwAA6wIAIAkAAOwCACC-AQAA5wIAML8BAAAPABDAAQAA5wIAMMEBAQDYAgAhyAECAOgCACHKAQAA6QLpASLRAUAA0gIAIdIBQADSAgAh5AEBANgCACHlAQEA2AIAIeYBAQDYAgAh5wEBANgCACEBAAAADwAgFAgAAPQCACC-AQAA8AIAML8BAAARABDAAQAA8AIAMMEBAQDYAgAhwgEBANgCACHEAQAA8QLEASLFAQEA2AIAIcYBAQDQAgAhxwEBANACACHIAQIA6AIAIcoBAADyAsoBIssBAADzAgAgzAEBANACACHNAUAA2wIAIc4BQADbAgAhzwFAANsCACHQAQEA0AIAIdEBQADSAgAh0gFAANICACEJCAAAigUAIMYBAACAAwAgxwEAAIADACDLAQAAgAMAIMwBAACAAwAgzQEAAIADACDOAQAAgAMAIM8BAACAAwAg0AEAAIADACAUCAAA9AIAIL4BAADwAgAwvwEAABEAEMABAADwAgAwwQEBAAAAAcIBAQDYAgAhxAEAAPECxAEixQEBAAAAAcYBAQDQAgAhxwEBANACACHIAQIA6AIAIcoBAADyAsoBIssBAADzAgAgzAEBANACACHNAUAA2wIAIc4BQADbAgAhzwFAANsCACHQAQEA0AIAIdEBQADSAgAh0gFAANICACEDAAAAEQAgAQAAEgAwAgAAEwAgAQAAABEAIAkGAADqAgAgvgEAAO8CADC_AQAAFgAQwAEAAO8CADDBAQEA2AIAIeQBAQDYAgAh7AEBANgCACHtAQEA0AIAIe4BAgDoAgAhAgYAAIcFACDtAQAAgAMAIAkGAADqAgAgvgEAAO8CADC_AQAAFgAQwAEAAO8CADDBAQEAAAAB5AEBANgCACHsAQEA2AIAIe0BAQDQAgAh7gECAOgCACEDAAAAFgAgAQAAFwAwAgAAGAAgDAMAANMCACAGAADqAgAgvgEAAO4CADC_AQAAGgAQwAEAAO4CADDBAQEA2AIAIdEBQADSAgAh0gFAANICACHkAQEA2AIAIeUBAQDYAgAh7wECAOgCACHwAQEA0AIAIQMDAAChBAAgBgAAhwUAIPABAACAAwAgDQMAANMCACAGAADqAgAgvgEAAO4CADC_AQAAGgAQwAEAAO4CADDBAQEAAAAB0QFAANICACHSAUAA0gIAIeQBAQDYAgAh5QEBANgCACHvAQIA6AIAIfABAQDQAgAhqwIAAO0CACADAAAAGgAgAQAAGwAwAgAAHAAgBAMAAKEEACAGAACHBQAgBwAAiAUAIAkAAIkFACAQAwAA0wIAIAYAAOoCACAHAADrAgAgCQAA7AIAIL4BAADnAgAwvwEAAA8AEMABAADnAgAwwQEBAAAAAcgBAgDoAgAhygEAAOkC6QEi0QFAANICACHSAUAA0gIAIeQBAQDYAgAh5QEBANgCACHmAQEAAAAB5wEBANgCACEDAAAADwAgAQAAHgAwAgAAHwAgAQAAAAsAIAEAAAAWACABAAAAGgAgAQAAAA8AIAMAAAALACABAAAMADACAAANACADAAAAGgAgAQAAGwAwAgAAHAAgAwAAAA8AIAEAAB4AMAIAAB8AIBgDAADTAgAgEgAA3AIAIL4BAADZAgAwvwEAACgAEMABAADZAgAwwQEBANgCACHKAQAA2gKOAiLQAQEA0AIAIdEBQADSAgAh0gFAANICACHlAQEA2AIAIYMCAQDYAgAhhAIBANgCACGFAgEA2AIAIYYCQADSAgAhhwIBANgCACGIAgEA2AIAIYkCAQDYAgAhigIBANgCACGLAgEA2AIAIYwCAQDYAgAhjgJAANsCACGPAgEA0AIAIZACQADbAgAhAQAAACgAIBUEAADfAgAgDgAA4wIAIA8AAOACACAQAADhAgAgEQAA4gIAIBMAAOQCACAUAADlAgAgFQAA5gIAIL4BAADdAgAwvwEAACoAEMABAADdAgAwwQEBANgCACHRAUAA0gIAIdIBQADSAgAhoQIBANgCACGiAgEA2AIAIaMCAQDQAgAhpAIBANACACGlAkAA2wIAIaYCIADeAgAhpwJAANsCACEBAAAAKgAgBgMAAKEEACASAAChBAAg0AEAAIADACCOAgAAgAMAII8CAACAAwAgkAIAAIADACAYAwAA0wIAIBIAANwCACC-AQAA2QIAML8BAAAoABDAAQAA2QIAMMEBAQAAAAHKAQAA2gKOAiLQAQEA0AIAIdEBQADSAgAh0gFAANICACHlAQEAAAABgwIBANgCACGEAgEA2AIAIYUCAQAAAAGGAkAA0gIAIYcCAQDYAgAhiAIBANgCACGJAgEA2AIAIYoCAQDYAgAhiwIBANgCACGMAgEA2AIAIY4CQADbAgAhjwIBANACACGQAkAA2wIAIQMAAAAoACABAAAsADACAAAtACANAwAA0wIAIL4BAADPAgAwvwEAAC8AEMABAADPAgAwwQEBANgCACHRAUAA0gIAIdIBQADSAgAh5QEBANgCACGAAgAA0QKAAiOaAgEA0AIAIZsCAQDQAgAhnAIAAM4CACCdAgEA0AIAIQEAAAAvACABAAAAAwAgAQAAAAcAIAEAAAALACABAAAAGgAgAQAAAA8AIAEAAAAoACABAAAAAQAgDAQAAP8EACAOAACDBQAgDwAAgAUAIBAAAIEFACARAACCBQAgEwAAhAUAIBQAAIUFACAVAACGBQAgowIAAIADACCkAgAAgAMAIKUCAACAAwAgpwIAAIADACADAAAAKgAgAQAAOAAwAgAAAQAgAwAAACoAIAEAADgAMAIAAAEAIAMAAAAqACABAAA4ADACAAABACASBAAA9wQAIA4AAPsEACAPAAD4BAAgEAAA-QQAIBEAAPoEACATAAD8BAAgFAAA_QQAIBUAAP4EACDBAQEAAAAB0QFAAAAAAdIBQAAAAAGhAgEAAAABogIBAAAAAaMCAQAAAAGkAgEAAAABpQJAAAAAAaYCIAAAAAGnAkAAAAABARsAADwAIArBAQEAAAAB0QFAAAAAAdIBQAAAAAGhAgEAAAABogIBAAAAAaMCAQAAAAGkAgEAAAABpQJAAAAAAaYCIAAAAAGnAkAAAAABARsAAD4AMAEbAAA-ADASBAAApgQAIA4AAKoEACAPAACnBAAgEAAAqAQAIBEAAKkEACATAACrBAAgFAAArAQAIBUAAK0EACDBAQEAhgMAIdEBQACMAwAh0gFAAIwDACGhAgEAhgMAIaICAQCGAwAhowIBAIgDACGkAgEAiAMAIaUCQACLAwAhpgIgAKUEACGnAkAAiwMAIQIAAAABACAbAABBACAKwQEBAIYDACHRAUAAjAMAIdIBQACMAwAhoQIBAIYDACGiAgEAhgMAIaMCAQCIAwAhpAIBAIgDACGlAkAAiwMAIaYCIAClBAAhpwJAAIsDACECAAAAKgAgGwAAQwAgAgAAACoAIBsAAEMAIAMAAAABACAiAAA8ACAjAABBACABAAAAAQAgAQAAACoAIAcKAACiBAAgKAAApAQAICkAAKMEACCjAgAAgAMAIKQCAACAAwAgpQIAAIADACCnAgAAgAMAIA2-AQAA1AIAML8BAABKABDAAQAA1AIAMMEBAQCYAgAh0QFAAJ8CACHSAUAAnwIAIaECAQCYAgAhogIBAJgCACGjAgEAmgIAIaQCAQCaAgAhpQJAAJ4CACGmAiAA1QIAIacCQACeAgAhAwAAACoAIAEAAEkAMCcAAEoAIAMAAAAqACABAAA4ADACAAABACANAwAA0wIAIL4BAADPAgAwvwEAAC8AEMABAADPAgAwwQEBAAAAAdEBQADSAgAh0gFAANICACHlAQEAAAABgAIAANECgAIjmgIBANACACGbAgEA0AIAIZwCAADOAgAgnQIBANACACEBAAAATQAgAQAAAE0AIAUDAAChBAAggAIAAIADACCaAgAAgAMAIJsCAACAAwAgnQIAAIADACADAAAALwAgAQAAUAAwAgAATQAgAwAAAC8AIAEAAFAAMAIAAE0AIAMAAAAvACABAABQADACAABNACAKAwAAoAQAIMEBAQAAAAHRAUAAAAAB0gFAAAAAAeUBAQAAAAGAAgAAAIACA5oCAQAAAAGbAgEAAAABnAIAAJ8EACCdAgEAAAABARsAAFQAIAnBAQEAAAAB0QFAAAAAAdIBQAAAAAHlAQEAAAABgAIAAACAAgOaAgEAAAABmwIBAAAAAZwCAACfBAAgnQIBAAAAAQEbAABWADABGwAAVgAwCgMAAJ4EACDBAQEAhgMAIdEBQACMAwAh0gFAAIwDACHlAQEAhgMAIYACAADOA4ACI5oCAQCIAwAhmwIBAIgDACGcAgAAnQQAIJ0CAQCIAwAhAgAAAE0AIBsAAFkAIAnBAQEAhgMAIdEBQACMAwAh0gFAAIwDACHlAQEAhgMAIYACAADOA4ACI5oCAQCIAwAhmwIBAIgDACGcAgAAnQQAIJ0CAQCIAwAhAgAAAC8AIBsAAFsAIAIAAAAvACAbAABbACADAAAATQAgIgAAVAAgIwAAWQAgAQAAAE0AIAEAAAAvACAHCgAAmgQAICgAAJwEACApAACbBAAggAIAAIADACCaAgAAgAMAIJsCAACAAwAgnQIAAIADACAMvgEAAM0CADC_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_AQAAkAEAEMABAADFAgAwwQEBAJgCACHKAQAAxgKOAiLQAQEAmgIAIdEBQACfAgAh0gFAAJ8CACHlAQEAmAIAIYMCAQCYAgAhhAIBAJgCACGFAgEAmAIAIYYCQACfAgAhhwIBAJgCACGIAgEAmAIAIYkCAQCYAgAhigIBAJgCACGLAgEAmAIAIYwCAQCYAgAhjgJAAJ4CACGPAgEAmgIAIZACQACeAgAhAwAAACgAIAEAAI8BADAnAACQAQAgAwAAACgAIAEAACwAMAIAAC0AIAEAAAAJACABAAAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgGAUAAIUEACALAACGBAAgDAAAhwQAIA0AAIgEACAOAACJBAAgwQEBAAAAAcoBAAAAggIC0QFAAAAAAdIBQAAAAAHxAQEAAAAB8gEBAAAAAfQBAAAA9AEC9QEBAAAAAfYBAQAAAAH3AQEAAAAB-AEBAAAAAfkBAQAAAAH6AQEAAAAB-wFAAAAAAfwBQAAAAAH9AQIAAAAB_gECAAAAAYACAAAAgAIDggIBAAAAAQEbAACYAQAgE8EBAQAAAAHKAQAAAIICAtEBQAAAAAHSAUAAAAAB8QEBAAAAAfIBAQAAAAH0AQAAAPQBAvUBAQAAAAH2AQEAAAAB9wEBAAAAAfgBAQAAAAH5AQEAAAAB-gEBAAAAAfsBQAAAAAH8AUAAAAAB_QECAAAAAf4BAgAAAAGAAgAAAIACA4ICAQAAAAEBGwAAmgEAMAEbAACaAQAwGAUAANADACALAADRAwAgDAAA0gMAIA0AANMDACAOAADUAwAgwQEBAIYDACHKAQAAzwOCAiLRAUAAjAMAIdIBQACMAwAh8QEBAIYDACHyAQEAiAMAIfQBAADNA_QBIvUBAQCGAwAh9gEBAIYDACH3AQEAiAMAIfgBAQCIAwAh-QEBAIgDACH6AQEAiAMAIfsBQACMAwAh_AFAAIsDACH9AQIAiQMAIf4BAgCJAwAhgAIAAM4DgAIjggIBAIYDACECAAAACQAgGwAAnQEAIBPBAQEAhgMAIcoBAADPA4ICItEBQACMAwAh0gFAAIwDACHxAQEAhgMAIfIBAQCIAwAh9AEAAM0D9AEi9QEBAIYDACH2AQEAhgMAIfcBAQCIAwAh-AEBAIgDACH5AQEAiAMAIfoBAQCIAwAh-wFAAIwDACH8AUAAiwMAIf0BAgCJAwAh_gECAIkDACGAAgAAzgOAAiOCAgEAhgMAIQIAAAAHACAbAACfAQAgAgAAAAcAIBsAAJ8BACADAAAACQAgIgAAmAEAICMAAJ0BACABAAAACQAgAQAAAAcAIAwKAADIAwAgKAAAywMAICkAAMoDACBKAADJAwAgSwAAzAMAIPIBAACAAwAg9wEAAIADACD4AQAAgAMAIPkBAACAAwAg-gEAAIADACD8AQAAgAMAIIACAACAAwAgFr4BAAC7AgAwvwEAAKYBABDAAQAAuwIAMMEBAQCYAgAhygEAAL4CggIi0QFAAJ8CACHSAUAAnwIAIfEBAQCYAgAh8gEBAJoCACH0AQAAvAL0ASL1AQEAmAIAIfYBAQCYAgAh9wEBAJoCACH4AQEAmgIAIfkBAQCaAgAh-gEBAJoCACH7AUAAnwIAIfwBQACeAgAh_QECAJsCACH-AQIAmwIAIYACAAC9AoACI4ICAQCYAgAhAwAAAAcAIAEAAKUBADAnAACmAQAgAwAAAAcAIAEAAAgAMAIAAAkAIAEAAAAcACABAAAAHAAgAwAAABoAIAEAABsAMAIAABwAIAMAAAAaACABAAAbADACAAAcACADAAAAGgAgAQAAGwAwAgAAHAAgCQMAAMcDACAGAADGAwAgwQEBAAAAAdEBQAAAAAHSAUAAAAAB5AEBAAAAAeUBAQAAAAHvAQIAAAAB8AEBAAAAAQEbAACuAQAgB8EBAQAAAAHRAUAAAAAB0gFAAAAAAeQBAQAAAAHlAQEAAAAB7wECAAAAAfABAQAAAAEBGwAAsAEAMAEbAACwAQAwCQMAAMUDACAGAADEAwAgwQEBAIYDACHRAUAAjAMAIdIBQACMAwAh5AEBAIYDACHlAQEAhgMAIe8BAgCJAwAh8AEBAIgDACECAAAAHAAgGwAAswEAIAfBAQEAhgMAIdEBQACMAwAh0gFAAIwDACHkAQEAhgMAIeUBAQCGAwAh7wECAIkDACHwAQEAiAMAIQIAAAAaACAbAAC1AQAgAgAAABoAIBsAALUBACADAAAAHAAgIgAArgEAICMAALMBACABAAAAHAAgAQAAABoAIAYKAAC_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-AQAAsQIAML8BAAD-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-AQAAsQIAML8BAAD-AQAQwAEAALECADDBAQEAmAIAIcgBAgCbAgAhygEAALIC6QEi0QFAAJ8CACHSAUAAnwIAIeQBAQCYAgAh5QEBAJgCACHmAQEAmAIAIecBAQCYAgAhBwoAAKECACAoAAC0AgAgKQAAtAIAINMBAAAA6QEC1AEAAADpAQjVAQAAAOkBCNoBAACzAukBIgcKAAChAgAgKAAAtAIAICkAALQCACDTAQAAAOkBAtQBAAAA6QEI1QEAAADpAQjaAQAAswLpASIE0wEAAADpAQLUAQAAAOkBCNUBAAAA6QEI2gEAALQC6QEiCr4BAAC1AgAwvwEAAOgBABDAAQAAtQIAMMEBAQCYAgAhygEAALYC6gEi0QFAAJ8CACHkAQEAmAIAIeUBAQCYAgAh6gFAAJ4CACHrAUAAngIAIQcKAAChAgAgKAAAuAIAICkAALgCACDTAQAAAOoBAtQBAAAA6gEI1QEAAADqAQjaAQAAtwLqASIHCgAAoQIAICgAALgCACApAAC4AgAg0wEAAADqAQLUAQAAAOoBCNUBAAAA6gEI2gEAALcC6gEiBNMBAAAA6gEC1AEAAADqAQjVAQAAAOoBCNoBAAC4AuoBIgi-AQAAuQIAML8BAADSAQAQwAEAALkCADDBAQEAmAIAIeQBAQCYAgAh7AEBAJgCACHtAQEAmgIAIe4BAgCbAgAhCr4BAAC6AgAwvwEAALwBABDAAQAAugIAMMEBAQCYAgAh0QFAAJ8CACHSAUAAnwIAIeQBAQCYAgAh5QEBAJgCACHvAQIAmwIAIfABAQCaAgAhFr4BAAC7AgAwvwEAAKYBABDAAQAAuwIAMMEBAQCYAgAhygEAAL4CggIi0QFAAJ8CACHSAUAAnwIAIfEBAQCYAgAh8gEBAJoCACH0AQAAvAL0ASL1AQEAmAIAIfYBAQCYAgAh9wEBAJoCACH4AQEAmgIAIfkBAQCaAgAh-gEBAJoCACH7AUAAnwIAIfwBQACeAgAh_QECAJsCACH-AQIAmwIAIYACAAC9AoACI4ICAQCYAgAhBwoAAKECACAoAADEAgAgKQAAxAIAINMBAAAA9AEC1AEAAAD0AQjVAQAAAPQBCNoBAADDAvQBIgcKAACkAgAgKAAAwgIAICkAAMICACDTAQAAAIACA9QBAAAAgAIJ1QEAAACAAgnaAQAAwQKAAiMHCgAAoQIAICgAAMACACApAADAAgAg0wEAAACCAgLUAQAAAIICCNUBAAAAggII2gEAAL8CggIiBwoAAKECACAoAADAAgAgKQAAwAIAINMBAAAAggIC1AEAAACCAgjVAQAAAIICCNoBAAC_AoICIgTTAQAAAIICAtQBAAAAggII1QEAAACCAgjaAQAAwAKCAiIHCgAApAIAICgAAMICACApAADCAgAg0wEAAACAAgPUAQAAAIACCdUBAAAAgAIJ2gEAAMECgAIjBNMBAAAAgAID1AEAAACAAgnVAQAAAIACCdoBAADCAoACIwcKAAChAgAgKAAAxAIAICkAAMQCACDTAQAAAPQBAtQBAAAA9AEI1QEAAAD0AQjaAQAAwwL0ASIE0wEAAAD0AQLUAQAAAPQBCNUBAAAA9AEI2gEAAMQC9AEiFr4BAADFAgAwvwEAAJABABDAAQAAxQIAMMEBAQCYAgAhygEAAMYCjgIi0AEBAJoCACHRAUAAnwIAIdIBQACfAgAh5QEBAJgCACGDAgEAmAIAIYQCAQCYAgAhhQIBAJgCACGGAkAAnwIAIYcCAQCYAgAhiAIBAJgCACGJAgEAmAIAIYoCAQCYAgAhiwIBAJgCACGMAgEAmAIAIY4CQACeAgAhjwIBAJoCACGQAkAAngIAIQcKAAChAgAgKAAAyAIAICkAAMgCACDTAQAAAI4CAtQBAAAAjgII1QEAAACOAgjaAQAAxwKOAiIHCgAAoQIAICgAAMgCACApAADIAgAg0wEAAACOAgLUAQAAAI4CCNUBAAAAjgII2gEAAMcCjgIiBNMBAAAAjgIC1AEAAACOAgjVAQAAAI4CCNoBAADIAo4CIg--AQAAyQIAML8BAAB4ABDAAQAAyQIAMMEBAQCYAgAhxAEBAJgCACHlAQEAmAIAIZECAQCYAgAhkgIBAJgCACGTAgEAmgIAIZQCAQCaAgAhlQICAMoCACGWAgEAmgIAIZcCAQCaAgAhmAIBAJoCACGZAgEAmgIAIQ0KAACkAgAgKAAApAIAICkAAKQCACBKAADMAgAgSwAApAIAINMBAgAAAAHUAQIAAAAF1QECAAAABdYBAgAAAAHXAQIAAAAB2AECAAAAAdkBAgAAAAHaAQIAywIAIQ0KAACkAgAgKAAApAIAICkAAKQCACBKAADMAgAgSwAApAIAINMBAgAAAAHUAQIAAAAF1QECAAAABdYBAgAAAAHXAQIAAAAB2AECAAAAAdkBAgAAAAHaAQIAywIAIQjTAQgAAAAB1AEIAAAABdUBCAAAAAXWAQgAAAAB1wEIAAAAAdgBCAAAAAHZAQgAAAAB2gEIAMwCACEMvgEAAM0CADC_AQAAYgAQwAEAAM0CADDBAQEAmAIAIdEBQACfAgAh0gFAAJ8CACHlAQEAmAIAIYACAAC9AoACI5oCAQCaAgAhmwIBAJoCACGcAgAAzgIAIJ0CAQCaAgAhBNMBAQAAAAWeAgEAAAABnwIBAAAABKACAQAAAAQNAwAA0wIAIL4BAADPAgAwvwEAAC8AEMABAADPAgAwwQEBANgCACHRAUAA0gIAIdIBQADSAgAh5QEBANgCACGAAgAA0QKAAiOaAgEA0AIAIZsCAQDQAgAhnAIAAM4CACCdAgEA0AIAIQvTAQEAAAAB1AEBAAAABdUBAQAAAAXWAQEAAAAB1wEBAAAAAdgBAQAAAAHZAQEAAAAB2gEBAKwCACHhAQEAAAAB4gEBAAAAAeMBAQAAAAEE0wEAAACAAgPUAQAAAIACCdUBAAAAgAIJ2gEAAMICgAIjCNMBQAAAAAHUAUAAAAAE1QFAAAAABNYBQAAAAAHXAUAAAAAB2AFAAAAAAdkBQAAAAAHaAUAAogIAIRcEAADfAgAgDgAA4wIAIA8AAOACACAQAADhAgAgEQAA4gIAIBMAAOQCACAUAADlAgAgFQAA5gIAIL4BAADdAgAwvwEAACoAEMABAADdAgAwwQEBANgCACHRAUAA0gIAIdIBQADSAgAhoQIBANgCACGiAgEA2AIAIaMCAQDQAgAhpAIBANACACGlAkAA2wIAIaYCIADeAgAhpwJAANsCACGtAgAAKgAgrgIAACoAIA2-AQAA1AIAML8BAABKABDAAQAA1AIAMMEBAQCYAgAh0QFAAJ8CACHSAUAAnwIAIaECAQCYAgAhogIBAJgCACGjAgEAmgIAIaQCAQCaAgAhpQJAAJ4CACGmAiAA1QIAIacCQACeAgAhBQoAAKECACAoAADXAgAgKQAA1wIAINMBIAAAAAHaASAA1gIAIQUKAAChAgAgKAAA1wIAICkAANcCACDTASAAAAAB2gEgANYCACEC0wEgAAAAAdoBIADXAgAhC9MBAQAAAAHUAQEAAAAE1QEBAAAABNYBAQAAAAHXAQEAAAAB2AEBAAAAAdkBAQAAAAHaAQEAsAIAIeEBAQAAAAHiAQEAAAAB4wEBAAAAARgDAADTAgAgEgAA3AIAIL4BAADZAgAwvwEAACgAEMABAADZAgAwwQEBANgCACHKAQAA2gKOAiLQAQEA0AIAIdEBQADSAgAh0gFAANICACHlAQEA2AIAIYMCAQDYAgAhhAIBANgCACGFAgEA2AIAIYYCQADSAgAhhwIBANgCACGIAgEA2AIAIYkCAQDYAgAhigIBANgCACGLAgEA2AIAIYwCAQDYAgAhjgJAANsCACGPAgEA0AIAIZACQADbAgAhBNMBAAAAjgIC1AEAAACOAgjVAQAAAI4CCNoBAADIAo4CIgjTAUAAAAAB1AFAAAAABdUBQAAAAAXWAUAAAAAB1wFAAAAAAdgBQAAAAAHZAUAAAAAB2gFAAKUCACEXBAAA3wIAIA4AAOMCACAPAADgAgAgEAAA4QIAIBEAAOICACATAADkAgAgFAAA5QIAIBUAAOYCACC-AQAA3QIAML8BAAAqABDAAQAA3QIAMMEBAQDYAgAh0QFAANICACHSAUAA0gIAIaECAQDYAgAhogIBANgCACGjAgEA0AIAIaQCAQDQAgAhpQJAANsCACGmAiAA3gIAIacCQADbAgAhrQIAACoAIK4CAAAqACAVBAAA3wIAIA4AAOMCACAPAADgAgAgEAAA4QIAIBEAAOICACATAADkAgAgFAAA5QIAIBUAAOYCACC-AQAA3QIAML8BAAAqABDAAQAA3QIAMMEBAQDYAgAh0QFAANICACHSAUAA0gIAIaECAQDYAgAhogIBANgCACGjAgEA0AIAIaQCAQDQAgAhpQJAANsCACGmAiAA3gIAIacCQADbAgAhAtMBIAAAAAHaASAA1wIAIQOoAgAAAwAgqQIAAAMAIKoCAAADACADqAIAAAcAIKkCAAAHACCqAgAABwAgA6gCAAALACCpAgAACwAgqgIAAAsAIAOoAgAAGgAgqQIAABoAIKoCAAAaACADqAIAAA8AIKkCAAAPACCqAgAADwAgGgMAANMCACASAADcAgAgvgEAANkCADC_AQAAKAAQwAEAANkCADDBAQEA2AIAIcoBAADaAo4CItABAQDQAgAh0QFAANICACHSAUAA0gIAIeUBAQDYAgAhgwIBANgCACGEAgEA2AIAIYUCAQDYAgAhhgJAANICACGHAgEA2AIAIYgCAQDYAgAhiQIBANgCACGKAgEA2AIAIYsCAQDYAgAhjAIBANgCACGOAkAA2wIAIY8CAQDQAgAhkAJAANsCACGtAgAAKAAgrgIAACgAIAOoAgAAKAAgqQIAACgAIKoCAAAoACAPAwAA0wIAIL4BAADPAgAwvwEAAC8AEMABAADPAgAwwQEBANgCACHRAUAA0gIAIdIBQADSAgAh5QEBANgCACGAAgAA0QKAAiOaAgEA0AIAIZsCAQDQAgAhnAIAAM4CACCdAgEA0AIAIa0CAAAvACCuAgAALwAgEAMAANMCACAGAADqAgAgBwAA6wIAIAkAAOwCACC-AQAA5wIAML8BAAAPABDAAQAA5wIAMMEBAQDYAgAhyAECAOgCACHKAQAA6QLpASLRAUAA0gIAIdIBQADSAgAh5AEBANgCACHlAQEA2AIAIeYBAQDYAgAh5wEBANgCACEI0wECAAAAAdQBAgAAAATVAQIAAAAE1gECAAAAAdcBAgAAAAHYAQIAAAAB2QECAAAAAdoBAgChAgAhBNMBAAAA6QEC1AEAAADpAQjVAQAAAOkBCNoBAAC0AukBIh0FAADTAgAgCwAA4QIAIAwAAPwCACANAADiAgAgDgAA4wIAIL4BAAD5AgAwvwEAAAcAEMABAAD5AgAwwQEBANgCACHKAQAA-wKCAiLRAUAA0gIAIdIBQADSAgAh8QEBANgCACHyAQEA0AIAIfQBAAD6AvQBIvUBAQDYAgAh9gEBANgCACH3AQEA0AIAIfgBAQDQAgAh-QEBANACACH6AQEA0AIAIfsBQADSAgAh_AFAANsCACH9AQIA6AIAIf4BAgDoAgAhgAIAANECgAIjggIBANgCACGtAgAABwAgrgIAAAcAIA8DAADTAgAgBgAA6gIAIAgAAPgCACC-AQAA9gIAML8BAAALABDAAQAA9gIAMMEBAQDYAgAhygEAAPcC6gEi0QFAANICACHkAQEA2AIAIeUBAQDYAgAh6gFAANsCACHrAUAA2wIAIa0CAAALACCuAgAACwAgA6gCAAARACCpAgAAEQAgqgIAABEAIALkAQEAAAAB5QEBAAAAAQwDAADTAgAgBgAA6gIAIL4BAADuAgAwvwEAABoAEMABAADuAgAwwQEBANgCACHRAUAA0gIAIdIBQADSAgAh5AEBANgCACHlAQEA2AIAIe8BAgDoAgAh8AEBANACACEJBgAA6gIAIL4BAADvAgAwvwEAABYAEMABAADvAgAwwQEBANgCACHkAQEA2AIAIewBAQDYAgAh7QEBANACACHuAQIA6AIAIRQIAAD0AgAgvgEAAPACADC_AQAAEQAQwAEAAPACADDBAQEA2AIAIcIBAQDYAgAhxAEAAPECxAEixQEBANgCACHGAQEA0AIAIccBAQDQAgAhyAECAOgCACHKAQAA8gLKASLLAQAA8wIAIMwBAQDQAgAhzQFAANsCACHOAUAA2wIAIc8BQADbAgAh0AEBANACACHRAUAA0gIAIdIBQADSAgAhBNMBAAAAxAEC1AEAAADEAQjVAQAAAMQBCNoBAACuAsQBIgTTAQAAAMoBAtQBAAAAygEI1QEAAADKAQjaAQAAqALKASIM0wGAAAAAAdYBgAAAAAHXAYAAAAAB2AGAAAAAAdkBgAAAAAHaAYAAAAAB2wEBAAAAAdwBAQAAAAHdAQEAAAAB3gGAAAAAAd8BgAAAAAHgAYAAAAABEgMAANMCACAGAADqAgAgBwAA6wIAIAkAAOwCACC-AQAA5wIAML8BAAAPABDAAQAA5wIAMMEBAQDYAgAhyAECAOgCACHKAQAA6QLpASLRAUAA0gIAIdIBQADSAgAh5AEBANgCACHlAQEA2AIAIeYBAQDYAgAh5wEBANgCACGtAgAADwAgrgIAAA8AIALkAQEAAAAB5QEBAAAAAQ0DAADTAgAgBgAA6gIAIAgAAPgCACC-AQAA9gIAML8BAAALABDAAQAA9gIAMMEBAQDYAgAhygEAAPcC6gEi0QFAANICACHkAQEA2AIAIeUBAQDYAgAh6gFAANsCACHrAUAA2wIAIQTTAQAAAOoBAtQBAAAA6gEI1QEAAADqAQjaAQAAuALqASISAwAA0wIAIAYAAOoCACAHAADrAgAgCQAA7AIAIL4BAADnAgAwvwEAAA8AEMABAADnAgAwwQEBANgCACHIAQIA6AIAIcoBAADpAukBItEBQADSAgAh0gFAANICACHkAQEA2AIAIeUBAQDYAgAh5gEBANgCACHnAQEA2AIAIa0CAAAPACCuAgAADwAgGwUAANMCACALAADhAgAgDAAA_AIAIA0AAOICACAOAADjAgAgvgEAAPkCADC_AQAABwAQwAEAAPkCADDBAQEA2AIAIcoBAAD7AoICItEBQADSAgAh0gFAANICACHxAQEA2AIAIfIBAQDQAgAh9AEAAPoC9AEi9QEBANgCACH2AQEA2AIAIfcBAQDQAgAh-AEBANACACH5AQEA0AIAIfoBAQDQAgAh-wFAANICACH8AUAA2wIAIf0BAgDoAgAh_gECAOgCACGAAgAA0QKAAiOCAgEA2AIAIQTTAQAAAPQBAtQBAAAA9AEI1QEAAAD0AQjaAQAAxAL0ASIE0wEAAACCAgLUAQAAAIICCNUBAAAAggII2gEAAMACggIiA6gCAAAWACCpAgAAFgAgqgIAABYAIALEAQEAAAABkgIBAAAAARADAADTAgAgvgEAAP4CADC_AQAAAwAQwAEAAP4CADDBAQEA2AIAIcQBAQDYAgAh5QEBANgCACGRAgEA2AIAIZICAQDYAgAhkwIBANACACGUAgEA0AIAIZUCAgD_AgAhlgIBANACACGXAgEA0AIAIZgCAQDQAgAhmQIBANACACEI0wECAAAAAdQBAgAAAAXVAQIAAAAF1gECAAAAAdcBAgAAAAHYAQIAAAAB2QECAAAAAdoBAgCkAgAhAAAAAAAAAbICAQAAAAEBsgIAAADEAQIBsgIBAAAAAQWyAgIAAAABuQICAAAAAboCAgAAAAG7AgIAAAABvAICAAAAAQGyAgAAAMoBAgGyAkAAAAABAbICQAAAAAEFIgAA2AUAICMAANsFACCvAgAA2QUAILACAADaBQAgtQIAAB8AIAMiAADYBQAgrwIAANkFACC1AgAAHwAgAAAAAAABsgIAAADpAQIFIgAAzAUAICMAANYFACCvAgAAzQUAILACAADVBQAgtQIAAAkAIAUiAADKBQAgIwAA0wUAIK8CAADLBQAgsAIAANIFACC1AgAAAQAgBSIAAMgFACAjAADQBQAgrwIAAMkFACCwAgAAzwUAILUCAAANACALIgAAmQMAMCMAAJ4DADCvAgAAmgMAMLACAACbAwAwsQIAAJwDACCyAgAAnQMAMLMCAACdAwAwtAIAAJ0DADC1AgAAnQMAMLYCAACfAwAwtwIAAKADADAPwQEBAAAAAcQBAAAAxAECxQEBAAAAAcYBAQAAAAHHAQEAAAAByAECAAAAAcoBAAAAygECywGAAAAAAcwBAQAAAAHNAUAAAAABzgFAAAAAAc8BQAAAAAHQAQEAAAAB0QFAAAAAAdIBQAAAAAECAAAAEwAgIgAApAMAIAMAAAATACAiAACkAwAgIwAAowMAIAEbAADOBQAwFAgAAPQCACC-AQAA8AIAML8BAAARABDAAQAA8AIAMMEBAQAAAAHCAQEA2AIAIcQBAADxAsQBIsUBAQAAAAHGAQEA0AIAIccBAQDQAgAhyAECAOgCACHKAQAA8gLKASLLAQAA8wIAIMwBAQDQAgAhzQFAANsCACHOAUAA2wIAIc8BQADbAgAh0AEBANACACHRAUAA0gIAIdIBQADSAgAhAgAAABMAIBsAAKMDACACAAAAoQMAIBsAAKIDACATvgEAAKADADC_AQAAoQMAEMABAACgAwAwwQEBANgCACHCAQEA2AIAIcQBAADxAsQBIsUBAQDYAgAhxgEBANACACHHAQEA0AIAIcgBAgDoAgAhygEAAPICygEiywEAAPMCACDMAQEA0AIAIc0BQADbAgAhzgFAANsCACHPAUAA2wIAIdABAQDQAgAh0QFAANICACHSAUAA0gIAIRO-AQAAoAMAML8BAAChAwAQwAEAAKADADDBAQEA2AIAIcIBAQDYAgAhxAEAAPECxAEixQEBANgCACHGAQEA0AIAIccBAQDQAgAhyAECAOgCACHKAQAA8gLKASLLAQAA8wIAIMwBAQDQAgAhzQFAANsCACHOAUAA2wIAIc8BQADbAgAh0AEBANACACHRAUAA0gIAIdIBQADSAgAhD8EBAQCGAwAhxAEAAIcDxAEixQEBAIYDACHGAQEAiAMAIccBAQCIAwAhyAECAIkDACHKAQAAigPKASLLAYAAAAABzAEBAIgDACHNAUAAiwMAIc4BQACLAwAhzwFAAIsDACHQAQEAiAMAIdEBQACMAwAh0gFAAIwDACEPwQEBAIYDACHEAQAAhwPEASLFAQEAhgMAIcYBAQCIAwAhxwEBAIgDACHIAQIAiQMAIcoBAACKA8oBIssBgAAAAAHMAQEAiAMAIc0BQACLAwAhzgFAAIsDACHPAUAAiwMAIdABAQCIAwAh0QFAAIwDACHSAUAAjAMAIQ_BAQEAAAABxAEAAADEAQLFAQEAAAABxgEBAAAAAccBAQAAAAHIAQIAAAABygEAAADKAQLLAYAAAAABzAEBAAAAAc0BQAAAAAHOAUAAAAABzwFAAAAAAdABAQAAAAHRAUAAAAAB0gFAAAAAAQMiAADMBQAgrwIAAM0FACC1AgAACQAgAyIAAMoFACCvAgAAywUAILUCAAABACADIgAAyAUAIK8CAADJBQAgtQIAAA0AIAQiAACZAwAwrwIAAJoDADCxAgAAnAMAILUCAACdAwAwAAAAAbICAAAA6gECBSIAAMAFACAjAADGBQAgrwIAAMEFACCwAgAAxQUAILUCAAAJACAFIgAAvgUAICMAAMMFACCvAgAAvwUAILACAADCBQAgtQIAAAEAIAciAACwAwAgIwAAswMAIK8CAACxAwAgsAIAALIDACCzAgAADwAgtAIAAA8AILUCAAAfACALAwAApgMAIAYAAKUDACAJAACoAwAgwQEBAAAAAcgBAgAAAAHKAQAAAOkBAtEBQAAAAAHSAUAAAAAB5AEBAAAAAeUBAQAAAAHnAQEAAAABAgAAAB8AICIAALADACADAAAADwAgIgAAsAMAICMAALQDACANAAAADwAgAwAAlgMAIAYAAJUDACAJAACYAwAgGwAAtAMAIMEBAQCGAwAhyAECAIkDACHKAQAAlAPpASLRAUAAjAMAIdIBQACMAwAh5AEBAIYDACHlAQEAhgMAIecBAQCGAwAhCwMAAJYDACAGAACVAwAgCQAAmAMAIMEBAQCGAwAhyAECAIkDACHKAQAAlAPpASLRAUAAjAMAIdIBQACMAwAh5AEBAIYDACHlAQEAhgMAIecBAQCGAwAhAyIAAMAFACCvAgAAwQUAILUCAAAJACADIgAAvgUAIK8CAAC_BQAgtQIAAAEAIAMiAACwAwAgrwIAALEDACC1AgAAHwAgAAAAAAAFIgAAuQUAICMAALwFACCvAgAAugUAILACAAC7BQAgtQIAAAkAIAMiAAC5BQAgrwIAALoFACC1AgAACQAgAAAAAAAFIgAAsQUAICMAALcFACCvAgAAsgUAILACAAC2BQAgtQIAAAkAIAUiAACvBQAgIwAAtAUAIK8CAACwBQAgsAIAALMFACC1AgAAAQAgAyIAALEFACCvAgAAsgUAILUCAAAJACADIgAArwUAIK8CAACwBQAgtQIAAAEAIAAAAAAAAbICAAAA9AECAbICAAAAgAIDAbICAAAAggICBSIAAKYFACAjAACtBQAgrwIAAKcFACCwAgAArAUAILUCAAABACALIgAA-QMAMCMAAP4DADCvAgAA-gMAMLACAAD7AwAwsQIAAPwDACCyAgAA_QMAMLMCAAD9AwAwtAIAAP0DADC1AgAA_QMAMLYCAAD_AwAwtwIAAIAEADALIgAA7QMAMCMAAPIDADCvAgAA7gMAMLACAADvAwAwsQIAAPADACCyAgAA8QMAMLMCAADxAwAwtAIAAPEDADC1AgAA8QMAMLYCAADzAwAwtwIAAPQDADALIgAA4QMAMCMAAOYDADCvAgAA4gMAMLACAADjAwAwsQIAAOQDACCyAgAA5QMAMLMCAADlAwAwtAIAAOUDADC1AgAA5QMAMLYCAADnAwAwtwIAAOgDADALIgAA1QMAMCMAANoDADCvAgAA1gMAMLACAADXAwAwsQIAANgDACCyAgAA2QMAMLMCAADZAwAwtAIAANkDADC1AgAA2QMAMLYCAADbAwAwtwIAANwDADALAwAApgMAIAcAAKcDACAJAACoAwAgwQEBAAAAAcgBAgAAAAHKAQAAAOkBAtEBQAAAAAHSAUAAAAAB5QEBAAAAAeYBAQAAAAHnAQEAAAABAgAAAB8AICIAAOADACADAAAAHwAgIgAA4AMAICMAAN8DACABGwAAqwUAMBADAADTAgAgBgAA6gIAIAcAAOsCACAJAADsAgAgvgEAAOcCADC_AQAADwAQwAEAAOcCADDBAQEAAAAByAECAOgCACHKAQAA6QLpASLRAUAA0gIAIdIBQADSAgAh5AEBANgCACHlAQEA2AIAIeYBAQAAAAHnAQEA2AIAIQIAAAAfACAbAADfAwAgAgAAAN0DACAbAADeAwAgDL4BAADcAwAwvwEAAN0DABDAAQAA3AMAMMEBAQDYAgAhyAECAOgCACHKAQAA6QLpASLRAUAA0gIAIdIBQADSAgAh5AEBANgCACHlAQEA2AIAIeYBAQDYAgAh5wEBANgCACEMvgEAANwDADC_AQAA3QMAEMABAADcAwAwwQEBANgCACHIAQIA6AIAIcoBAADpAukBItEBQADSAgAh0gFAANICACHkAQEA2AIAIeUBAQDYAgAh5gEBANgCACHnAQEA2AIAIQjBAQEAhgMAIcgBAgCJAwAhygEAAJQD6QEi0QFAAIwDACHSAUAAjAMAIeUBAQCGAwAh5gEBAIYDACHnAQEAhgMAIQsDAACWAwAgBwAAlwMAIAkAAJgDACDBAQEAhgMAIcgBAgCJAwAhygEAAJQD6QEi0QFAAIwDACHSAUAAjAMAIeUBAQCGAwAh5gEBAIYDACHnAQEAhgMAIQsDAACmAwAgBwAApwMAIAkAAKgDACDBAQEAAAAByAECAAAAAcoBAAAA6QEC0QFAAAAAAdIBQAAAAAHlAQEAAAAB5gEBAAAAAecBAQAAAAEHAwAAxwMAIMEBAQAAAAHRAUAAAAAB0gFAAAAAAeUBAQAAAAHvAQIAAAAB8AEBAAAAAQIAAAAcACAiAADsAwAgAwAAABwAICIAAOwDACAjAADrAwAgARsAAKoFADANAwAA0wIAIAYAAOoCACC-AQAA7gIAML8BAAAaABDAAQAA7gIAMMEBAQAAAAHRAUAA0gIAIdIBQADSAgAh5AEBANgCACHlAQEA2AIAIe8BAgDoAgAh8AEBANACACGrAgAA7QIAIAIAAAAcACAbAADrAwAgAgAAAOkDACAbAADqAwAgCr4BAADoAwAwvwEAAOkDABDAAQAA6AMAMMEBAQDYAgAh0QFAANICACHSAUAA0gIAIeQBAQDYAgAh5QEBANgCACHvAQIA6AIAIfABAQDQAgAhCr4BAADoAwAwvwEAAOkDABDAAQAA6AMAMMEBAQDYAgAh0QFAANICACHSAUAA0gIAIeQBAQDYAgAh5QEBANgCACHvAQIA6AIAIfABAQDQAgAhBsEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIeUBAQCGAwAh7wECAIkDACHwAQEAiAMAIQcDAADFAwAgwQEBAIYDACHRAUAAjAMAIdIBQACMAwAh5QEBAIYDACHvAQIAiQMAIfABAQCIAwAhBwMAAMcDACDBAQEAAAAB0QFAAAAAAdIBQAAAAAHlAQEAAAAB7wECAAAAAfABAQAAAAEEwQEBAAAAAewBAQAAAAHtAQEAAAAB7gECAAAAAQIAAAAYACAiAAD4AwAgAwAAABgAICIAAPgDACAjAAD3AwAgARsAAKkFADAJBgAA6gIAIL4BAADvAgAwvwEAABYAEMABAADvAgAwwQEBAAAAAeQBAQDYAgAh7AEBANgCACHtAQEA0AIAIe4BAgDoAgAhAgAAABgAIBsAAPcDACACAAAA9QMAIBsAAPYDACAIvgEAAPQDADC_AQAA9QMAEMABAAD0AwAwwQEBANgCACHkAQEA2AIAIewBAQDYAgAh7QEBANACACHuAQIA6AIAIQi-AQAA9AMAML8BAAD1AwAQwAEAAPQDADDBAQEA2AIAIeQBAQDYAgAh7AEBANgCACHtAQEA0AIAIe4BAgDoAgAhBMEBAQCGAwAh7AEBAIYDACHtAQEAiAMAIe4BAgCJAwAhBMEBAQCGAwAh7AEBAIYDACHtAQEAiAMAIe4BAgCJAwAhBMEBAQAAAAHsAQEAAAAB7QEBAAAAAe4BAgAAAAEIAwAAtgMAIAgAALcDACDBAQEAAAABygEAAADqAQLRAUAAAAAB5QEBAAAAAeoBQAAAAAHrAUAAAAABAgAAAA0AICIAAIQEACADAAAADQAgIgAAhAQAICMAAIMEACABGwAAqAUAMA4DAADTAgAgBgAA6gIAIAgAAPgCACC-AQAA9gIAML8BAAALABDAAQAA9gIAMMEBAQAAAAHKAQAA9wLqASLRAUAA0gIAIeQBAQDYAgAh5QEBANgCACHqAUAA2wIAIesBQADbAgAhqwIAAPUCACACAAAADQAgGwAAgwQAIAIAAACBBAAgGwAAggQAIAq-AQAAgAQAML8BAACBBAAQwAEAAIAEADDBAQEA2AIAIcoBAAD3AuoBItEBQADSAgAh5AEBANgCACHlAQEA2AIAIeoBQADbAgAh6wFAANsCACEKvgEAAIAEADC_AQAAgQQAEMABAACABAAwwQEBANgCACHKAQAA9wLqASLRAUAA0gIAIeQBAQDYAgAh5QEBANgCACHqAUAA2wIAIesBQADbAgAhBsEBAQCGAwAhygEAAKwD6gEi0QFAAIwDACHlAQEAhgMAIeoBQACLAwAh6wFAAIsDACEIAwAArgMAIAgAAK8DACDBAQEAhgMAIcoBAACsA-oBItEBQACMAwAh5QEBAIYDACHqAUAAiwMAIesBQACLAwAhCAMAALYDACAIAAC3AwAgwQEBAAAAAcoBAAAA6gEC0QFAAAAAAeUBAQAAAAHqAUAAAAAB6wFAAAAAAQMiAACmBQAgrwIAAKcFACC1AgAAAQAgBCIAAPkDADCvAgAA-gMAMLECAAD8AwAgtQIAAP0DADAEIgAA7QMAMK8CAADuAwAwsQIAAPADACC1AgAA8QMAMAQiAADhAwAwrwIAAOIDADCxAgAA5AMAILUCAADlAwAwBCIAANUDADCvAgAA1gMAMLECAADYAwAgtQIAANkDADAAAAABsgIAAACOAgIFIgAAngUAICMAAKQFACCvAgAAnwUAILACAACjBQAgtQIAAAEAIAciAACcBQAgIwAAoQUAIK8CAACdBQAgsAIAAKAFACCzAgAAKgAgtAIAACoAILUCAAABACADIgAAngUAIK8CAACfBQAgtQIAAAEAIAMiAACcBQAgrwIAAJ0FACC1AgAAAQAgAAAAAAAFsgICAAAAAbkCAgAAAAG6AgIAAAABuwICAAAAAbwCAgAAAAEFIgAAlwUAICMAAJoFACCvAgAAmAUAILACAACZBQAgtQIAAAEAIAMiAACXBQAgrwIAAJgFACC1AgAAAQAgAAAAArICAQAAAAS4AgEAAAAFBSIAAJIFACAjAACVBQAgrwIAAJMFACCwAgAAlAUAILUCAAABACABsgIBAAAABAMiAACSBQAgrwIAAJMFACC1AgAAAQAgDAQAAP8EACAOAACDBQAgDwAAgAUAIBAAAIEFACARAACCBQAgEwAAhAUAIBQAAIUFACAVAACGBQAgowIAAIADACCkAgAAgAMAIKUCAACAAwAgpwIAAIADACAAAAABsgIgAAAAAQsiAADrBAAwIwAA8AQAMK8CAADsBAAwsAIAAO0EADCxAgAA7gQAILICAADvBAAwswIAAO8EADC0AgAA7wQAMLUCAADvBAAwtgIAAPEEADC3AgAA8gQAMAsiAADfBAAwIwAA5AQAMK8CAADgBAAwsAIAAOEEADCxAgAA4gQAILICAADjBAAwswIAAOMEADC0AgAA4wQAMLUCAADjBAAwtgIAAOUEADC3AgAA5gQAMAsiAADWBAAwIwAA2gQAMK8CAADXBAAwsAIAANgEADCxAgAA2QQAILICAAD9AwAwswIAAP0DADC0AgAA_QMAMLUCAAD9AwAwtgIAANsEADC3AgAAgAQAMAsiAADNBAAwIwAA0QQAMK8CAADOBAAwsAIAAM8EADCxAgAA0AQAILICAADlAwAwswIAAOUDADC0AgAA5QMAMLUCAADlAwAwtgIAANIEADC3AgAA6AMAMAsiAADEBAAwIwAAyAQAMK8CAADFBAAwsAIAAMYEADCxAgAAxwQAILICAADZAwAwswIAANkDADC0AgAA2QMAMLUCAADZAwAwtgIAAMkEADC3AgAA3AMAMAciAAC_BAAgIwAAwgQAIK8CAADABAAgsAIAAMEEACCzAgAAKAAgtAIAACgAILUCAAAtACALIgAAswQAMCMAALgEADCvAgAAtAQAMLACAAC1BAAwsQIAALYEACCyAgAAtwQAMLMCAAC3BAAwtAIAALcEADC1AgAAtwQAMLYCAAC5BAAwtwIAALoEADAHIgAArgQAICMAALEEACCvAgAArwQAILACAACwBAAgswIAAC8AILQCAAAvACC1AgAATQAgCMEBAQAAAAHRAUAAAAAB0gFAAAAAAYACAAAAgAIDmgIBAAAAAZsCAQAAAAGcAgAAnwQAIJ0CAQAAAAECAAAATQAgIgAArgQAIAMAAAAvACAiAACuBAAgIwAAsgQAIAoAAAAvACAbAACyBAAgwQEBAIYDACHRAUAAjAMAIdIBQACMAwAhgAIAAM4DgAIjmgIBAIgDACGbAgEAiAMAIZwCAACdBAAgnQIBAIgDACEIwQEBAIYDACHRAUAAjAMAIdIBQACMAwAhgAIAAM4DgAIjmgIBAIgDACGbAgEAiAMAIZwCAACdBAAgnQIBAIgDACETAwAAkAQAIMEBAQAAAAHKAQAAAI4CAtABAQAAAAHRAUAAAAAB0gFAAAAAAeUBAQAAAAGDAgEAAAABhAIBAAAAAYUCAQAAAAGGAkAAAAABhwIBAAAAAYgCAQAAAAGJAgEAAAABigIBAAAAAYsCAQAAAAGMAgEAAAABjgJAAAAAAZACQAAAAAECAAAALQAgIgAAvgQAIAMAAAAtACAiAAC-BAAgIwAAvQQAIAEbAACRBQAwGAMAANMCACASAADcAgAgvgEAANkCADC_AQAAKAAQwAEAANkCADDBAQEAAAABygEAANoCjgIi0AEBANACACHRAUAA0gIAIdIBQADSAgAh5QEBAAAAAYMCAQDYAgAhhAIBANgCACGFAgEAAAABhgJAANICACGHAgEA2AIAIYgCAQDYAgAhiQIBANgCACGKAgEA2AIAIYsCAQDYAgAhjAIBANgCACGOAkAA2wIAIY8CAQDQAgAhkAJAANsCACECAAAALQAgGwAAvQQAIAIAAAC7BAAgGwAAvAQAIBa-AQAAugQAML8BAAC7BAAQwAEAALoEADDBAQEA2AIAIcoBAADaAo4CItABAQDQAgAh0QFAANICACHSAUAA0gIAIeUBAQDYAgAhgwIBANgCACGEAgEA2AIAIYUCAQDYAgAhhgJAANICACGHAgEA2AIAIYgCAQDYAgAhiQIBANgCACGKAgEA2AIAIYsCAQDYAgAhjAIBANgCACGOAkAA2wIAIY8CAQDQAgAhkAJAANsCACEWvgEAALoEADC_AQAAuwQAEMABAAC6BAAwwQEBANgCACHKAQAA2gKOAiLQAQEA0AIAIdEBQADSAgAh0gFAANICACHlAQEA2AIAIYMCAQDYAgAhhAIBANgCACGFAgEA2AIAIYYCQADSAgAhhwIBANgCACGIAgEA2AIAIYkCAQDYAgAhigIBANgCACGLAgEA2AIAIYwCAQDYAgAhjgJAANsCACGPAgEA0AIAIZACQADbAgAhEsEBAQCGAwAhygEAAI0EjgIi0AEBAIgDACHRAUAAjAMAIdIBQACMAwAh5QEBAIYDACGDAgEAhgMAIYQCAQCGAwAhhQIBAIYDACGGAkAAjAMAIYcCAQCGAwAhiAIBAIYDACGJAgEAhgMAIYoCAQCGAwAhiwIBAIYDACGMAgEAhgMAIY4CQACLAwAhkAJAAIsDACETAwAAjgQAIMEBAQCGAwAhygEAAI0EjgIi0AEBAIgDACHRAUAAjAMAIdIBQACMAwAh5QEBAIYDACGDAgEAhgMAIYQCAQCGAwAhhQIBAIYDACGGAkAAjAMAIYcCAQCGAwAhiAIBAIYDACGJAgEAhgMAIYoCAQCGAwAhiwIBAIYDACGMAgEAhgMAIY4CQACLAwAhkAJAAIsDACETAwAAkAQAIMEBAQAAAAHKAQAAAI4CAtABAQAAAAHRAUAAAAAB0gFAAAAAAeUBAQAAAAGDAgEAAAABhAIBAAAAAYUCAQAAAAGGAkAAAAABhwIBAAAAAYgCAQAAAAGJAgEAAAABigIBAAAAAYsCAQAAAAGMAgEAAAABjgJAAAAAAZACQAAAAAETEgAAkQQAIMEBAQAAAAHKAQAAAI4CAtABAQAAAAHRAUAAAAAB0gFAAAAAAYMCAQAAAAGEAgEAAAABhQIBAAAAAYYCQAAAAAGHAgEAAAABiAIBAAAAAYkCAQAAAAGKAgEAAAABiwIBAAAAAYwCAQAAAAGOAkAAAAABjwIBAAAAAZACQAAAAAECAAAALQAgIgAAvwQAIAMAAAAoACAiAAC_BAAgIwAAwwQAIBUAAAAoACASAACPBAAgGwAAwwQAIMEBAQCGAwAhygEAAI0EjgIi0AEBAIgDACHRAUAAjAMAIdIBQACMAwAhgwIBAIYDACGEAgEAhgMAIYUCAQCGAwAhhgJAAIwDACGHAgEAhgMAIYgCAQCGAwAhiQIBAIYDACGKAgEAhgMAIYsCAQCGAwAhjAIBAIYDACGOAkAAiwMAIY8CAQCIAwAhkAJAAIsDACETEgAAjwQAIMEBAQCGAwAhygEAAI0EjgIi0AEBAIgDACHRAUAAjAMAIdIBQACMAwAhgwIBAIYDACGEAgEAhgMAIYUCAQCGAwAhhgJAAIwDACGHAgEAhgMAIYgCAQCGAwAhiQIBAIYDACGKAgEAhgMAIYsCAQCGAwAhjAIBAIYDACGOAkAAiwMAIY8CAQCIAwAhkAJAAIsDACELBgAApQMAIAcAAKcDACAJAACoAwAgwQEBAAAAAcgBAgAAAAHKAQAAAOkBAtEBQAAAAAHSAUAAAAAB5AEBAAAAAeYBAQAAAAHnAQEAAAABAgAAAB8AICIAAMwEACADAAAAHwAgIgAAzAQAICMAAMsEACABGwAAkAUAMAIAAAAfACAbAADLBAAgAgAAAN0DACAbAADKBAAgCMEBAQCGAwAhyAECAIkDACHKAQAAlAPpASLRAUAAjAMAIdIBQACMAwAh5AEBAIYDACHmAQEAhgMAIecBAQCGAwAhCwYAAJUDACAHAACXAwAgCQAAmAMAIMEBAQCGAwAhyAECAIkDACHKAQAAlAPpASLRAUAAjAMAIdIBQACMAwAh5AEBAIYDACHmAQEAhgMAIecBAQCGAwAhCwYAAKUDACAHAACnAwAgCQAAqAMAIMEBAQAAAAHIAQIAAAABygEAAADpAQLRAUAAAAAB0gFAAAAAAeQBAQAAAAHmAQEAAAAB5wEBAAAAAQcGAADGAwAgwQEBAAAAAdEBQAAAAAHSAUAAAAAB5AEBAAAAAe8BAgAAAAHwAQEAAAABAgAAABwAICIAANUEACADAAAAHAAgIgAA1QQAICMAANQEACABGwAAjwUAMAIAAAAcACAbAADUBAAgAgAAAOkDACAbAADTBAAgBsEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIeQBAQCGAwAh7wECAIkDACHwAQEAiAMAIQcGAADEAwAgwQEBAIYDACHRAUAAjAMAIdIBQACMAwAh5AEBAIYDACHvAQIAiQMAIfABAQCIAwAhBwYAAMYDACDBAQEAAAAB0QFAAAAAAdIBQAAAAAHkAQEAAAAB7wECAAAAAfABAQAAAAEIBgAAtQMAIAgAALcDACDBAQEAAAABygEAAADqAQLRAUAAAAAB5AEBAAAAAeoBQAAAAAHrAUAAAAABAgAAAA0AICIAAN4EACADAAAADQAgIgAA3gQAICMAAN0EACABGwAAjgUAMAIAAAANACAbAADdBAAgAgAAAIEEACAbAADcBAAgBsEBAQCGAwAhygEAAKwD6gEi0QFAAIwDACHkAQEAhgMAIeoBQACLAwAh6wFAAIsDACEIBgAArQMAIAgAAK8DACDBAQEAhgMAIcoBAACsA-oBItEBQACMAwAh5AEBAIYDACHqAUAAiwMAIesBQACLAwAhCAYAALUDACAIAAC3AwAgwQEBAAAAAcoBAAAA6gEC0QFAAAAAAeQBAQAAAAHqAUAAAAAB6wFAAAAAARYLAACGBAAgDAAAhwQAIA0AAIgEACAOAACJBAAgwQEBAAAAAcoBAAAAggIC0QFAAAAAAdIBQAAAAAHxAQEAAAAB8gEBAAAAAfQBAAAA9AEC9QEBAAAAAfYBAQAAAAH3AQEAAAAB-AEBAAAAAfkBAQAAAAH6AQEAAAAB-wFAAAAAAfwBQAAAAAH9AQIAAAAB_gECAAAAAYACAAAAgAIDAgAAAAkAICIAAOoEACADAAAACQAgIgAA6gQAICMAAOkEACABGwAAjQUAMBsFAADTAgAgCwAA4QIAIAwAAPwCACANAADiAgAgDgAA4wIAIL4BAAD5AgAwvwEAAAcAEMABAAD5AgAwwQEBAAAAAcoBAAD7AoICItEBQADSAgAh0gFAANICACHxAQEA2AIAIfIBAQDQAgAh9AEAAPoC9AEi9QEBANgCACH2AQEA2AIAIfcBAQDQAgAh-AEBANACACH5AQEA0AIAIfoBAQDQAgAh-wFAANICACH8AUAA2wIAIf0BAgDoAgAh_gECAOgCACGAAgAA0QKAAiOCAgEA2AIAIQIAAAAJACAbAADpBAAgAgAAAOcEACAbAADoBAAgFr4BAADmBAAwvwEAAOcEABDAAQAA5gQAMMEBAQDYAgAhygEAAPsCggIi0QFAANICACHSAUAA0gIAIfEBAQDYAgAh8gEBANACACH0AQAA-gL0ASL1AQEA2AIAIfYBAQDYAgAh9wEBANACACH4AQEA0AIAIfkBAQDQAgAh-gEBANACACH7AUAA0gIAIfwBQADbAgAh_QECAOgCACH-AQIA6AIAIYACAADRAoACI4ICAQDYAgAhFr4BAADmBAAwvwEAAOcEABDAAQAA5gQAMMEBAQDYAgAhygEAAPsCggIi0QFAANICACHSAUAA0gIAIfEBAQDYAgAh8gEBANACACH0AQAA-gL0ASL1AQEA2AIAIfYBAQDYAgAh9wEBANACACH4AQEA0AIAIfkBAQDQAgAh-gEBANACACH7AUAA0gIAIfwBQADbAgAh_QECAOgCACH-AQIA6AIAIYACAADRAoACI4ICAQDYAgAhEsEBAQCGAwAhygEAAM8DggIi0QFAAIwDACHSAUAAjAMAIfEBAQCGAwAh8gEBAIgDACH0AQAAzQP0ASL1AQEAhgMAIfYBAQCGAwAh9wEBAIgDACH4AQEAiAMAIfkBAQCIAwAh-gEBAIgDACH7AUAAjAMAIfwBQACLAwAh_QECAIkDACH-AQIAiQMAIYACAADOA4ACIxYLAADRAwAgDAAA0gMAIA0AANMDACAOAADUAwAgwQEBAIYDACHKAQAAzwOCAiLRAUAAjAMAIdIBQACMAwAh8QEBAIYDACHyAQEAiAMAIfQBAADNA_QBIvUBAQCGAwAh9gEBAIYDACH3AQEAiAMAIfgBAQCIAwAh-QEBAIgDACH6AQEAiAMAIfsBQACMAwAh_AFAAIsDACH9AQIAiQMAIf4BAgCJAwAhgAIAAM4DgAIjFgsAAIYEACAMAACHBAAgDQAAiAQAIA4AAIkEACDBAQEAAAABygEAAACCAgLRAUAAAAAB0gFAAAAAAfEBAQAAAAHyAQEAAAAB9AEAAAD0AQL1AQEAAAAB9gEBAAAAAfcBAQAAAAH4AQEAAAAB-QEBAAAAAfoBAQAAAAH7AUAAAAAB_AFAAAAAAf0BAgAAAAH-AQIAAAABgAIAAACAAgMLwQEBAAAAAcQBAQAAAAGRAgEAAAABkgIBAAAAAZMCAQAAAAGUAgEAAAABlQICAAAAAZYCAQAAAAGXAgEAAAABmAIBAAAAAZkCAQAAAAECAAAABQAgIgAA9gQAIAMAAAAFACAiAAD2BAAgIwAA9QQAIAEbAACMBQAwEQMAANMCACC-AQAA_gIAML8BAAADABDAAQAA_gIAMMEBAQAAAAHEAQEA2AIAIeUBAQDYAgAhkQIBANgCACGSAgEA2AIAIZMCAQDQAgAhlAIBANACACGVAgIA_wIAIZYCAQDQAgAhlwIBANACACGYAgEA0AIAIZkCAQDQAgAhrAIAAP0CACACAAAABQAgGwAA9QQAIAIAAADzBAAgGwAA9AQAIA--AQAA8gQAML8BAADzBAAQwAEAAPIEADDBAQEA2AIAIcQBAQDYAgAh5QEBANgCACGRAgEA2AIAIZICAQDYAgAhkwIBANACACGUAgEA0AIAIZUCAgD_AgAhlgIBANACACGXAgEA0AIAIZgCAQDQAgAhmQIBANACACEPvgEAAPIEADC_AQAA8wQAEMABAADyBAAwwQEBANgCACHEAQEA2AIAIeUBAQDYAgAhkQIBANgCACGSAgEA2AIAIZMCAQDQAgAhlAIBANACACGVAgIA_wIAIZYCAQDQAgAhlwIBANACACGYAgEA0AIAIZkCAQDQAgAhC8EBAQCGAwAhxAEBAIYDACGRAgEAhgMAIZICAQCGAwAhkwIBAIgDACGUAgEAiAMAIZUCAgCXBAAhlgIBAIgDACGXAgEAiAMAIZgCAQCIAwAhmQIBAIgDACELwQEBAIYDACHEAQEAhgMAIZECAQCGAwAhkgIBAIYDACGTAgEAiAMAIZQCAQCIAwAhlQICAJcEACGWAgEAiAMAIZcCAQCIAwAhmAIBAIgDACGZAgEAiAMAIQvBAQEAAAABxAEBAAAAAZECAQAAAAGSAgEAAAABkwIBAAAAAZQCAQAAAAGVAgIAAAABlgIBAAAAAZcCAQAAAAGYAgEAAAABmQIBAAAAAQQiAADrBAAwrwIAAOwEADCxAgAA7gQAILUCAADvBAAwBCIAAN8EADCvAgAA4AQAMLECAADiBAAgtQIAAOMEADAEIgAA1gQAMK8CAADXBAAwsQIAANkEACC1AgAA_QMAMAQiAADNBAAwrwIAAM4EADCxAgAA0AQAILUCAADlAwAwBCIAAMQEADCvAgAAxQQAMLECAADHBAAgtQIAANkDADADIgAAvwQAIK8CAADABAAgtQIAAC0AIAQiAACzBAAwrwIAALQEADCxAgAAtgQAILUCAAC3BAAwAyIAAK4EACCvAgAArwQAILUCAABNACAAAAAAAAYDAAChBAAgEgAAoQQAINABAACAAwAgjgIAAIADACCPAgAAgAMAIJACAACAAwAgAAUDAAChBAAggAIAAIADACCaAgAAgAMAIJsCAACAAwAgnQIAAIADACAMBQAAoQQAIAsAAIEFACAMAACLBQAgDQAAggUAIA4AAIMFACDyAQAAgAMAIPcBAACAAwAg-AEAAIADACD5AQAAgAMAIPoBAACAAwAg_AEAAIADACCAAgAAgAMAIAUDAAChBAAgBgAAhwUAIAgAAIoFACDqAQAAgAMAIOsBAACAAwAgAAQDAAChBAAgBgAAhwUAIAcAAIgFACAJAACJBQAgAAvBAQEAAAABxAEBAAAAAZECAQAAAAGSAgEAAAABkwIBAAAAAZQCAQAAAAGVAgIAAAABlgIBAAAAAZcCAQAAAAGYAgEAAAABmQIBAAAAARLBAQEAAAABygEAAACCAgLRAUAAAAAB0gFAAAAAAfEBAQAAAAHyAQEAAAAB9AEAAAD0AQL1AQEAAAAB9gEBAAAAAfcBAQAAAAH4AQEAAAAB-QEBAAAAAfoBAQAAAAH7AUAAAAAB_AFAAAAAAf0BAgAAAAH-AQIAAAABgAIAAACAAgMGwQEBAAAAAcoBAAAA6gEC0QFAAAAAAeQBAQAAAAHqAUAAAAAB6wFAAAAAAQbBAQEAAAAB0QFAAAAAAdIBQAAAAAHkAQEAAAAB7wECAAAAAfABAQAAAAEIwQEBAAAAAcgBAgAAAAHKAQAAAOkBAtEBQAAAAAHSAUAAAAAB5AEBAAAAAeYBAQAAAAHnAQEAAAABEsEBAQAAAAHKAQAAAI4CAtABAQAAAAHRAUAAAAAB0gFAAAAAAeUBAQAAAAGDAgEAAAABhAIBAAAAAYUCAQAAAAGGAkAAAAABhwIBAAAAAYgCAQAAAAGJAgEAAAABigIBAAAAAYsCAQAAAAGMAgEAAAABjgJAAAAAAZACQAAAAAERBAAA9wQAIA4AAPsEACAPAAD4BAAgEAAA-QQAIBEAAPoEACATAAD8BAAgFAAA_QQAIMEBAQAAAAHRAUAAAAAB0gFAAAAAAaECAQAAAAGiAgEAAAABowIBAAAAAaQCAQAAAAGlAkAAAAABpgIgAAAAAacCQAAAAAECAAAAAQAgIgAAkgUAIAMAAAAqACAiAACSBQAgIwAAlgUAIBMAAAAqACAEAACmBAAgDgAAqgQAIA8AAKcEACAQAACoBAAgEQAAqQQAIBMAAKsEACAUAACsBAAgGwAAlgUAIMEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIaECAQCGAwAhogIBAIYDACGjAgEAiAMAIaQCAQCIAwAhpQJAAIsDACGmAiAApQQAIacCQACLAwAhEQQAAKYEACAOAACqBAAgDwAApwQAIBAAAKgEACARAACpBAAgEwAAqwQAIBQAAKwEACDBAQEAhgMAIdEBQACMAwAh0gFAAIwDACGhAgEAhgMAIaICAQCGAwAhowIBAIgDACGkAgEAiAMAIaUCQACLAwAhpgIgAKUEACGnAkAAiwMAIREOAAD7BAAgDwAA-AQAIBAAAPkEACARAAD6BAAgEwAA_AQAIBQAAP0EACAVAAD-BAAgwQEBAAAAAdEBQAAAAAHSAUAAAAABoQIBAAAAAaICAQAAAAGjAgEAAAABpAIBAAAAAaUCQAAAAAGmAiAAAAABpwJAAAAAAQIAAAABACAiAACXBQAgAwAAACoAICIAAJcFACAjAACbBQAgEwAAACoAIA4AAKoEACAPAACnBAAgEAAAqAQAIBEAAKkEACATAACrBAAgFAAArAQAIBUAAK0EACAbAACbBQAgwQEBAIYDACHRAUAAjAMAIdIBQACMAwAhoQIBAIYDACGiAgEAhgMAIaMCAQCIAwAhpAIBAIgDACGlAkAAiwMAIaYCIAClBAAhpwJAAIsDACERDgAAqgQAIA8AAKcEACAQAACoBAAgEQAAqQQAIBMAAKsEACAUAACsBAAgFQAArQQAIMEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIaECAQCGAwAhogIBAIYDACGjAgEAiAMAIaQCAQCIAwAhpQJAAIsDACGmAiAApQQAIacCQACLAwAhEQQAAPcEACAOAAD7BAAgDwAA-AQAIBAAAPkEACARAAD6BAAgEwAA_AQAIBUAAP4EACDBAQEAAAAB0QFAAAAAAdIBQAAAAAGhAgEAAAABogIBAAAAAaMCAQAAAAGkAgEAAAABpQJAAAAAAaYCIAAAAAGnAkAAAAABAgAAAAEAICIAAJwFACARBAAA9wQAIA4AAPsEACAPAAD4BAAgEAAA-QQAIBEAAPoEACAUAAD9BAAgFQAA_gQAIMEBAQAAAAHRAUAAAAAB0gFAAAAAAaECAQAAAAGiAgEAAAABowIBAAAAAaQCAQAAAAGlAkAAAAABpgIgAAAAAacCQAAAAAECAAAAAQAgIgAAngUAIAMAAAAqACAiAACcBQAgIwAAogUAIBMAAAAqACAEAACmBAAgDgAAqgQAIA8AAKcEACAQAACoBAAgEQAAqQQAIBMAAKsEACAVAACtBAAgGwAAogUAIMEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIaECAQCGAwAhogIBAIYDACGjAgEAiAMAIaQCAQCIAwAhpQJAAIsDACGmAiAApQQAIacCQACLAwAhEQQAAKYEACAOAACqBAAgDwAApwQAIBAAAKgEACARAACpBAAgEwAAqwQAIBUAAK0EACDBAQEAhgMAIdEBQACMAwAh0gFAAIwDACGhAgEAhgMAIaICAQCGAwAhowIBAIgDACGkAgEAiAMAIaUCQACLAwAhpgIgAKUEACGnAkAAiwMAIQMAAAAqACAiAACeBQAgIwAApQUAIBMAAAAqACAEAACmBAAgDgAAqgQAIA8AAKcEACAQAACoBAAgEQAAqQQAIBQAAKwEACAVAACtBAAgGwAApQUAIMEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIaECAQCGAwAhogIBAIYDACGjAgEAiAMAIaQCAQCIAwAhpQJAAIsDACGmAiAApQQAIacCQACLAwAhEQQAAKYEACAOAACqBAAgDwAApwQAIBAAAKgEACARAACpBAAgFAAArAQAIBUAAK0EACDBAQEAhgMAIdEBQACMAwAh0gFAAIwDACGhAgEAhgMAIaICAQCGAwAhowIBAIgDACGkAgEAiAMAIaUCQACLAwAhpgIgAKUEACGnAkAAiwMAIREEAAD3BAAgDgAA-wQAIBAAAPkEACARAAD6BAAgEwAA_AQAIBQAAP0EACAVAAD-BAAgwQEBAAAAAdEBQAAAAAHSAUAAAAABoQIBAAAAAaICAQAAAAGjAgEAAAABpAIBAAAAAaUCQAAAAAGmAiAAAAABpwJAAAAAAQIAAAABACAiAACmBQAgBsEBAQAAAAHKAQAAAOoBAtEBQAAAAAHlAQEAAAAB6gFAAAAAAesBQAAAAAEEwQEBAAAAAewBAQAAAAHtAQEAAAAB7gECAAAAAQbBAQEAAAAB0QFAAAAAAdIBQAAAAAHlAQEAAAAB7wECAAAAAfABAQAAAAEIwQEBAAAAAcgBAgAAAAHKAQAAAOkBAtEBQAAAAAHSAUAAAAAB5QEBAAAAAeYBAQAAAAHnAQEAAAABAwAAACoAICIAAKYFACAjAACuBQAgEwAAACoAIAQAAKYEACAOAACqBAAgEAAAqAQAIBEAAKkEACATAACrBAAgFAAArAQAIBUAAK0EACAbAACuBQAgwQEBAIYDACHRAUAAjAMAIdIBQACMAwAhoQIBAIYDACGiAgEAhgMAIaMCAQCIAwAhpAIBAIgDACGlAkAAiwMAIaYCIAClBAAhpwJAAIsDACERBAAApgQAIA4AAKoEACAQAACoBAAgEQAAqQQAIBMAAKsEACAUAACsBAAgFQAArQQAIMEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIaECAQCGAwAhogIBAIYDACGjAgEAiAMAIaQCAQCIAwAhpQJAAIsDACGmAiAApQQAIacCQACLAwAhEQQAAPcEACAOAAD7BAAgDwAA-AQAIBAAAPkEACATAAD8BAAgFAAA_QQAIBUAAP4EACDBAQEAAAAB0QFAAAAAAdIBQAAAAAGhAgEAAAABogIBAAAAAaMCAQAAAAGkAgEAAAABpQJAAAAAAaYCIAAAAAGnAkAAAAABAgAAAAEAICIAAK8FACAXBQAAhQQAIAsAAIYEACAMAACHBAAgDgAAiQQAIMEBAQAAAAHKAQAAAIICAtEBQAAAAAHSAUAAAAAB8QEBAAAAAfIBAQAAAAH0AQAAAPQBAvUBAQAAAAH2AQEAAAAB9wEBAAAAAfgBAQAAAAH5AQEAAAAB-gEBAAAAAfsBQAAAAAH8AUAAAAAB_QECAAAAAf4BAgAAAAGAAgAAAIACA4ICAQAAAAECAAAACQAgIgAAsQUAIAMAAAAqACAiAACvBQAgIwAAtQUAIBMAAAAqACAEAACmBAAgDgAAqgQAIA8AAKcEACAQAACoBAAgEwAAqwQAIBQAAKwEACAVAACtBAAgGwAAtQUAIMEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIaECAQCGAwAhogIBAIYDACGjAgEAiAMAIaQCAQCIAwAhpQJAAIsDACGmAiAApQQAIacCQACLAwAhEQQAAKYEACAOAACqBAAgDwAApwQAIBAAAKgEACATAACrBAAgFAAArAQAIBUAAK0EACDBAQEAhgMAIdEBQACMAwAh0gFAAIwDACGhAgEAhgMAIaICAQCGAwAhowIBAIgDACGkAgEAiAMAIaUCQACLAwAhpgIgAKUEACGnAkAAiwMAIQMAAAAHACAiAACxBQAgIwAAuAUAIBkAAAAHACAFAADQAwAgCwAA0QMAIAwAANIDACAOAADUAwAgGwAAuAUAIMEBAQCGAwAhygEAAM8DggIi0QFAAIwDACHSAUAAjAMAIfEBAQCGAwAh8gEBAIgDACH0AQAAzQP0ASL1AQEAhgMAIfYBAQCGAwAh9wEBAIgDACH4AQEAiAMAIfkBAQCIAwAh-gEBAIgDACH7AUAAjAMAIfwBQACLAwAh_QECAIkDACH-AQIAiQMAIYACAADOA4ACI4ICAQCGAwAhFwUAANADACALAADRAwAgDAAA0gMAIA4AANQDACDBAQEAhgMAIcoBAADPA4ICItEBQACMAwAh0gFAAIwDACHxAQEAhgMAIfIBAQCIAwAh9AEAAM0D9AEi9QEBAIYDACH2AQEAhgMAIfcBAQCIAwAh-AEBAIgDACH5AQEAiAMAIfoBAQCIAwAh-wFAAIwDACH8AUAAiwMAIf0BAgCJAwAh_gECAIkDACGAAgAAzgOAAiOCAgEAhgMAIRcFAACFBAAgCwAAhgQAIA0AAIgEACAOAACJBAAgwQEBAAAAAcoBAAAAggIC0QFAAAAAAdIBQAAAAAHxAQEAAAAB8gEBAAAAAfQBAAAA9AEC9QEBAAAAAfYBAQAAAAH3AQEAAAAB-AEBAAAAAfkBAQAAAAH6AQEAAAAB-wFAAAAAAfwBQAAAAAH9AQIAAAAB_gECAAAAAYACAAAAgAIDggIBAAAAAQIAAAAJACAiAAC5BQAgAwAAAAcAICIAALkFACAjAAC9BQAgGQAAAAcAIAUAANADACALAADRAwAgDQAA0wMAIA4AANQDACAbAAC9BQAgwQEBAIYDACHKAQAAzwOCAiLRAUAAjAMAIdIBQACMAwAh8QEBAIYDACHyAQEAiAMAIfQBAADNA_QBIvUBAQCGAwAh9gEBAIYDACH3AQEAiAMAIfgBAQCIAwAh-QEBAIgDACH6AQEAiAMAIfsBQACMAwAh_AFAAIsDACH9AQIAiQMAIf4BAgCJAwAhgAIAAM4DgAIjggIBAIYDACEXBQAA0AMAIAsAANEDACANAADTAwAgDgAA1AMAIMEBAQCGAwAhygEAAM8DggIi0QFAAIwDACHSAUAAjAMAIfEBAQCGAwAh8gEBAIgDACH0AQAAzQP0ASL1AQEAhgMAIfYBAQCGAwAh9wEBAIgDACH4AQEAiAMAIfkBAQCIAwAh-gEBAIgDACH7AUAAjAMAIfwBQACLAwAh_QECAIkDACH-AQIAiQMAIYACAADOA4ACI4ICAQCGAwAhEQQAAPcEACAOAAD7BAAgDwAA-AQAIBEAAPoEACATAAD8BAAgFAAA_QQAIBUAAP4EACDBAQEAAAAB0QFAAAAAAdIBQAAAAAGhAgEAAAABogIBAAAAAaMCAQAAAAGkAgEAAAABpQJAAAAAAaYCIAAAAAGnAkAAAAABAgAAAAEAICIAAL4FACAXBQAAhQQAIAwAAIcEACANAACIBAAgDgAAiQQAIMEBAQAAAAHKAQAAAIICAtEBQAAAAAHSAUAAAAAB8QEBAAAAAfIBAQAAAAH0AQAAAPQBAvUBAQAAAAH2AQEAAAAB9wEBAAAAAfgBAQAAAAH5AQEAAAAB-gEBAAAAAfsBQAAAAAH8AUAAAAAB_QECAAAAAf4BAgAAAAGAAgAAAIACA4ICAQAAAAECAAAACQAgIgAAwAUAIAMAAAAqACAiAAC-BQAgIwAAxAUAIBMAAAAqACAEAACmBAAgDgAAqgQAIA8AAKcEACARAACpBAAgEwAAqwQAIBQAAKwEACAVAACtBAAgGwAAxAUAIMEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIaECAQCGAwAhogIBAIYDACGjAgEAiAMAIaQCAQCIAwAhpQJAAIsDACGmAiAApQQAIacCQACLAwAhEQQAAKYEACAOAACqBAAgDwAApwQAIBEAAKkEACATAACrBAAgFAAArAQAIBUAAK0EACDBAQEAhgMAIdEBQACMAwAh0gFAAIwDACGhAgEAhgMAIaICAQCGAwAhowIBAIgDACGkAgEAiAMAIaUCQACLAwAhpgIgAKUEACGnAkAAiwMAIQMAAAAHACAiAADABQAgIwAAxwUAIBkAAAAHACAFAADQAwAgDAAA0gMAIA0AANMDACAOAADUAwAgGwAAxwUAIMEBAQCGAwAhygEAAM8DggIi0QFAAIwDACHSAUAAjAMAIfEBAQCGAwAh8gEBAIgDACH0AQAAzQP0ASL1AQEAhgMAIfYBAQCGAwAh9wEBAIgDACH4AQEAiAMAIfkBAQCIAwAh-gEBAIgDACH7AUAAjAMAIfwBQACLAwAh_QECAIkDACH-AQIAiQMAIYACAADOA4ACI4ICAQCGAwAhFwUAANADACAMAADSAwAgDQAA0wMAIA4AANQDACDBAQEAhgMAIcoBAADPA4ICItEBQACMAwAh0gFAAIwDACHxAQEAhgMAIfIBAQCIAwAh9AEAAM0D9AEi9QEBAIYDACH2AQEAhgMAIfcBAQCIAwAh-AEBAIgDACH5AQEAiAMAIfoBAQCIAwAh-wFAAIwDACH8AUAAiwMAIf0BAgCJAwAh_gECAIkDACGAAgAAzgOAAiOCAgEAhgMAIQkDAAC2AwAgBgAAtQMAIMEBAQAAAAHKAQAAAOoBAtEBQAAAAAHkAQEAAAAB5QEBAAAAAeoBQAAAAAHrAUAAAAABAgAAAA0AICIAAMgFACARBAAA9wQAIA8AAPgEACAQAAD5BAAgEQAA-gQAIBMAAPwEACAUAAD9BAAgFQAA_gQAIMEBAQAAAAHRAUAAAAAB0gFAAAAAAaECAQAAAAGiAgEAAAABowIBAAAAAaQCAQAAAAGlAkAAAAABpgIgAAAAAacCQAAAAAECAAAAAQAgIgAAygUAIBcFAACFBAAgCwAAhgQAIAwAAIcEACANAACIBAAgwQEBAAAAAcoBAAAAggIC0QFAAAAAAdIBQAAAAAHxAQEAAAAB8gEBAAAAAfQBAAAA9AEC9QEBAAAAAfYBAQAAAAH3AQEAAAAB-AEBAAAAAfkBAQAAAAH6AQEAAAAB-wFAAAAAAfwBQAAAAAH9AQIAAAAB_gECAAAAAYACAAAAgAIDggIBAAAAAQIAAAAJACAiAADMBQAgD8EBAQAAAAHEAQAAAMQBAsUBAQAAAAHGAQEAAAABxwEBAAAAAcgBAgAAAAHKAQAAAMoBAssBgAAAAAHMAQEAAAABzQFAAAAAAc4BQAAAAAHPAUAAAAAB0AEBAAAAAdEBQAAAAAHSAUAAAAABAwAAAAsAICIAAMgFACAjAADRBQAgCwAAAAsAIAMAAK4DACAGAACtAwAgGwAA0QUAIMEBAQCGAwAhygEAAKwD6gEi0QFAAIwDACHkAQEAhgMAIeUBAQCGAwAh6gFAAIsDACHrAUAAiwMAIQkDAACuAwAgBgAArQMAIMEBAQCGAwAhygEAAKwD6gEi0QFAAIwDACHkAQEAhgMAIeUBAQCGAwAh6gFAAIsDACHrAUAAiwMAIQMAAAAqACAiAADKBQAgIwAA1AUAIBMAAAAqACAEAACmBAAgDwAApwQAIBAAAKgEACARAACpBAAgEwAAqwQAIBQAAKwEACAVAACtBAAgGwAA1AUAIMEBAQCGAwAh0QFAAIwDACHSAUAAjAMAIaECAQCGAwAhogIBAIYDACGjAgEAiAMAIaQCAQCIAwAhpQJAAIsDACGmAiAApQQAIacCQACLAwAhEQQAAKYEACAPAACnBAAgEAAAqAQAIBEAAKkEACATAACrBAAgFAAArAQAIBUAAK0EACDBAQEAhgMAIdEBQACMAwAh0gFAAIwDACGhAgEAhgMAIaICAQCGAwAhowIBAIgDACGkAgEAiAMAIaUCQACLAwAhpgIgAKUEACGnAkAAiwMAIQMAAAAHACAiAADMBQAgIwAA1wUAIBkAAAAHACAFAADQAwAgCwAA0QMAIAwAANIDACANAADTAwAgGwAA1wUAIMEBAQCGAwAhygEAAM8DggIi0QFAAIwDACHSAUAAjAMAIfEBAQCGAwAh8gEBAIgDACH0AQAAzQP0ASL1AQEAhgMAIfYBAQCGAwAh9wEBAIgDACH4AQEAiAMAIfkBAQCIAwAh-gEBAIgDACH7AUAAjAMAIfwBQACLAwAh_QECAIkDACH-AQIAiQMAIYACAADOA4ACI4ICAQCGAwAhFwUAANADACALAADRAwAgDAAA0gMAIA0AANMDACDBAQEAhgMAIcoBAADPA4ICItEBQACMAwAh0gFAAIwDACHxAQEAhgMAIfIBAQCIAwAh9AEAAM0D9AEi9QEBAIYDACH2AQEAhgMAIfcBAQCIAwAh-AEBAIgDACH5AQEAiAMAIfoBAQCIAwAh-wFAAIwDACH8AUAAiwMAIf0BAgCJAwAh_gECAIkDACGAAgAAzgOAAiOCAgEAhgMAIQwDAACmAwAgBgAApQMAIAcAAKcDACDBAQEAAAAByAECAAAAAcoBAAAA6QEC0QFAAAAAAdIBQAAAAAHkAQEAAAAB5QEBAAAAAeYBAQAAAAHnAQEAAAABAgAAAB8AICIAANgFACADAAAADwAgIgAA2AUAICMAANwFACAOAAAADwAgAwAAlgMAIAYAAJUDACAHAACXAwAgGwAA3AUAIMEBAQCGAwAhyAECAIkDACHKAQAAlAPpASLRAUAAjAMAIdIBQACMAwAh5AEBAIYDACHlAQEAhgMAIeYBAQCGAwAh5wEBAIYDACEMAwAAlgMAIAYAAJUDACAHAACXAwAgwQEBAIYDACHIAQIAiQMAIcoBAACUA-kBItEBQACMAwAh0gFAAIwDACHkAQEAhgMAIeUBAQCGAwAh5gEBAIYDACHnAQEAhgMAIQkEBgIKAA0OJwUPCgMQJQQRJgkTKQsULgsVMAwBAwABBgUAAQoACgsOBAwZCA0dCQ4gBQMDAAEGAAMIEAUFAwABBgADBwAECRQGCgAHAQgABQEJFQABBgADAgMAAQYAAwQLIQAMIgANIwAOJAACAwABEisBAQMAAQYEMQAONQAPMgAQMwARNAAUNgAAAAADCgASKAATKQAUAAAAAwoAEigAEykAFAEDAAEBAwABAwoAGSgAGikAGwAAAAMKABkoABopABsBAwABAQMAAQUKACAoACMpACRKACFLACIAAAAAAAUKACAoACMpACRKACFLACICAwABEoUBAQIDAAESiwEBAwoAKSgAKikAKwAAAAMKACkoACopACsBBQABAQUAAQUKADAoADMpADRKADFLADIAAAAAAAUKADAoADMpADRKADFLADICAwABBgADAgMAAQYAAwUKADkoADwpAD1KADpLADsAAAAAAAUKADkoADwpAD1KADpLADsBBgADAQYAAwUKAEIoAEUpAEZKAENLAEQAAAAAAAUKAEIoAEUpAEZKAENLAEQCAwABBgADAgMAAQYAAwMKAEsoAEwpAE0AAAADCgBLKABMKQBNAwMAAQYAAwcABAMDAAEGAAMHAAQFCgBSKABVKQBWSgBTSwBUAAAAAAAFCgBSKABVKQBWSgBTSwBUAQgABQEIAAUFCgBbKABeKQBfSgBcSwBdAAAAAAAFCgBbKABeKQBfSgBcSwBdFgIBFzcBGDkBGToBGjsBHD0BHT8OHkAPH0IBIEQOIUUQJEYBJUcBJkgOKksRK0wVLE4MLU8MLlEML1IMMFMMMVUMMlcOM1gWNFoMNVwONl0XN14MOF8MOWAOOmMYO2QcPGUCPWYCPmcCP2gCQGkCQWsCQm0OQ24dRHACRXIORnMeR3QCSHUCSXYOTHkfTXolTnsLT3wLUH0LUX4LUn8LU4EBC1SDAQ5VhAEmVocBC1eJAQ5YigEnWYwBC1qNAQtbjgEOXJEBKF2SASxekwEDX5QBA2CVAQNhlgEDYpcBA2OZAQNkmwEOZZwBLWaeAQNnoAEOaKEBLmmiAQNqowEDa6QBDmynAS9tqAE1bqkBCW-qAQlwqwEJcawBCXKtAQlzrwEJdLEBDnWyATZ2tAEJd7YBDni3ATd5uAEJerkBCXu6AQ58vQE4fb4BPn6_AQh_wAEIgAHBAQiBAcIBCIIBwwEIgwHFAQiEAccBDoUByAE_hgHKAQiHAcwBDogBzQFAiQHOAQiKAc8BCIsB0AEOjAHTAUGNAdQBR44B1QEEjwHWAQSQAdcBBJEB2AEEkgHZAQSTAdsBBJQB3QEOlQHeAUiWAeABBJcB4gEOmAHjAUmZAeQBBJoB5QEEmwHmAQ6cAekBSp0B6gFOngHrAQWfAewBBaAB7QEFoQHuAQWiAe8BBaMB8QEFpAHzAQ6lAfQBT6YB9gEFpwH4AQ6oAfkBUKkB-gEFqgH7AQWrAfwBDqwB_wFRrQGAAleuAYECBq8BggIGsAGDAgaxAYQCBrIBhQIGswGHAga0AYkCDrUBigJYtgGMAga3AY4CDrgBjwJZuQGQAga6AZECBrsBkgIOvAGVAlq9AZYCYA" } async function decodeBase64AsWasm(wasmBase64: string): Promise { @@ -267,6 +267,26 @@ export interface PrismaClient< * ``` */ get tripParticipant(): Prisma.TripParticipantDelegate; + + /** + * `prisma.booking`: Exposes CRUD operations for the **Booking** model. + * Example usage: + * ```ts + * // Fetch zero or more Bookings + * const bookings = await prisma.booking.findMany() + * ``` + */ + get booking(): Prisma.BookingDelegate; + + /** + * `prisma.payment`: Exposes CRUD operations for the **Payment** model. + * Example usage: + * ```ts + * // Fetch zero or more Payments + * const payments = await prisma.payment.findMany() + * ``` + */ + get payment(): Prisma.PaymentDelegate; } export function getPrismaClientClass(): PrismaClientConstructor { diff --git a/app/generated/prisma/internal/prismaNamespace.ts b/app/generated/prisma/internal/prismaNamespace.ts index 97160bc..f1d30d5 100644 --- a/app/generated/prisma/internal/prismaNamespace.ts +++ b/app/generated/prisma/internal/prismaNamespace.ts @@ -391,7 +391,9 @@ export const ModelName = { Trip: 'Trip', TripReview: 'TripReview', TripImage: 'TripImage', - TripParticipant: 'TripParticipant' + TripParticipant: 'TripParticipant', + Booking: 'Booking', + Payment: 'Payment' } as const export type ModelName = (typeof ModelName)[keyof typeof ModelName] @@ -407,7 +409,7 @@ export type TypeMap + fields: Prisma.BookingFieldRefs + operations: { + findUnique: { + args: Prisma.BookingFindUniqueArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.BookingFindUniqueOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findFirst: { + args: Prisma.BookingFindFirstArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.BookingFindFirstOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findMany: { + args: Prisma.BookingFindManyArgs + result: runtime.Types.Utils.PayloadToResult[] + } + create: { + args: Prisma.BookingCreateArgs + result: runtime.Types.Utils.PayloadToResult + } + createMany: { + args: Prisma.BookingCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.BookingCreateManyAndReturnArgs + result: runtime.Types.Utils.PayloadToResult[] + } + delete: { + args: Prisma.BookingDeleteArgs + result: runtime.Types.Utils.PayloadToResult + } + update: { + args: Prisma.BookingUpdateArgs + result: runtime.Types.Utils.PayloadToResult + } + deleteMany: { + args: Prisma.BookingDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.BookingUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.BookingUpdateManyAndReturnArgs + result: runtime.Types.Utils.PayloadToResult[] + } + upsert: { + args: Prisma.BookingUpsertArgs + result: runtime.Types.Utils.PayloadToResult + } + aggregate: { + args: Prisma.BookingAggregateArgs + result: runtime.Types.Utils.Optional + } + groupBy: { + args: Prisma.BookingGroupByArgs + result: runtime.Types.Utils.Optional[] + } + count: { + args: Prisma.BookingCountArgs + result: runtime.Types.Utils.Optional | number + } + } + } + Payment: { + payload: Prisma.$PaymentPayload + fields: Prisma.PaymentFieldRefs + operations: { + findUnique: { + args: Prisma.PaymentFindUniqueArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.PaymentFindUniqueOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findFirst: { + args: Prisma.PaymentFindFirstArgs + result: runtime.Types.Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.PaymentFindFirstOrThrowArgs + result: runtime.Types.Utils.PayloadToResult + } + findMany: { + args: Prisma.PaymentFindManyArgs + result: runtime.Types.Utils.PayloadToResult[] + } + create: { + args: Prisma.PaymentCreateArgs + result: runtime.Types.Utils.PayloadToResult + } + createMany: { + args: Prisma.PaymentCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.PaymentCreateManyAndReturnArgs + result: runtime.Types.Utils.PayloadToResult[] + } + delete: { + args: Prisma.PaymentDeleteArgs + result: runtime.Types.Utils.PayloadToResult + } + update: { + args: Prisma.PaymentUpdateArgs + result: runtime.Types.Utils.PayloadToResult + } + deleteMany: { + args: Prisma.PaymentDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.PaymentUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.PaymentUpdateManyAndReturnArgs + result: runtime.Types.Utils.PayloadToResult[] + } + upsert: { + args: Prisma.PaymentUpsertArgs + result: runtime.Types.Utils.PayloadToResult + } + aggregate: { + args: Prisma.PaymentAggregateArgs + result: runtime.Types.Utils.Optional + } + groupBy: { + args: Prisma.PaymentGroupByArgs + result: runtime.Types.Utils.Optional[] + } + count: { + args: Prisma.PaymentCountArgs + result: runtime.Types.Utils.Optional | number + } + } + } } } & { other: { @@ -1178,6 +1328,43 @@ export const TripParticipantScalarFieldEnum = { export type TripParticipantScalarFieldEnum = (typeof TripParticipantScalarFieldEnum)[keyof typeof TripParticipantScalarFieldEnum] +export const BookingScalarFieldEnum = { + id: 'id', + tripId: 'tripId', + userId: 'userId', + participantId: 'participantId', + amount: 'amount', + currency: 'currency', + status: 'status', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +} as const + +export type BookingScalarFieldEnum = (typeof BookingScalarFieldEnum)[keyof typeof BookingScalarFieldEnum] + + +export const PaymentScalarFieldEnum = { + id: 'id', + bookingId: 'bookingId', + provider: 'provider', + externalOrderId: 'externalOrderId', + externalTxId: 'externalTxId', + method: 'method', + amount: 'amount', + status: 'status', + rawCallback: 'rawCallback', + snapToken: 'snapToken', + expiresAt: 'expiresAt', + paidAt: 'paidAt', + failedAt: 'failedAt', + rejectionReason: 'rejectionReason', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +} as const + +export type PaymentScalarFieldEnum = (typeof PaymentScalarFieldEnum)[keyof typeof PaymentScalarFieldEnum] + + export const SortOrder = { asc: 'asc', desc: 'desc' @@ -1186,6 +1373,14 @@ export const SortOrder = { export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder] +export const NullableJsonNullValueInput = { + DbNull: DbNull, + JsonNull: JsonNull +} as const + +export type NullableJsonNullValueInput = (typeof NullableJsonNullValueInput)[keyof typeof NullableJsonNullValueInput] + + export const QueryMode = { default: 'default', insensitive: 'insensitive' @@ -1202,6 +1397,15 @@ export const NullsOrder = { export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] +export const JsonNullValueFilter = { + DbNull: DbNull, + JsonNull: JsonNull, + AnyNull: AnyNull +} as const + +export type JsonNullValueFilter = (typeof JsonNullValueFilter)[keyof typeof JsonNullValueFilter] + + /** * Field references @@ -1327,6 +1531,62 @@ export type ListEnumParticipantStatusFieldRefInput<$PrismaModel> = FieldRefInput +/** + * Reference to a field of type 'BookingStatus' + */ +export type EnumBookingStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'BookingStatus'> + + + +/** + * Reference to a field of type 'BookingStatus[]' + */ +export type ListEnumBookingStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'BookingStatus[]'> + + + +/** + * Reference to a field of type 'PaymentProvider' + */ +export type EnumPaymentProviderFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'PaymentProvider'> + + + +/** + * Reference to a field of type 'PaymentProvider[]' + */ +export type ListEnumPaymentProviderFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'PaymentProvider[]'> + + + +/** + * Reference to a field of type 'PaymentStatus' + */ +export type EnumPaymentStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'PaymentStatus'> + + + +/** + * Reference to a field of type 'PaymentStatus[]' + */ +export type ListEnumPaymentStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'PaymentStatus[]'> + + + +/** + * Reference to a field of type 'Json' + */ +export type JsonFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Json'> + + + +/** + * Reference to a field of type 'QueryMode' + */ +export type EnumQueryModeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'QueryMode'> + + + /** * Reference to a field of type 'Float' */ @@ -1458,6 +1718,8 @@ export type GlobalOmitConfig = { tripReview?: Prisma.TripReviewOmit tripImage?: Prisma.TripImageOmit tripParticipant?: Prisma.TripParticipantOmit + booking?: Prisma.BookingOmit + payment?: Prisma.PaymentOmit } /* Types for Logging */ diff --git a/app/generated/prisma/internal/prismaNamespaceBrowser.ts b/app/generated/prisma/internal/prismaNamespaceBrowser.ts index 5a3f6fa..6fe902d 100644 --- a/app/generated/prisma/internal/prismaNamespaceBrowser.ts +++ b/app/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -58,7 +58,9 @@ export const ModelName = { Trip: 'Trip', TripReview: 'TripReview', TripImage: 'TripImage', - TripParticipant: 'TripParticipant' + TripParticipant: 'TripParticipant', + Booking: 'Booking', + Payment: 'Payment' } as const export type ModelName = (typeof ModelName)[keyof typeof ModelName] @@ -213,6 +215,43 @@ export const TripParticipantScalarFieldEnum = { export type TripParticipantScalarFieldEnum = (typeof TripParticipantScalarFieldEnum)[keyof typeof TripParticipantScalarFieldEnum] +export const BookingScalarFieldEnum = { + id: 'id', + tripId: 'tripId', + userId: 'userId', + participantId: 'participantId', + amount: 'amount', + currency: 'currency', + status: 'status', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +} as const + +export type BookingScalarFieldEnum = (typeof BookingScalarFieldEnum)[keyof typeof BookingScalarFieldEnum] + + +export const PaymentScalarFieldEnum = { + id: 'id', + bookingId: 'bookingId', + provider: 'provider', + externalOrderId: 'externalOrderId', + externalTxId: 'externalTxId', + method: 'method', + amount: 'amount', + status: 'status', + rawCallback: 'rawCallback', + snapToken: 'snapToken', + expiresAt: 'expiresAt', + paidAt: 'paidAt', + failedAt: 'failedAt', + rejectionReason: 'rejectionReason', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +} as const + +export type PaymentScalarFieldEnum = (typeof PaymentScalarFieldEnum)[keyof typeof PaymentScalarFieldEnum] + + export const SortOrder = { asc: 'asc', desc: 'desc' @@ -221,6 +260,14 @@ export const SortOrder = { export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder] +export const NullableJsonNullValueInput = { + DbNull: DbNull, + JsonNull: JsonNull +} as const + +export type NullableJsonNullValueInput = (typeof NullableJsonNullValueInput)[keyof typeof NullableJsonNullValueInput] + + export const QueryMode = { default: 'default', insensitive: 'insensitive' @@ -236,3 +283,12 @@ export const NullsOrder = { export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] + +export const JsonNullValueFilter = { + DbNull: DbNull, + JsonNull: JsonNull, + AnyNull: AnyNull +} as const + +export type JsonNullValueFilter = (typeof JsonNullValueFilter)[keyof typeof JsonNullValueFilter] + diff --git a/app/generated/prisma/models.ts b/app/generated/prisma/models.ts index b631513..80f8a58 100644 --- a/app/generated/prisma/models.ts +++ b/app/generated/prisma/models.ts @@ -16,4 +16,6 @@ export type * from './models/Trip' export type * from './models/TripReview' export type * from './models/TripImage' export type * from './models/TripParticipant' +export type * from './models/Booking' +export type * from './models/Payment' export type * from './commonInputTypes' \ No newline at end of file diff --git a/app/generated/prisma/models/Booking.ts b/app/generated/prisma/models/Booking.ts new file mode 100644 index 0000000..09aa8fb --- /dev/null +++ b/app/generated/prisma/models/Booking.ts @@ -0,0 +1,1950 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file exports the `Booking` model and its related types. + * + * 🟢 You can import this file directly. + */ +import type * as runtime from "@prisma/client/runtime/client" +import type * as $Enums from "../enums" +import type * as Prisma from "../internal/prismaNamespace" + +/** + * Model Booking + * Booking 1-1 ke TripParticipant. Lifecycle ikut peserta: + * - join → Booking PENDING (menunggu approve organizer) + * - organizer confirm → AWAITING_PAY (paid trip) atau PAID (free trip) + * - peserta + organizer rampungkan pembayaran → PAID + * - cancel/reject → CANCELLED + * `amount` adalah snapshot harga saat booking dibuat — protect dari perubahan trip.price. + */ +export type BookingModel = runtime.Types.Result.DefaultSelection + +export type AggregateBooking = { + _count: BookingCountAggregateOutputType | null + _avg: BookingAvgAggregateOutputType | null + _sum: BookingSumAggregateOutputType | null + _min: BookingMinAggregateOutputType | null + _max: BookingMaxAggregateOutputType | null +} + +export type BookingAvgAggregateOutputType = { + amount: number | null +} + +export type BookingSumAggregateOutputType = { + amount: number | null +} + +export type BookingMinAggregateOutputType = { + id: string | null + tripId: string | null + userId: string | null + participantId: string | null + amount: number | null + currency: string | null + status: $Enums.BookingStatus | null + createdAt: Date | null + updatedAt: Date | null +} + +export type BookingMaxAggregateOutputType = { + id: string | null + tripId: string | null + userId: string | null + participantId: string | null + amount: number | null + currency: string | null + status: $Enums.BookingStatus | null + createdAt: Date | null + updatedAt: Date | null +} + +export type BookingCountAggregateOutputType = { + id: number + tripId: number + userId: number + participantId: number + amount: number + currency: number + status: number + createdAt: number + updatedAt: number + _all: number +} + + +export type BookingAvgAggregateInputType = { + amount?: true +} + +export type BookingSumAggregateInputType = { + amount?: true +} + +export type BookingMinAggregateInputType = { + id?: true + tripId?: true + userId?: true + participantId?: true + amount?: true + currency?: true + status?: true + createdAt?: true + updatedAt?: true +} + +export type BookingMaxAggregateInputType = { + id?: true + tripId?: true + userId?: true + participantId?: true + amount?: true + currency?: true + status?: true + createdAt?: true + updatedAt?: true +} + +export type BookingCountAggregateInputType = { + id?: true + tripId?: true + userId?: true + participantId?: true + amount?: true + currency?: true + status?: true + createdAt?: true + updatedAt?: true + _all?: true +} + +export type BookingAggregateArgs = { + /** + * Filter which Booking to aggregate. + */ + where?: Prisma.BookingWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Bookings to fetch. + */ + orderBy?: Prisma.BookingOrderByWithRelationInput | Prisma.BookingOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: Prisma.BookingWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Bookings from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Bookings. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Bookings + **/ + _count?: true | BookingCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: BookingAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: BookingSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: BookingMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: BookingMaxAggregateInputType +} + +export type GetBookingAggregateType = { + [P in keyof T & keyof AggregateBooking]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType +} + + + + +export type BookingGroupByArgs = { + where?: Prisma.BookingWhereInput + orderBy?: Prisma.BookingOrderByWithAggregationInput | Prisma.BookingOrderByWithAggregationInput[] + by: Prisma.BookingScalarFieldEnum[] | Prisma.BookingScalarFieldEnum + having?: Prisma.BookingScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: BookingCountAggregateInputType | true + _avg?: BookingAvgAggregateInputType + _sum?: BookingSumAggregateInputType + _min?: BookingMinAggregateInputType + _max?: BookingMaxAggregateInputType +} + +export type BookingGroupByOutputType = { + id: string + tripId: string + userId: string + participantId: string + amount: number + currency: string + status: $Enums.BookingStatus + createdAt: Date + updatedAt: Date + _count: BookingCountAggregateOutputType | null + _avg: BookingAvgAggregateOutputType | null + _sum: BookingSumAggregateOutputType | null + _min: BookingMinAggregateOutputType | null + _max: BookingMaxAggregateOutputType | null +} + +export type GetBookingGroupByPayload = Prisma.PrismaPromise< + Array< + Prisma.PickEnumerable & + { + [P in ((keyof T) & (keyof BookingGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType + } + > + > + + + +export type BookingWhereInput = { + AND?: Prisma.BookingWhereInput | Prisma.BookingWhereInput[] + OR?: Prisma.BookingWhereInput[] + NOT?: Prisma.BookingWhereInput | Prisma.BookingWhereInput[] + id?: Prisma.StringFilter<"Booking"> | string + tripId?: Prisma.StringFilter<"Booking"> | string + userId?: Prisma.StringFilter<"Booking"> | string + participantId?: Prisma.StringFilter<"Booking"> | string + amount?: Prisma.IntFilter<"Booking"> | number + currency?: Prisma.StringFilter<"Booking"> | string + status?: Prisma.EnumBookingStatusFilter<"Booking"> | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFilter<"Booking"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"Booking"> | Date | string + trip?: Prisma.XOR + user?: Prisma.XOR + participant?: Prisma.XOR + payments?: Prisma.PaymentListRelationFilter +} + +export type BookingOrderByWithRelationInput = { + id?: Prisma.SortOrder + tripId?: Prisma.SortOrder + userId?: Prisma.SortOrder + participantId?: Prisma.SortOrder + amount?: Prisma.SortOrder + currency?: Prisma.SortOrder + status?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder + trip?: Prisma.TripOrderByWithRelationInput + user?: Prisma.UserOrderByWithRelationInput + participant?: Prisma.TripParticipantOrderByWithRelationInput + payments?: Prisma.PaymentOrderByRelationAggregateInput +} + +export type BookingWhereUniqueInput = Prisma.AtLeast<{ + id?: string + participantId?: string + AND?: Prisma.BookingWhereInput | Prisma.BookingWhereInput[] + OR?: Prisma.BookingWhereInput[] + NOT?: Prisma.BookingWhereInput | Prisma.BookingWhereInput[] + tripId?: Prisma.StringFilter<"Booking"> | string + userId?: Prisma.StringFilter<"Booking"> | string + amount?: Prisma.IntFilter<"Booking"> | number + currency?: Prisma.StringFilter<"Booking"> | string + status?: Prisma.EnumBookingStatusFilter<"Booking"> | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFilter<"Booking"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"Booking"> | Date | string + trip?: Prisma.XOR + user?: Prisma.XOR + participant?: Prisma.XOR + payments?: Prisma.PaymentListRelationFilter +}, "id" | "participantId"> + +export type BookingOrderByWithAggregationInput = { + id?: Prisma.SortOrder + tripId?: Prisma.SortOrder + userId?: Prisma.SortOrder + participantId?: Prisma.SortOrder + amount?: Prisma.SortOrder + currency?: Prisma.SortOrder + status?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder + _count?: Prisma.BookingCountOrderByAggregateInput + _avg?: Prisma.BookingAvgOrderByAggregateInput + _max?: Prisma.BookingMaxOrderByAggregateInput + _min?: Prisma.BookingMinOrderByAggregateInput + _sum?: Prisma.BookingSumOrderByAggregateInput +} + +export type BookingScalarWhereWithAggregatesInput = { + AND?: Prisma.BookingScalarWhereWithAggregatesInput | Prisma.BookingScalarWhereWithAggregatesInput[] + OR?: Prisma.BookingScalarWhereWithAggregatesInput[] + NOT?: Prisma.BookingScalarWhereWithAggregatesInput | Prisma.BookingScalarWhereWithAggregatesInput[] + id?: Prisma.StringWithAggregatesFilter<"Booking"> | string + tripId?: Prisma.StringWithAggregatesFilter<"Booking"> | string + userId?: Prisma.StringWithAggregatesFilter<"Booking"> | string + participantId?: Prisma.StringWithAggregatesFilter<"Booking"> | string + amount?: Prisma.IntWithAggregatesFilter<"Booking"> | number + currency?: Prisma.StringWithAggregatesFilter<"Booking"> | string + status?: Prisma.EnumBookingStatusWithAggregatesFilter<"Booking"> | $Enums.BookingStatus + createdAt?: Prisma.DateTimeWithAggregatesFilter<"Booking"> | Date | string + updatedAt?: Prisma.DateTimeWithAggregatesFilter<"Booking"> | Date | string +} + +export type BookingCreateInput = { + id?: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + trip: Prisma.TripCreateNestedOneWithoutBookingsInput + user: Prisma.UserCreateNestedOneWithoutBookingsInput + participant: Prisma.TripParticipantCreateNestedOneWithoutBookingInput + payments?: Prisma.PaymentCreateNestedManyWithoutBookingInput +} + +export type BookingUncheckedCreateInput = { + id?: string + tripId: string + userId: string + participantId: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + payments?: Prisma.PaymentUncheckedCreateNestedManyWithoutBookingInput +} + +export type BookingUpdateInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + trip?: Prisma.TripUpdateOneRequiredWithoutBookingsNestedInput + user?: Prisma.UserUpdateOneRequiredWithoutBookingsNestedInput + participant?: Prisma.TripParticipantUpdateOneRequiredWithoutBookingNestedInput + payments?: Prisma.PaymentUpdateManyWithoutBookingNestedInput +} + +export type BookingUncheckedUpdateInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + tripId?: Prisma.StringFieldUpdateOperationsInput | string + userId?: Prisma.StringFieldUpdateOperationsInput | string + participantId?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + payments?: Prisma.PaymentUncheckedUpdateManyWithoutBookingNestedInput +} + +export type BookingCreateManyInput = { + id?: string + tripId: string + userId: string + participantId: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string +} + +export type BookingUpdateManyMutationInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type BookingUncheckedUpdateManyInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + tripId?: Prisma.StringFieldUpdateOperationsInput | string + userId?: Prisma.StringFieldUpdateOperationsInput | string + participantId?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type BookingListRelationFilter = { + every?: Prisma.BookingWhereInput + some?: Prisma.BookingWhereInput + none?: Prisma.BookingWhereInput +} + +export type BookingOrderByRelationAggregateInput = { + _count?: Prisma.SortOrder +} + +export type BookingNullableScalarRelationFilter = { + is?: Prisma.BookingWhereInput | null + isNot?: Prisma.BookingWhereInput | null +} + +export type BookingCountOrderByAggregateInput = { + id?: Prisma.SortOrder + tripId?: Prisma.SortOrder + userId?: Prisma.SortOrder + participantId?: Prisma.SortOrder + amount?: Prisma.SortOrder + currency?: Prisma.SortOrder + status?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type BookingAvgOrderByAggregateInput = { + amount?: Prisma.SortOrder +} + +export type BookingMaxOrderByAggregateInput = { + id?: Prisma.SortOrder + tripId?: Prisma.SortOrder + userId?: Prisma.SortOrder + participantId?: Prisma.SortOrder + amount?: Prisma.SortOrder + currency?: Prisma.SortOrder + status?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type BookingMinOrderByAggregateInput = { + id?: Prisma.SortOrder + tripId?: Prisma.SortOrder + userId?: Prisma.SortOrder + participantId?: Prisma.SortOrder + amount?: Prisma.SortOrder + currency?: Prisma.SortOrder + status?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type BookingSumOrderByAggregateInput = { + amount?: Prisma.SortOrder +} + +export type BookingScalarRelationFilter = { + is?: Prisma.BookingWhereInput + isNot?: Prisma.BookingWhereInput +} + +export type BookingCreateNestedManyWithoutUserInput = { + create?: Prisma.XOR | Prisma.BookingCreateWithoutUserInput[] | Prisma.BookingUncheckedCreateWithoutUserInput[] + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutUserInput | Prisma.BookingCreateOrConnectWithoutUserInput[] + createMany?: Prisma.BookingCreateManyUserInputEnvelope + connect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] +} + +export type BookingUncheckedCreateNestedManyWithoutUserInput = { + create?: Prisma.XOR | Prisma.BookingCreateWithoutUserInput[] | Prisma.BookingUncheckedCreateWithoutUserInput[] + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutUserInput | Prisma.BookingCreateOrConnectWithoutUserInput[] + createMany?: Prisma.BookingCreateManyUserInputEnvelope + connect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] +} + +export type BookingUpdateManyWithoutUserNestedInput = { + create?: Prisma.XOR | Prisma.BookingCreateWithoutUserInput[] | Prisma.BookingUncheckedCreateWithoutUserInput[] + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutUserInput | Prisma.BookingCreateOrConnectWithoutUserInput[] + upsert?: Prisma.BookingUpsertWithWhereUniqueWithoutUserInput | Prisma.BookingUpsertWithWhereUniqueWithoutUserInput[] + createMany?: Prisma.BookingCreateManyUserInputEnvelope + set?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + disconnect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + delete?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + connect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + update?: Prisma.BookingUpdateWithWhereUniqueWithoutUserInput | Prisma.BookingUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: Prisma.BookingUpdateManyWithWhereWithoutUserInput | Prisma.BookingUpdateManyWithWhereWithoutUserInput[] + deleteMany?: Prisma.BookingScalarWhereInput | Prisma.BookingScalarWhereInput[] +} + +export type BookingUncheckedUpdateManyWithoutUserNestedInput = { + create?: Prisma.XOR | Prisma.BookingCreateWithoutUserInput[] | Prisma.BookingUncheckedCreateWithoutUserInput[] + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutUserInput | Prisma.BookingCreateOrConnectWithoutUserInput[] + upsert?: Prisma.BookingUpsertWithWhereUniqueWithoutUserInput | Prisma.BookingUpsertWithWhereUniqueWithoutUserInput[] + createMany?: Prisma.BookingCreateManyUserInputEnvelope + set?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + disconnect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + delete?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + connect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + update?: Prisma.BookingUpdateWithWhereUniqueWithoutUserInput | Prisma.BookingUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: Prisma.BookingUpdateManyWithWhereWithoutUserInput | Prisma.BookingUpdateManyWithWhereWithoutUserInput[] + deleteMany?: Prisma.BookingScalarWhereInput | Prisma.BookingScalarWhereInput[] +} + +export type BookingCreateNestedManyWithoutTripInput = { + create?: Prisma.XOR | Prisma.BookingCreateWithoutTripInput[] | Prisma.BookingUncheckedCreateWithoutTripInput[] + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutTripInput | Prisma.BookingCreateOrConnectWithoutTripInput[] + createMany?: Prisma.BookingCreateManyTripInputEnvelope + connect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] +} + +export type BookingUncheckedCreateNestedManyWithoutTripInput = { + create?: Prisma.XOR | Prisma.BookingCreateWithoutTripInput[] | Prisma.BookingUncheckedCreateWithoutTripInput[] + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutTripInput | Prisma.BookingCreateOrConnectWithoutTripInput[] + createMany?: Prisma.BookingCreateManyTripInputEnvelope + connect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] +} + +export type BookingUpdateManyWithoutTripNestedInput = { + create?: Prisma.XOR | Prisma.BookingCreateWithoutTripInput[] | Prisma.BookingUncheckedCreateWithoutTripInput[] + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutTripInput | Prisma.BookingCreateOrConnectWithoutTripInput[] + upsert?: Prisma.BookingUpsertWithWhereUniqueWithoutTripInput | Prisma.BookingUpsertWithWhereUniqueWithoutTripInput[] + createMany?: Prisma.BookingCreateManyTripInputEnvelope + set?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + disconnect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + delete?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + connect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + update?: Prisma.BookingUpdateWithWhereUniqueWithoutTripInput | Prisma.BookingUpdateWithWhereUniqueWithoutTripInput[] + updateMany?: Prisma.BookingUpdateManyWithWhereWithoutTripInput | Prisma.BookingUpdateManyWithWhereWithoutTripInput[] + deleteMany?: Prisma.BookingScalarWhereInput | Prisma.BookingScalarWhereInput[] +} + +export type BookingUncheckedUpdateManyWithoutTripNestedInput = { + create?: Prisma.XOR | Prisma.BookingCreateWithoutTripInput[] | Prisma.BookingUncheckedCreateWithoutTripInput[] + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutTripInput | Prisma.BookingCreateOrConnectWithoutTripInput[] + upsert?: Prisma.BookingUpsertWithWhereUniqueWithoutTripInput | Prisma.BookingUpsertWithWhereUniqueWithoutTripInput[] + createMany?: Prisma.BookingCreateManyTripInputEnvelope + set?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + disconnect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + delete?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + connect?: Prisma.BookingWhereUniqueInput | Prisma.BookingWhereUniqueInput[] + update?: Prisma.BookingUpdateWithWhereUniqueWithoutTripInput | Prisma.BookingUpdateWithWhereUniqueWithoutTripInput[] + updateMany?: Prisma.BookingUpdateManyWithWhereWithoutTripInput | Prisma.BookingUpdateManyWithWhereWithoutTripInput[] + deleteMany?: Prisma.BookingScalarWhereInput | Prisma.BookingScalarWhereInput[] +} + +export type BookingCreateNestedOneWithoutParticipantInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutParticipantInput + connect?: Prisma.BookingWhereUniqueInput +} + +export type BookingUncheckedCreateNestedOneWithoutParticipantInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutParticipantInput + connect?: Prisma.BookingWhereUniqueInput +} + +export type BookingUpdateOneWithoutParticipantNestedInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutParticipantInput + upsert?: Prisma.BookingUpsertWithoutParticipantInput + disconnect?: Prisma.BookingWhereInput | boolean + delete?: Prisma.BookingWhereInput | boolean + connect?: Prisma.BookingWhereUniqueInput + update?: Prisma.XOR, Prisma.BookingUncheckedUpdateWithoutParticipantInput> +} + +export type BookingUncheckedUpdateOneWithoutParticipantNestedInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutParticipantInput + upsert?: Prisma.BookingUpsertWithoutParticipantInput + disconnect?: Prisma.BookingWhereInput | boolean + delete?: Prisma.BookingWhereInput | boolean + connect?: Prisma.BookingWhereUniqueInput + update?: Prisma.XOR, Prisma.BookingUncheckedUpdateWithoutParticipantInput> +} + +export type EnumBookingStatusFieldUpdateOperationsInput = { + set?: $Enums.BookingStatus +} + +export type BookingCreateNestedOneWithoutPaymentsInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutPaymentsInput + connect?: Prisma.BookingWhereUniqueInput +} + +export type BookingUpdateOneRequiredWithoutPaymentsNestedInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.BookingCreateOrConnectWithoutPaymentsInput + upsert?: Prisma.BookingUpsertWithoutPaymentsInput + connect?: Prisma.BookingWhereUniqueInput + update?: Prisma.XOR, Prisma.BookingUncheckedUpdateWithoutPaymentsInput> +} + +export type BookingCreateWithoutUserInput = { + id?: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + trip: Prisma.TripCreateNestedOneWithoutBookingsInput + participant: Prisma.TripParticipantCreateNestedOneWithoutBookingInput + payments?: Prisma.PaymentCreateNestedManyWithoutBookingInput +} + +export type BookingUncheckedCreateWithoutUserInput = { + id?: string + tripId: string + participantId: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + payments?: Prisma.PaymentUncheckedCreateNestedManyWithoutBookingInput +} + +export type BookingCreateOrConnectWithoutUserInput = { + where: Prisma.BookingWhereUniqueInput + create: Prisma.XOR +} + +export type BookingCreateManyUserInputEnvelope = { + data: Prisma.BookingCreateManyUserInput | Prisma.BookingCreateManyUserInput[] + skipDuplicates?: boolean +} + +export type BookingUpsertWithWhereUniqueWithoutUserInput = { + where: Prisma.BookingWhereUniqueInput + update: Prisma.XOR + create: Prisma.XOR +} + +export type BookingUpdateWithWhereUniqueWithoutUserInput = { + where: Prisma.BookingWhereUniqueInput + data: Prisma.XOR +} + +export type BookingUpdateManyWithWhereWithoutUserInput = { + where: Prisma.BookingScalarWhereInput + data: Prisma.XOR +} + +export type BookingScalarWhereInput = { + AND?: Prisma.BookingScalarWhereInput | Prisma.BookingScalarWhereInput[] + OR?: Prisma.BookingScalarWhereInput[] + NOT?: Prisma.BookingScalarWhereInput | Prisma.BookingScalarWhereInput[] + id?: Prisma.StringFilter<"Booking"> | string + tripId?: Prisma.StringFilter<"Booking"> | string + userId?: Prisma.StringFilter<"Booking"> | string + participantId?: Prisma.StringFilter<"Booking"> | string + amount?: Prisma.IntFilter<"Booking"> | number + currency?: Prisma.StringFilter<"Booking"> | string + status?: Prisma.EnumBookingStatusFilter<"Booking"> | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFilter<"Booking"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"Booking"> | Date | string +} + +export type BookingCreateWithoutTripInput = { + id?: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + user: Prisma.UserCreateNestedOneWithoutBookingsInput + participant: Prisma.TripParticipantCreateNestedOneWithoutBookingInput + payments?: Prisma.PaymentCreateNestedManyWithoutBookingInput +} + +export type BookingUncheckedCreateWithoutTripInput = { + id?: string + userId: string + participantId: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + payments?: Prisma.PaymentUncheckedCreateNestedManyWithoutBookingInput +} + +export type BookingCreateOrConnectWithoutTripInput = { + where: Prisma.BookingWhereUniqueInput + create: Prisma.XOR +} + +export type BookingCreateManyTripInputEnvelope = { + data: Prisma.BookingCreateManyTripInput | Prisma.BookingCreateManyTripInput[] + skipDuplicates?: boolean +} + +export type BookingUpsertWithWhereUniqueWithoutTripInput = { + where: Prisma.BookingWhereUniqueInput + update: Prisma.XOR + create: Prisma.XOR +} + +export type BookingUpdateWithWhereUniqueWithoutTripInput = { + where: Prisma.BookingWhereUniqueInput + data: Prisma.XOR +} + +export type BookingUpdateManyWithWhereWithoutTripInput = { + where: Prisma.BookingScalarWhereInput + data: Prisma.XOR +} + +export type BookingCreateWithoutParticipantInput = { + id?: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + trip: Prisma.TripCreateNestedOneWithoutBookingsInput + user: Prisma.UserCreateNestedOneWithoutBookingsInput + payments?: Prisma.PaymentCreateNestedManyWithoutBookingInput +} + +export type BookingUncheckedCreateWithoutParticipantInput = { + id?: string + tripId: string + userId: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + payments?: Prisma.PaymentUncheckedCreateNestedManyWithoutBookingInput +} + +export type BookingCreateOrConnectWithoutParticipantInput = { + where: Prisma.BookingWhereUniqueInput + create: Prisma.XOR +} + +export type BookingUpsertWithoutParticipantInput = { + update: Prisma.XOR + create: Prisma.XOR + where?: Prisma.BookingWhereInput +} + +export type BookingUpdateToOneWithWhereWithoutParticipantInput = { + where?: Prisma.BookingWhereInput + data: Prisma.XOR +} + +export type BookingUpdateWithoutParticipantInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + trip?: Prisma.TripUpdateOneRequiredWithoutBookingsNestedInput + user?: Prisma.UserUpdateOneRequiredWithoutBookingsNestedInput + payments?: Prisma.PaymentUpdateManyWithoutBookingNestedInput +} + +export type BookingUncheckedUpdateWithoutParticipantInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + tripId?: Prisma.StringFieldUpdateOperationsInput | string + userId?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + payments?: Prisma.PaymentUncheckedUpdateManyWithoutBookingNestedInput +} + +export type BookingCreateWithoutPaymentsInput = { + id?: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string + trip: Prisma.TripCreateNestedOneWithoutBookingsInput + user: Prisma.UserCreateNestedOneWithoutBookingsInput + participant: Prisma.TripParticipantCreateNestedOneWithoutBookingInput +} + +export type BookingUncheckedCreateWithoutPaymentsInput = { + id?: string + tripId: string + userId: string + participantId: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string +} + +export type BookingCreateOrConnectWithoutPaymentsInput = { + where: Prisma.BookingWhereUniqueInput + create: Prisma.XOR +} + +export type BookingUpsertWithoutPaymentsInput = { + update: Prisma.XOR + create: Prisma.XOR + where?: Prisma.BookingWhereInput +} + +export type BookingUpdateToOneWithWhereWithoutPaymentsInput = { + where?: Prisma.BookingWhereInput + data: Prisma.XOR +} + +export type BookingUpdateWithoutPaymentsInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + trip?: Prisma.TripUpdateOneRequiredWithoutBookingsNestedInput + user?: Prisma.UserUpdateOneRequiredWithoutBookingsNestedInput + participant?: Prisma.TripParticipantUpdateOneRequiredWithoutBookingNestedInput +} + +export type BookingUncheckedUpdateWithoutPaymentsInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + tripId?: Prisma.StringFieldUpdateOperationsInput | string + userId?: Prisma.StringFieldUpdateOperationsInput | string + participantId?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type BookingCreateManyUserInput = { + id?: string + tripId: string + participantId: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string +} + +export type BookingUpdateWithoutUserInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + trip?: Prisma.TripUpdateOneRequiredWithoutBookingsNestedInput + participant?: Prisma.TripParticipantUpdateOneRequiredWithoutBookingNestedInput + payments?: Prisma.PaymentUpdateManyWithoutBookingNestedInput +} + +export type BookingUncheckedUpdateWithoutUserInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + tripId?: Prisma.StringFieldUpdateOperationsInput | string + participantId?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + payments?: Prisma.PaymentUncheckedUpdateManyWithoutBookingNestedInput +} + +export type BookingUncheckedUpdateManyWithoutUserInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + tripId?: Prisma.StringFieldUpdateOperationsInput | string + participantId?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type BookingCreateManyTripInput = { + id?: string + userId: string + participantId: string + amount: number + currency?: string + status?: $Enums.BookingStatus + createdAt?: Date | string + updatedAt?: Date | string +} + +export type BookingUpdateWithoutTripInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + user?: Prisma.UserUpdateOneRequiredWithoutBookingsNestedInput + participant?: Prisma.TripParticipantUpdateOneRequiredWithoutBookingNestedInput + payments?: Prisma.PaymentUpdateManyWithoutBookingNestedInput +} + +export type BookingUncheckedUpdateWithoutTripInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + userId?: Prisma.StringFieldUpdateOperationsInput | string + participantId?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + payments?: Prisma.PaymentUncheckedUpdateManyWithoutBookingNestedInput +} + +export type BookingUncheckedUpdateManyWithoutTripInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + userId?: Prisma.StringFieldUpdateOperationsInput | string + participantId?: Prisma.StringFieldUpdateOperationsInput | string + amount?: Prisma.IntFieldUpdateOperationsInput | number + currency?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumBookingStatusFieldUpdateOperationsInput | $Enums.BookingStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + + +/** + * Count Type BookingCountOutputType + */ + +export type BookingCountOutputType = { + payments: number +} + +export type BookingCountOutputTypeSelect = { + payments?: boolean | BookingCountOutputTypeCountPaymentsArgs +} + +/** + * BookingCountOutputType without action + */ +export type BookingCountOutputTypeDefaultArgs = { + /** + * Select specific fields to fetch from the BookingCountOutputType + */ + select?: Prisma.BookingCountOutputTypeSelect | null +} + +/** + * BookingCountOutputType without action + */ +export type BookingCountOutputTypeCountPaymentsArgs = { + where?: Prisma.PaymentWhereInput +} + + +export type BookingSelect = runtime.Types.Extensions.GetSelect<{ + id?: boolean + tripId?: boolean + userId?: boolean + participantId?: boolean + amount?: boolean + currency?: boolean + status?: boolean + createdAt?: boolean + updatedAt?: boolean + trip?: boolean | Prisma.TripDefaultArgs + user?: boolean | Prisma.UserDefaultArgs + participant?: boolean | Prisma.TripParticipantDefaultArgs + payments?: boolean | Prisma.Booking$paymentsArgs + _count?: boolean | Prisma.BookingCountOutputTypeDefaultArgs +}, ExtArgs["result"]["booking"]> + +export type BookingSelectCreateManyAndReturn = runtime.Types.Extensions.GetSelect<{ + id?: boolean + tripId?: boolean + userId?: boolean + participantId?: boolean + amount?: boolean + currency?: boolean + status?: boolean + createdAt?: boolean + updatedAt?: boolean + trip?: boolean | Prisma.TripDefaultArgs + user?: boolean | Prisma.UserDefaultArgs + participant?: boolean | Prisma.TripParticipantDefaultArgs +}, ExtArgs["result"]["booking"]> + +export type BookingSelectUpdateManyAndReturn = runtime.Types.Extensions.GetSelect<{ + id?: boolean + tripId?: boolean + userId?: boolean + participantId?: boolean + amount?: boolean + currency?: boolean + status?: boolean + createdAt?: boolean + updatedAt?: boolean + trip?: boolean | Prisma.TripDefaultArgs + user?: boolean | Prisma.UserDefaultArgs + participant?: boolean | Prisma.TripParticipantDefaultArgs +}, ExtArgs["result"]["booking"]> + +export type BookingSelectScalar = { + id?: boolean + tripId?: boolean + userId?: boolean + participantId?: boolean + amount?: boolean + currency?: boolean + status?: boolean + createdAt?: boolean + updatedAt?: boolean +} + +export type BookingOmit = runtime.Types.Extensions.GetOmit<"id" | "tripId" | "userId" | "participantId" | "amount" | "currency" | "status" | "createdAt" | "updatedAt", ExtArgs["result"]["booking"]> +export type BookingInclude = { + trip?: boolean | Prisma.TripDefaultArgs + user?: boolean | Prisma.UserDefaultArgs + participant?: boolean | Prisma.TripParticipantDefaultArgs + payments?: boolean | Prisma.Booking$paymentsArgs + _count?: boolean | Prisma.BookingCountOutputTypeDefaultArgs +} +export type BookingIncludeCreateManyAndReturn = { + trip?: boolean | Prisma.TripDefaultArgs + user?: boolean | Prisma.UserDefaultArgs + participant?: boolean | Prisma.TripParticipantDefaultArgs +} +export type BookingIncludeUpdateManyAndReturn = { + trip?: boolean | Prisma.TripDefaultArgs + user?: boolean | Prisma.UserDefaultArgs + participant?: boolean | Prisma.TripParticipantDefaultArgs +} + +export type $BookingPayload = { + name: "Booking" + objects: { + trip: Prisma.$TripPayload + user: Prisma.$UserPayload + participant: Prisma.$TripParticipantPayload + payments: Prisma.$PaymentPayload[] + } + scalars: runtime.Types.Extensions.GetPayloadResult<{ + id: string + tripId: string + userId: string + participantId: string + amount: number + currency: string + status: $Enums.BookingStatus + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["booking"]> + composites: {} +} + +export type BookingGetPayload = runtime.Types.Result.GetResult + +export type BookingCountArgs = + Omit & { + select?: BookingCountAggregateInputType | true + } + +export interface BookingDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Booking'], meta: { name: 'Booking' } } + /** + * Find zero or one Booking that matches the filter. + * @param {BookingFindUniqueArgs} args - Arguments to find a Booking + * @example + * // Get one Booking + * const booking = await prisma.booking.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: Prisma.SelectSubset>): Prisma.Prisma__BookingClient, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Booking that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {BookingFindUniqueOrThrowArgs} args - Arguments to find a Booking + * @example + * // Get one Booking + * const booking = await prisma.booking.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: Prisma.SelectSubset>): Prisma.Prisma__BookingClient, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Booking that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BookingFindFirstArgs} args - Arguments to find a Booking + * @example + * // Get one Booking + * const booking = await prisma.booking.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: Prisma.SelectSubset>): Prisma.Prisma__BookingClient, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Booking that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BookingFindFirstOrThrowArgs} args - Arguments to find a Booking + * @example + * // Get one Booking + * const booking = await prisma.booking.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: Prisma.SelectSubset>): Prisma.Prisma__BookingClient, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Bookings that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BookingFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Bookings + * const bookings = await prisma.booking.findMany() + * + * // Get first 10 Bookings + * const bookings = await prisma.booking.findMany({ take: 10 }) + * + * // Only select the `id` + * const bookingWithIdOnly = await prisma.booking.findMany({ select: { id: true } }) + * + */ + findMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Booking. + * @param {BookingCreateArgs} args - Arguments to create a Booking. + * @example + * // Create one Booking + * const Booking = await prisma.booking.create({ + * data: { + * // ... data to create a Booking + * } + * }) + * + */ + create(args: Prisma.SelectSubset>): Prisma.Prisma__BookingClient, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Bookings. + * @param {BookingCreateManyArgs} args - Arguments to create many Bookings. + * @example + * // Create many Bookings + * const booking = await prisma.booking.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Bookings and returns the data saved in the database. + * @param {BookingCreateManyAndReturnArgs} args - Arguments to create many Bookings. + * @example + * // Create many Bookings + * const booking = await prisma.booking.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Bookings and only return the `id` + * const bookingWithIdOnly = await prisma.booking.createManyAndReturn({ + * select: { id: true }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + createManyAndReturn(args?: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Booking. + * @param {BookingDeleteArgs} args - Arguments to delete one Booking. + * @example + * // Delete one Booking + * const Booking = await prisma.booking.delete({ + * where: { + * // ... filter to delete one Booking + * } + * }) + * + */ + delete(args: Prisma.SelectSubset>): Prisma.Prisma__BookingClient, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Booking. + * @param {BookingUpdateArgs} args - Arguments to update one Booking. + * @example + * // Update one Booking + * const booking = await prisma.booking.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: Prisma.SelectSubset>): Prisma.Prisma__BookingClient, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Bookings. + * @param {BookingDeleteManyArgs} args - Arguments to filter Bookings to delete. + * @example + * // Delete a few Bookings + * const { count } = await prisma.booking.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Bookings. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BookingUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Bookings + * const booking = await prisma.booking.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Bookings and returns the data updated in the database. + * @param {BookingUpdateManyAndReturnArgs} args - Arguments to update many Bookings. + * @example + * // Update many Bookings + * const booking = await prisma.booking.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Bookings and only return the `id` + * const bookingWithIdOnly = await prisma.booking.updateManyAndReturn({ + * select: { id: true }, + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + updateManyAndReturn(args: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Booking. + * @param {BookingUpsertArgs} args - Arguments to update or create a Booking. + * @example + * // Update or create a Booking + * const booking = await prisma.booking.upsert({ + * create: { + * // ... data to create a Booking + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Booking we want to update + * } + * }) + */ + upsert(args: Prisma.SelectSubset>): Prisma.Prisma__BookingClient, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Bookings. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BookingCountArgs} args - Arguments to filter Bookings to count. + * @example + * // Count the number of Bookings + * const count = await prisma.booking.count({ + * where: { + * // ... the filter for the Bookings we want to count + * } + * }) + **/ + count( + args?: Prisma.Subset, + ): Prisma.PrismaPromise< + T extends runtime.Types.Utils.Record<'select', any> + ? T['select'] extends true + ? number + : Prisma.GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Booking. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BookingAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Prisma.Subset): Prisma.PrismaPromise> + + /** + * Group by Booking. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BookingGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends BookingGroupByArgs, + HasSelectOrTake extends Prisma.Or< + Prisma.Extends<'skip', Prisma.Keys>, + Prisma.Extends<'take', Prisma.Keys> + >, + OrderByArg extends Prisma.True extends HasSelectOrTake + ? { orderBy: BookingGroupByArgs['orderBy'] } + : { orderBy?: BookingGroupByArgs['orderBy'] }, + OrderFields extends Prisma.ExcludeUnderscoreKeys>>, + ByFields extends Prisma.MaybeTupleToUnion, + ByValid extends Prisma.Has, + HavingFields extends Prisma.GetHavingFields, + HavingValid extends Prisma.Has, + ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, + InputErrors extends ByEmpty extends Prisma.True + ? `Error: "by" must not be empty.` + : HavingValid extends Prisma.False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: Prisma.SubsetIntersection & InputErrors): {} extends InputErrors ? GetBookingGroupByPayload : Prisma.PrismaPromise +/** + * Fields of the Booking model + */ +readonly fields: BookingFieldRefs; +} + +/** + * The delegate class that acts as a "Promise-like" for Booking. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ +export interface Prisma__BookingClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + trip = {}>(args?: Prisma.Subset>): Prisma.Prisma__TripClient, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + user = {}>(args?: Prisma.Subset>): Prisma.Prisma__UserClient, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + participant = {}>(args?: Prisma.Subset>): Prisma.Prisma__TripParticipantClient, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + payments = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): runtime.Types.Utils.JsPromise +} + + + + +/** + * Fields of the Booking model + */ +export interface BookingFieldRefs { + readonly id: Prisma.FieldRef<"Booking", 'String'> + readonly tripId: Prisma.FieldRef<"Booking", 'String'> + readonly userId: Prisma.FieldRef<"Booking", 'String'> + readonly participantId: Prisma.FieldRef<"Booking", 'String'> + readonly amount: Prisma.FieldRef<"Booking", 'Int'> + readonly currency: Prisma.FieldRef<"Booking", 'String'> + readonly status: Prisma.FieldRef<"Booking", 'BookingStatus'> + readonly createdAt: Prisma.FieldRef<"Booking", 'DateTime'> + readonly updatedAt: Prisma.FieldRef<"Booking", 'DateTime'> +} + + +// Custom InputTypes +/** + * Booking findUnique + */ +export type BookingFindUniqueArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * Filter, which Booking to fetch. + */ + where: Prisma.BookingWhereUniqueInput +} + +/** + * Booking findUniqueOrThrow + */ +export type BookingFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * Filter, which Booking to fetch. + */ + where: Prisma.BookingWhereUniqueInput +} + +/** + * Booking findFirst + */ +export type BookingFindFirstArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * Filter, which Booking to fetch. + */ + where?: Prisma.BookingWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Bookings to fetch. + */ + orderBy?: Prisma.BookingOrderByWithRelationInput | Prisma.BookingOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Bookings. + */ + cursor?: Prisma.BookingWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Bookings from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Bookings. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Bookings. + */ + distinct?: Prisma.BookingScalarFieldEnum | Prisma.BookingScalarFieldEnum[] +} + +/** + * Booking findFirstOrThrow + */ +export type BookingFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * Filter, which Booking to fetch. + */ + where?: Prisma.BookingWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Bookings to fetch. + */ + orderBy?: Prisma.BookingOrderByWithRelationInput | Prisma.BookingOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Bookings. + */ + cursor?: Prisma.BookingWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Bookings from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Bookings. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Bookings. + */ + distinct?: Prisma.BookingScalarFieldEnum | Prisma.BookingScalarFieldEnum[] +} + +/** + * Booking findMany + */ +export type BookingFindManyArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * Filter, which Bookings to fetch. + */ + where?: Prisma.BookingWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Bookings to fetch. + */ + orderBy?: Prisma.BookingOrderByWithRelationInput | Prisma.BookingOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Bookings. + */ + cursor?: Prisma.BookingWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Bookings from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Bookings. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Bookings. + */ + distinct?: Prisma.BookingScalarFieldEnum | Prisma.BookingScalarFieldEnum[] +} + +/** + * Booking create + */ +export type BookingCreateArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * The data needed to create a Booking. + */ + data: Prisma.XOR +} + +/** + * Booking createMany + */ +export type BookingCreateManyArgs = { + /** + * The data used to create many Bookings. + */ + data: Prisma.BookingCreateManyInput | Prisma.BookingCreateManyInput[] + skipDuplicates?: boolean +} + +/** + * Booking createManyAndReturn + */ +export type BookingCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * The data used to create many Bookings. + */ + data: Prisma.BookingCreateManyInput | Prisma.BookingCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingIncludeCreateManyAndReturn | null +} + +/** + * Booking update + */ +export type BookingUpdateArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * The data needed to update a Booking. + */ + data: Prisma.XOR + /** + * Choose, which Booking to update. + */ + where: Prisma.BookingWhereUniqueInput +} + +/** + * Booking updateMany + */ +export type BookingUpdateManyArgs = { + /** + * The data used to update Bookings. + */ + data: Prisma.XOR + /** + * Filter which Bookings to update + */ + where?: Prisma.BookingWhereInput + /** + * Limit how many Bookings to update. + */ + limit?: number +} + +/** + * Booking updateManyAndReturn + */ +export type BookingUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * The data used to update Bookings. + */ + data: Prisma.XOR + /** + * Filter which Bookings to update + */ + where?: Prisma.BookingWhereInput + /** + * Limit how many Bookings to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingIncludeUpdateManyAndReturn | null +} + +/** + * Booking upsert + */ +export type BookingUpsertArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * The filter to search for the Booking to update in case it exists. + */ + where: Prisma.BookingWhereUniqueInput + /** + * In case the Booking found by the `where` argument doesn't exist, create a new Booking with this data. + */ + create: Prisma.XOR + /** + * In case the Booking was found with the provided `where` argument, update it with this data. + */ + update: Prisma.XOR +} + +/** + * Booking delete + */ +export type BookingDeleteArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + /** + * Filter which Booking to delete. + */ + where: Prisma.BookingWhereUniqueInput +} + +/** + * Booking deleteMany + */ +export type BookingDeleteManyArgs = { + /** + * Filter which Bookings to delete + */ + where?: Prisma.BookingWhereInput + /** + * Limit how many Bookings to delete. + */ + limit?: number +} + +/** + * Booking.payments + */ +export type Booking$paymentsArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + where?: Prisma.PaymentWhereInput + orderBy?: Prisma.PaymentOrderByWithRelationInput | Prisma.PaymentOrderByWithRelationInput[] + cursor?: Prisma.PaymentWhereUniqueInput + take?: number + skip?: number + distinct?: Prisma.PaymentScalarFieldEnum | Prisma.PaymentScalarFieldEnum[] +} + +/** + * Booking without action + */ +export type BookingDefaultArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null +} diff --git a/app/generated/prisma/models/Payment.ts b/app/generated/prisma/models/Payment.ts new file mode 100644 index 0000000..f7152be --- /dev/null +++ b/app/generated/prisma/models/Payment.ts @@ -0,0 +1,1796 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! */ +/* eslint-disable */ +// biome-ignore-all lint: generated file +// @ts-nocheck +/* + * This file exports the `Payment` model and its related types. + * + * 🟢 You can import this file directly. + */ +import type * as runtime from "@prisma/client/runtime/client" +import type * as $Enums from "../enums" +import type * as Prisma from "../internal/prismaNamespace" + +/** + * Model Payment + * Satu attempt pembayaran. Satu Booking bisa punya banyak Payment kalau retry + * (di Phase MIDTRANS nanti). Untuk MANUAL biasanya cukup 1 Payment. + */ +export type PaymentModel = runtime.Types.Result.DefaultSelection + +export type AggregatePayment = { + _count: PaymentCountAggregateOutputType | null + _avg: PaymentAvgAggregateOutputType | null + _sum: PaymentSumAggregateOutputType | null + _min: PaymentMinAggregateOutputType | null + _max: PaymentMaxAggregateOutputType | null +} + +export type PaymentAvgAggregateOutputType = { + amount: number | null +} + +export type PaymentSumAggregateOutputType = { + amount: number | null +} + +export type PaymentMinAggregateOutputType = { + id: string | null + bookingId: string | null + provider: $Enums.PaymentProvider | null + externalOrderId: string | null + externalTxId: string | null + method: string | null + amount: number | null + status: $Enums.PaymentStatus | null + snapToken: string | null + expiresAt: Date | null + paidAt: Date | null + failedAt: Date | null + rejectionReason: string | null + createdAt: Date | null + updatedAt: Date | null +} + +export type PaymentMaxAggregateOutputType = { + id: string | null + bookingId: string | null + provider: $Enums.PaymentProvider | null + externalOrderId: string | null + externalTxId: string | null + method: string | null + amount: number | null + status: $Enums.PaymentStatus | null + snapToken: string | null + expiresAt: Date | null + paidAt: Date | null + failedAt: Date | null + rejectionReason: string | null + createdAt: Date | null + updatedAt: Date | null +} + +export type PaymentCountAggregateOutputType = { + id: number + bookingId: number + provider: number + externalOrderId: number + externalTxId: number + method: number + amount: number + status: number + rawCallback: number + snapToken: number + expiresAt: number + paidAt: number + failedAt: number + rejectionReason: number + createdAt: number + updatedAt: number + _all: number +} + + +export type PaymentAvgAggregateInputType = { + amount?: true +} + +export type PaymentSumAggregateInputType = { + amount?: true +} + +export type PaymentMinAggregateInputType = { + id?: true + bookingId?: true + provider?: true + externalOrderId?: true + externalTxId?: true + method?: true + amount?: true + status?: true + snapToken?: true + expiresAt?: true + paidAt?: true + failedAt?: true + rejectionReason?: true + createdAt?: true + updatedAt?: true +} + +export type PaymentMaxAggregateInputType = { + id?: true + bookingId?: true + provider?: true + externalOrderId?: true + externalTxId?: true + method?: true + amount?: true + status?: true + snapToken?: true + expiresAt?: true + paidAt?: true + failedAt?: true + rejectionReason?: true + createdAt?: true + updatedAt?: true +} + +export type PaymentCountAggregateInputType = { + id?: true + bookingId?: true + provider?: true + externalOrderId?: true + externalTxId?: true + method?: true + amount?: true + status?: true + rawCallback?: true + snapToken?: true + expiresAt?: true + paidAt?: true + failedAt?: true + rejectionReason?: true + createdAt?: true + updatedAt?: true + _all?: true +} + +export type PaymentAggregateArgs = { + /** + * Filter which Payment to aggregate. + */ + where?: Prisma.PaymentWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Payments to fetch. + */ + orderBy?: Prisma.PaymentOrderByWithRelationInput | Prisma.PaymentOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: Prisma.PaymentWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Payments from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Payments. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Payments + **/ + _count?: true | PaymentCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: PaymentAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: PaymentSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: PaymentMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: PaymentMaxAggregateInputType +} + +export type GetPaymentAggregateType = { + [P in keyof T & keyof AggregatePayment]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType +} + + + + +export type PaymentGroupByArgs = { + where?: Prisma.PaymentWhereInput + orderBy?: Prisma.PaymentOrderByWithAggregationInput | Prisma.PaymentOrderByWithAggregationInput[] + by: Prisma.PaymentScalarFieldEnum[] | Prisma.PaymentScalarFieldEnum + having?: Prisma.PaymentScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: PaymentCountAggregateInputType | true + _avg?: PaymentAvgAggregateInputType + _sum?: PaymentSumAggregateInputType + _min?: PaymentMinAggregateInputType + _max?: PaymentMaxAggregateInputType +} + +export type PaymentGroupByOutputType = { + id: string + bookingId: string + provider: $Enums.PaymentProvider + externalOrderId: string + externalTxId: string | null + method: string | null + amount: number + status: $Enums.PaymentStatus + rawCallback: runtime.JsonValue | null + snapToken: string | null + expiresAt: Date | null + paidAt: Date | null + failedAt: Date | null + rejectionReason: string | null + createdAt: Date + updatedAt: Date + _count: PaymentCountAggregateOutputType | null + _avg: PaymentAvgAggregateOutputType | null + _sum: PaymentSumAggregateOutputType | null + _min: PaymentMinAggregateOutputType | null + _max: PaymentMaxAggregateOutputType | null +} + +export type GetPaymentGroupByPayload = Prisma.PrismaPromise< + Array< + Prisma.PickEnumerable & + { + [P in ((keyof T) & (keyof PaymentGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : Prisma.GetScalarType + : Prisma.GetScalarType + } + > + > + + + +export type PaymentWhereInput = { + AND?: Prisma.PaymentWhereInput | Prisma.PaymentWhereInput[] + OR?: Prisma.PaymentWhereInput[] + NOT?: Prisma.PaymentWhereInput | Prisma.PaymentWhereInput[] + id?: Prisma.StringFilter<"Payment"> | string + bookingId?: Prisma.StringFilter<"Payment"> | string + provider?: Prisma.EnumPaymentProviderFilter<"Payment"> | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFilter<"Payment"> | string + externalTxId?: Prisma.StringNullableFilter<"Payment"> | string | null + method?: Prisma.StringNullableFilter<"Payment"> | string | null + amount?: Prisma.IntFilter<"Payment"> | number + status?: Prisma.EnumPaymentStatusFilter<"Payment"> | $Enums.PaymentStatus + rawCallback?: Prisma.JsonNullableFilter<"Payment"> + snapToken?: Prisma.StringNullableFilter<"Payment"> | string | null + expiresAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + paidAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + failedAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + rejectionReason?: Prisma.StringNullableFilter<"Payment"> | string | null + createdAt?: Prisma.DateTimeFilter<"Payment"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"Payment"> | Date | string + booking?: Prisma.XOR +} + +export type PaymentOrderByWithRelationInput = { + id?: Prisma.SortOrder + bookingId?: Prisma.SortOrder + provider?: Prisma.SortOrder + externalOrderId?: Prisma.SortOrder + externalTxId?: Prisma.SortOrderInput | Prisma.SortOrder + method?: Prisma.SortOrderInput | Prisma.SortOrder + amount?: Prisma.SortOrder + status?: Prisma.SortOrder + rawCallback?: Prisma.SortOrderInput | Prisma.SortOrder + snapToken?: Prisma.SortOrderInput | Prisma.SortOrder + expiresAt?: Prisma.SortOrderInput | Prisma.SortOrder + paidAt?: Prisma.SortOrderInput | Prisma.SortOrder + failedAt?: Prisma.SortOrderInput | Prisma.SortOrder + rejectionReason?: Prisma.SortOrderInput | Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder + booking?: Prisma.BookingOrderByWithRelationInput +} + +export type PaymentWhereUniqueInput = Prisma.AtLeast<{ + id?: string + externalOrderId?: string + AND?: Prisma.PaymentWhereInput | Prisma.PaymentWhereInput[] + OR?: Prisma.PaymentWhereInput[] + NOT?: Prisma.PaymentWhereInput | Prisma.PaymentWhereInput[] + bookingId?: Prisma.StringFilter<"Payment"> | string + provider?: Prisma.EnumPaymentProviderFilter<"Payment"> | $Enums.PaymentProvider + externalTxId?: Prisma.StringNullableFilter<"Payment"> | string | null + method?: Prisma.StringNullableFilter<"Payment"> | string | null + amount?: Prisma.IntFilter<"Payment"> | number + status?: Prisma.EnumPaymentStatusFilter<"Payment"> | $Enums.PaymentStatus + rawCallback?: Prisma.JsonNullableFilter<"Payment"> + snapToken?: Prisma.StringNullableFilter<"Payment"> | string | null + expiresAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + paidAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + failedAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + rejectionReason?: Prisma.StringNullableFilter<"Payment"> | string | null + createdAt?: Prisma.DateTimeFilter<"Payment"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"Payment"> | Date | string + booking?: Prisma.XOR +}, "id" | "externalOrderId"> + +export type PaymentOrderByWithAggregationInput = { + id?: Prisma.SortOrder + bookingId?: Prisma.SortOrder + provider?: Prisma.SortOrder + externalOrderId?: Prisma.SortOrder + externalTxId?: Prisma.SortOrderInput | Prisma.SortOrder + method?: Prisma.SortOrderInput | Prisma.SortOrder + amount?: Prisma.SortOrder + status?: Prisma.SortOrder + rawCallback?: Prisma.SortOrderInput | Prisma.SortOrder + snapToken?: Prisma.SortOrderInput | Prisma.SortOrder + expiresAt?: Prisma.SortOrderInput | Prisma.SortOrder + paidAt?: Prisma.SortOrderInput | Prisma.SortOrder + failedAt?: Prisma.SortOrderInput | Prisma.SortOrder + rejectionReason?: Prisma.SortOrderInput | Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder + _count?: Prisma.PaymentCountOrderByAggregateInput + _avg?: Prisma.PaymentAvgOrderByAggregateInput + _max?: Prisma.PaymentMaxOrderByAggregateInput + _min?: Prisma.PaymentMinOrderByAggregateInput + _sum?: Prisma.PaymentSumOrderByAggregateInput +} + +export type PaymentScalarWhereWithAggregatesInput = { + AND?: Prisma.PaymentScalarWhereWithAggregatesInput | Prisma.PaymentScalarWhereWithAggregatesInput[] + OR?: Prisma.PaymentScalarWhereWithAggregatesInput[] + NOT?: Prisma.PaymentScalarWhereWithAggregatesInput | Prisma.PaymentScalarWhereWithAggregatesInput[] + id?: Prisma.StringWithAggregatesFilter<"Payment"> | string + bookingId?: Prisma.StringWithAggregatesFilter<"Payment"> | string + provider?: Prisma.EnumPaymentProviderWithAggregatesFilter<"Payment"> | $Enums.PaymentProvider + externalOrderId?: Prisma.StringWithAggregatesFilter<"Payment"> | string + externalTxId?: Prisma.StringNullableWithAggregatesFilter<"Payment"> | string | null + method?: Prisma.StringNullableWithAggregatesFilter<"Payment"> | string | null + amount?: Prisma.IntWithAggregatesFilter<"Payment"> | number + status?: Prisma.EnumPaymentStatusWithAggregatesFilter<"Payment"> | $Enums.PaymentStatus + rawCallback?: Prisma.JsonNullableWithAggregatesFilter<"Payment"> + snapToken?: Prisma.StringNullableWithAggregatesFilter<"Payment"> | string | null + expiresAt?: Prisma.DateTimeNullableWithAggregatesFilter<"Payment"> | Date | string | null + paidAt?: Prisma.DateTimeNullableWithAggregatesFilter<"Payment"> | Date | string | null + failedAt?: Prisma.DateTimeNullableWithAggregatesFilter<"Payment"> | Date | string | null + rejectionReason?: Prisma.StringNullableWithAggregatesFilter<"Payment"> | string | null + createdAt?: Prisma.DateTimeWithAggregatesFilter<"Payment"> | Date | string + updatedAt?: Prisma.DateTimeWithAggregatesFilter<"Payment"> | Date | string +} + +export type PaymentCreateInput = { + id?: string + provider: $Enums.PaymentProvider + externalOrderId: string + externalTxId?: string | null + method?: string | null + amount: number + status?: $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: string | null + expiresAt?: Date | string | null + paidAt?: Date | string | null + failedAt?: Date | string | null + rejectionReason?: string | null + createdAt?: Date | string + updatedAt?: Date | string + booking: Prisma.BookingCreateNestedOneWithoutPaymentsInput +} + +export type PaymentUncheckedCreateInput = { + id?: string + bookingId: string + provider: $Enums.PaymentProvider + externalOrderId: string + externalTxId?: string | null + method?: string | null + amount: number + status?: $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: string | null + expiresAt?: Date | string | null + paidAt?: Date | string | null + failedAt?: Date | string | null + rejectionReason?: string | null + createdAt?: Date | string + updatedAt?: Date | string +} + +export type PaymentUpdateInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + provider?: Prisma.EnumPaymentProviderFieldUpdateOperationsInput | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFieldUpdateOperationsInput | string + externalTxId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + method?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + amount?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + failedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + rejectionReason?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + booking?: Prisma.BookingUpdateOneRequiredWithoutPaymentsNestedInput +} + +export type PaymentUncheckedUpdateInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + bookingId?: Prisma.StringFieldUpdateOperationsInput | string + provider?: Prisma.EnumPaymentProviderFieldUpdateOperationsInput | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFieldUpdateOperationsInput | string + externalTxId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + method?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + amount?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + failedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + rejectionReason?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type PaymentCreateManyInput = { + id?: string + bookingId: string + provider: $Enums.PaymentProvider + externalOrderId: string + externalTxId?: string | null + method?: string | null + amount: number + status?: $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: string | null + expiresAt?: Date | string | null + paidAt?: Date | string | null + failedAt?: Date | string | null + rejectionReason?: string | null + createdAt?: Date | string + updatedAt?: Date | string +} + +export type PaymentUpdateManyMutationInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + provider?: Prisma.EnumPaymentProviderFieldUpdateOperationsInput | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFieldUpdateOperationsInput | string + externalTxId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + method?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + amount?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + failedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + rejectionReason?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type PaymentUncheckedUpdateManyInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + bookingId?: Prisma.StringFieldUpdateOperationsInput | string + provider?: Prisma.EnumPaymentProviderFieldUpdateOperationsInput | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFieldUpdateOperationsInput | string + externalTxId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + method?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + amount?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + failedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + rejectionReason?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type PaymentListRelationFilter = { + every?: Prisma.PaymentWhereInput + some?: Prisma.PaymentWhereInput + none?: Prisma.PaymentWhereInput +} + +export type PaymentOrderByRelationAggregateInput = { + _count?: Prisma.SortOrder +} + +export type PaymentCountOrderByAggregateInput = { + id?: Prisma.SortOrder + bookingId?: Prisma.SortOrder + provider?: Prisma.SortOrder + externalOrderId?: Prisma.SortOrder + externalTxId?: Prisma.SortOrder + method?: Prisma.SortOrder + amount?: Prisma.SortOrder + status?: Prisma.SortOrder + rawCallback?: Prisma.SortOrder + snapToken?: Prisma.SortOrder + expiresAt?: Prisma.SortOrder + paidAt?: Prisma.SortOrder + failedAt?: Prisma.SortOrder + rejectionReason?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type PaymentAvgOrderByAggregateInput = { + amount?: Prisma.SortOrder +} + +export type PaymentMaxOrderByAggregateInput = { + id?: Prisma.SortOrder + bookingId?: Prisma.SortOrder + provider?: Prisma.SortOrder + externalOrderId?: Prisma.SortOrder + externalTxId?: Prisma.SortOrder + method?: Prisma.SortOrder + amount?: Prisma.SortOrder + status?: Prisma.SortOrder + snapToken?: Prisma.SortOrder + expiresAt?: Prisma.SortOrder + paidAt?: Prisma.SortOrder + failedAt?: Prisma.SortOrder + rejectionReason?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type PaymentMinOrderByAggregateInput = { + id?: Prisma.SortOrder + bookingId?: Prisma.SortOrder + provider?: Prisma.SortOrder + externalOrderId?: Prisma.SortOrder + externalTxId?: Prisma.SortOrder + method?: Prisma.SortOrder + amount?: Prisma.SortOrder + status?: Prisma.SortOrder + snapToken?: Prisma.SortOrder + expiresAt?: Prisma.SortOrder + paidAt?: Prisma.SortOrder + failedAt?: Prisma.SortOrder + rejectionReason?: Prisma.SortOrder + createdAt?: Prisma.SortOrder + updatedAt?: Prisma.SortOrder +} + +export type PaymentSumOrderByAggregateInput = { + amount?: Prisma.SortOrder +} + +export type PaymentCreateNestedManyWithoutBookingInput = { + create?: Prisma.XOR | Prisma.PaymentCreateWithoutBookingInput[] | Prisma.PaymentUncheckedCreateWithoutBookingInput[] + connectOrCreate?: Prisma.PaymentCreateOrConnectWithoutBookingInput | Prisma.PaymentCreateOrConnectWithoutBookingInput[] + createMany?: Prisma.PaymentCreateManyBookingInputEnvelope + connect?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] +} + +export type PaymentUncheckedCreateNestedManyWithoutBookingInput = { + create?: Prisma.XOR | Prisma.PaymentCreateWithoutBookingInput[] | Prisma.PaymentUncheckedCreateWithoutBookingInput[] + connectOrCreate?: Prisma.PaymentCreateOrConnectWithoutBookingInput | Prisma.PaymentCreateOrConnectWithoutBookingInput[] + createMany?: Prisma.PaymentCreateManyBookingInputEnvelope + connect?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] +} + +export type PaymentUpdateManyWithoutBookingNestedInput = { + create?: Prisma.XOR | Prisma.PaymentCreateWithoutBookingInput[] | Prisma.PaymentUncheckedCreateWithoutBookingInput[] + connectOrCreate?: Prisma.PaymentCreateOrConnectWithoutBookingInput | Prisma.PaymentCreateOrConnectWithoutBookingInput[] + upsert?: Prisma.PaymentUpsertWithWhereUniqueWithoutBookingInput | Prisma.PaymentUpsertWithWhereUniqueWithoutBookingInput[] + createMany?: Prisma.PaymentCreateManyBookingInputEnvelope + set?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] + disconnect?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] + delete?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] + connect?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] + update?: Prisma.PaymentUpdateWithWhereUniqueWithoutBookingInput | Prisma.PaymentUpdateWithWhereUniqueWithoutBookingInput[] + updateMany?: Prisma.PaymentUpdateManyWithWhereWithoutBookingInput | Prisma.PaymentUpdateManyWithWhereWithoutBookingInput[] + deleteMany?: Prisma.PaymentScalarWhereInput | Prisma.PaymentScalarWhereInput[] +} + +export type PaymentUncheckedUpdateManyWithoutBookingNestedInput = { + create?: Prisma.XOR | Prisma.PaymentCreateWithoutBookingInput[] | Prisma.PaymentUncheckedCreateWithoutBookingInput[] + connectOrCreate?: Prisma.PaymentCreateOrConnectWithoutBookingInput | Prisma.PaymentCreateOrConnectWithoutBookingInput[] + upsert?: Prisma.PaymentUpsertWithWhereUniqueWithoutBookingInput | Prisma.PaymentUpsertWithWhereUniqueWithoutBookingInput[] + createMany?: Prisma.PaymentCreateManyBookingInputEnvelope + set?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] + disconnect?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] + delete?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] + connect?: Prisma.PaymentWhereUniqueInput | Prisma.PaymentWhereUniqueInput[] + update?: Prisma.PaymentUpdateWithWhereUniqueWithoutBookingInput | Prisma.PaymentUpdateWithWhereUniqueWithoutBookingInput[] + updateMany?: Prisma.PaymentUpdateManyWithWhereWithoutBookingInput | Prisma.PaymentUpdateManyWithWhereWithoutBookingInput[] + deleteMany?: Prisma.PaymentScalarWhereInput | Prisma.PaymentScalarWhereInput[] +} + +export type EnumPaymentProviderFieldUpdateOperationsInput = { + set?: $Enums.PaymentProvider +} + +export type EnumPaymentStatusFieldUpdateOperationsInput = { + set?: $Enums.PaymentStatus +} + +export type PaymentCreateWithoutBookingInput = { + id?: string + provider: $Enums.PaymentProvider + externalOrderId: string + externalTxId?: string | null + method?: string | null + amount: number + status?: $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: string | null + expiresAt?: Date | string | null + paidAt?: Date | string | null + failedAt?: Date | string | null + rejectionReason?: string | null + createdAt?: Date | string + updatedAt?: Date | string +} + +export type PaymentUncheckedCreateWithoutBookingInput = { + id?: string + provider: $Enums.PaymentProvider + externalOrderId: string + externalTxId?: string | null + method?: string | null + amount: number + status?: $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: string | null + expiresAt?: Date | string | null + paidAt?: Date | string | null + failedAt?: Date | string | null + rejectionReason?: string | null + createdAt?: Date | string + updatedAt?: Date | string +} + +export type PaymentCreateOrConnectWithoutBookingInput = { + where: Prisma.PaymentWhereUniqueInput + create: Prisma.XOR +} + +export type PaymentCreateManyBookingInputEnvelope = { + data: Prisma.PaymentCreateManyBookingInput | Prisma.PaymentCreateManyBookingInput[] + skipDuplicates?: boolean +} + +export type PaymentUpsertWithWhereUniqueWithoutBookingInput = { + where: Prisma.PaymentWhereUniqueInput + update: Prisma.XOR + create: Prisma.XOR +} + +export type PaymentUpdateWithWhereUniqueWithoutBookingInput = { + where: Prisma.PaymentWhereUniqueInput + data: Prisma.XOR +} + +export type PaymentUpdateManyWithWhereWithoutBookingInput = { + where: Prisma.PaymentScalarWhereInput + data: Prisma.XOR +} + +export type PaymentScalarWhereInput = { + AND?: Prisma.PaymentScalarWhereInput | Prisma.PaymentScalarWhereInput[] + OR?: Prisma.PaymentScalarWhereInput[] + NOT?: Prisma.PaymentScalarWhereInput | Prisma.PaymentScalarWhereInput[] + id?: Prisma.StringFilter<"Payment"> | string + bookingId?: Prisma.StringFilter<"Payment"> | string + provider?: Prisma.EnumPaymentProviderFilter<"Payment"> | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFilter<"Payment"> | string + externalTxId?: Prisma.StringNullableFilter<"Payment"> | string | null + method?: Prisma.StringNullableFilter<"Payment"> | string | null + amount?: Prisma.IntFilter<"Payment"> | number + status?: Prisma.EnumPaymentStatusFilter<"Payment"> | $Enums.PaymentStatus + rawCallback?: Prisma.JsonNullableFilter<"Payment"> + snapToken?: Prisma.StringNullableFilter<"Payment"> | string | null + expiresAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + paidAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + failedAt?: Prisma.DateTimeNullableFilter<"Payment"> | Date | string | null + rejectionReason?: Prisma.StringNullableFilter<"Payment"> | string | null + createdAt?: Prisma.DateTimeFilter<"Payment"> | Date | string + updatedAt?: Prisma.DateTimeFilter<"Payment"> | Date | string +} + +export type PaymentCreateManyBookingInput = { + id?: string + provider: $Enums.PaymentProvider + externalOrderId: string + externalTxId?: string | null + method?: string | null + amount: number + status?: $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: string | null + expiresAt?: Date | string | null + paidAt?: Date | string | null + failedAt?: Date | string | null + rejectionReason?: string | null + createdAt?: Date | string + updatedAt?: Date | string +} + +export type PaymentUpdateWithoutBookingInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + provider?: Prisma.EnumPaymentProviderFieldUpdateOperationsInput | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFieldUpdateOperationsInput | string + externalTxId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + method?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + amount?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + failedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + rejectionReason?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type PaymentUncheckedUpdateWithoutBookingInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + provider?: Prisma.EnumPaymentProviderFieldUpdateOperationsInput | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFieldUpdateOperationsInput | string + externalTxId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + method?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + amount?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + failedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + rejectionReason?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + +export type PaymentUncheckedUpdateManyWithoutBookingInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + provider?: Prisma.EnumPaymentProviderFieldUpdateOperationsInput | $Enums.PaymentProvider + externalOrderId?: Prisma.StringFieldUpdateOperationsInput | string + externalTxId?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + method?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + amount?: Prisma.IntFieldUpdateOperationsInput | number + status?: Prisma.EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + rawCallback?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue + snapToken?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + failedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + rejectionReason?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string +} + + + +export type PaymentSelect = runtime.Types.Extensions.GetSelect<{ + id?: boolean + bookingId?: boolean + provider?: boolean + externalOrderId?: boolean + externalTxId?: boolean + method?: boolean + amount?: boolean + status?: boolean + rawCallback?: boolean + snapToken?: boolean + expiresAt?: boolean + paidAt?: boolean + failedAt?: boolean + rejectionReason?: boolean + createdAt?: boolean + updatedAt?: boolean + booking?: boolean | Prisma.BookingDefaultArgs +}, ExtArgs["result"]["payment"]> + +export type PaymentSelectCreateManyAndReturn = runtime.Types.Extensions.GetSelect<{ + id?: boolean + bookingId?: boolean + provider?: boolean + externalOrderId?: boolean + externalTxId?: boolean + method?: boolean + amount?: boolean + status?: boolean + rawCallback?: boolean + snapToken?: boolean + expiresAt?: boolean + paidAt?: boolean + failedAt?: boolean + rejectionReason?: boolean + createdAt?: boolean + updatedAt?: boolean + booking?: boolean | Prisma.BookingDefaultArgs +}, ExtArgs["result"]["payment"]> + +export type PaymentSelectUpdateManyAndReturn = runtime.Types.Extensions.GetSelect<{ + id?: boolean + bookingId?: boolean + provider?: boolean + externalOrderId?: boolean + externalTxId?: boolean + method?: boolean + amount?: boolean + status?: boolean + rawCallback?: boolean + snapToken?: boolean + expiresAt?: boolean + paidAt?: boolean + failedAt?: boolean + rejectionReason?: boolean + createdAt?: boolean + updatedAt?: boolean + booking?: boolean | Prisma.BookingDefaultArgs +}, ExtArgs["result"]["payment"]> + +export type PaymentSelectScalar = { + id?: boolean + bookingId?: boolean + provider?: boolean + externalOrderId?: boolean + externalTxId?: boolean + method?: boolean + amount?: boolean + status?: boolean + rawCallback?: boolean + snapToken?: boolean + expiresAt?: boolean + paidAt?: boolean + failedAt?: boolean + rejectionReason?: boolean + createdAt?: boolean + updatedAt?: boolean +} + +export type PaymentOmit = runtime.Types.Extensions.GetOmit<"id" | "bookingId" | "provider" | "externalOrderId" | "externalTxId" | "method" | "amount" | "status" | "rawCallback" | "snapToken" | "expiresAt" | "paidAt" | "failedAt" | "rejectionReason" | "createdAt" | "updatedAt", ExtArgs["result"]["payment"]> +export type PaymentInclude = { + booking?: boolean | Prisma.BookingDefaultArgs +} +export type PaymentIncludeCreateManyAndReturn = { + booking?: boolean | Prisma.BookingDefaultArgs +} +export type PaymentIncludeUpdateManyAndReturn = { + booking?: boolean | Prisma.BookingDefaultArgs +} + +export type $PaymentPayload = { + name: "Payment" + objects: { + booking: Prisma.$BookingPayload + } + scalars: runtime.Types.Extensions.GetPayloadResult<{ + id: string + bookingId: string + provider: $Enums.PaymentProvider + /** + * order_id eksternal (unik per attempt). Format MANUAL: `manual-`. + * Format MIDTRANS nanti: `midtrans--`. + */ + externalOrderId: string + /** + * transaction_id dari gateway. Kosong untuk MANUAL atau sebelum first callback. + */ + externalTxId: string | null + /** + * Metode konkret: bca_va, gopay, qris, manual_transfer, dst. + */ + method: string | null + amount: number + status: $Enums.PaymentStatus + /** + * Snapshot mentah callback gateway (untuk audit & dispute). + */ + rawCallback: runtime.JsonValue | null + /** + * Snap token Midtrans / redirect URL. + */ + snapToken: string | null + /** + * Kapan attempt ini kadaluarsa (Midtrans default 24 jam). + */ + expiresAt: Date | null + paidAt: Date | null + failedAt: Date | null + rejectionReason: string | null + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["payment"]> + composites: {} +} + +export type PaymentGetPayload = runtime.Types.Result.GetResult + +export type PaymentCountArgs = + Omit & { + select?: PaymentCountAggregateInputType | true + } + +export interface PaymentDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Payment'], meta: { name: 'Payment' } } + /** + * Find zero or one Payment that matches the filter. + * @param {PaymentFindUniqueArgs} args - Arguments to find a Payment + * @example + * // Get one Payment + * const payment = await prisma.payment.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: Prisma.SelectSubset>): Prisma.Prisma__PaymentClient, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Payment that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {PaymentFindUniqueOrThrowArgs} args - Arguments to find a Payment + * @example + * // Get one Payment + * const payment = await prisma.payment.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: Prisma.SelectSubset>): Prisma.Prisma__PaymentClient, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Payment that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentFindFirstArgs} args - Arguments to find a Payment + * @example + * // Get one Payment + * const payment = await prisma.payment.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: Prisma.SelectSubset>): Prisma.Prisma__PaymentClient, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Payment that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentFindFirstOrThrowArgs} args - Arguments to find a Payment + * @example + * // Get one Payment + * const payment = await prisma.payment.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: Prisma.SelectSubset>): Prisma.Prisma__PaymentClient, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Payments that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Payments + * const payments = await prisma.payment.findMany() + * + * // Get first 10 Payments + * const payments = await prisma.payment.findMany({ take: 10 }) + * + * // Only select the `id` + * const paymentWithIdOnly = await prisma.payment.findMany({ select: { id: true } }) + * + */ + findMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Payment. + * @param {PaymentCreateArgs} args - Arguments to create a Payment. + * @example + * // Create one Payment + * const Payment = await prisma.payment.create({ + * data: { + * // ... data to create a Payment + * } + * }) + * + */ + create(args: Prisma.SelectSubset>): Prisma.Prisma__PaymentClient, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Payments. + * @param {PaymentCreateManyArgs} args - Arguments to create many Payments. + * @example + * // Create many Payments + * const payment = await prisma.payment.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Payments and returns the data saved in the database. + * @param {PaymentCreateManyAndReturnArgs} args - Arguments to create many Payments. + * @example + * // Create many Payments + * const payment = await prisma.payment.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Payments and only return the `id` + * const paymentWithIdOnly = await prisma.payment.createManyAndReturn({ + * select: { id: true }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + createManyAndReturn(args?: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Payment. + * @param {PaymentDeleteArgs} args - Arguments to delete one Payment. + * @example + * // Delete one Payment + * const Payment = await prisma.payment.delete({ + * where: { + * // ... filter to delete one Payment + * } + * }) + * + */ + delete(args: Prisma.SelectSubset>): Prisma.Prisma__PaymentClient, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Payment. + * @param {PaymentUpdateArgs} args - Arguments to update one Payment. + * @example + * // Update one Payment + * const payment = await prisma.payment.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: Prisma.SelectSubset>): Prisma.Prisma__PaymentClient, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Payments. + * @param {PaymentDeleteManyArgs} args - Arguments to filter Payments to delete. + * @example + * // Delete a few Payments + * const { count } = await prisma.payment.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Payments. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Payments + * const payment = await prisma.payment.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: Prisma.SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Payments and returns the data updated in the database. + * @param {PaymentUpdateManyAndReturnArgs} args - Arguments to update many Payments. + * @example + * // Update many Payments + * const payment = await prisma.payment.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Payments and only return the `id` + * const paymentWithIdOnly = await prisma.payment.updateManyAndReturn({ + * select: { id: true }, + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + updateManyAndReturn(args: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Payment. + * @param {PaymentUpsertArgs} args - Arguments to update or create a Payment. + * @example + * // Update or create a Payment + * const payment = await prisma.payment.upsert({ + * create: { + * // ... data to create a Payment + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Payment we want to update + * } + * }) + */ + upsert(args: Prisma.SelectSubset>): Prisma.Prisma__PaymentClient, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Payments. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentCountArgs} args - Arguments to filter Payments to count. + * @example + * // Count the number of Payments + * const count = await prisma.payment.count({ + * where: { + * // ... the filter for the Payments we want to count + * } + * }) + **/ + count( + args?: Prisma.Subset, + ): Prisma.PrismaPromise< + T extends runtime.Types.Utils.Record<'select', any> + ? T['select'] extends true + ? number + : Prisma.GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Payment. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Prisma.Subset): Prisma.PrismaPromise> + + /** + * Group by Payment. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends PaymentGroupByArgs, + HasSelectOrTake extends Prisma.Or< + Prisma.Extends<'skip', Prisma.Keys>, + Prisma.Extends<'take', Prisma.Keys> + >, + OrderByArg extends Prisma.True extends HasSelectOrTake + ? { orderBy: PaymentGroupByArgs['orderBy'] } + : { orderBy?: PaymentGroupByArgs['orderBy'] }, + OrderFields extends Prisma.ExcludeUnderscoreKeys>>, + ByFields extends Prisma.MaybeTupleToUnion, + ByValid extends Prisma.Has, + HavingFields extends Prisma.GetHavingFields, + HavingValid extends Prisma.Has, + ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, + InputErrors extends ByEmpty extends Prisma.True + ? `Error: "by" must not be empty.` + : HavingValid extends Prisma.False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Prisma.Keys + ? 'orderBy' extends Prisma.Keys + ? ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends Prisma.True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: Prisma.SubsetIntersection & InputErrors): {} extends InputErrors ? GetPaymentGroupByPayload : Prisma.PrismaPromise +/** + * Fields of the Payment model + */ +readonly fields: PaymentFieldRefs; +} + +/** + * The delegate class that acts as a "Promise-like" for Payment. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ +export interface Prisma__PaymentClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + booking = {}>(args?: Prisma.Subset>): Prisma.Prisma__BookingClient, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): runtime.Types.Utils.JsPromise +} + + + + +/** + * Fields of the Payment model + */ +export interface PaymentFieldRefs { + readonly id: Prisma.FieldRef<"Payment", 'String'> + readonly bookingId: Prisma.FieldRef<"Payment", 'String'> + readonly provider: Prisma.FieldRef<"Payment", 'PaymentProvider'> + readonly externalOrderId: Prisma.FieldRef<"Payment", 'String'> + readonly externalTxId: Prisma.FieldRef<"Payment", 'String'> + readonly method: Prisma.FieldRef<"Payment", 'String'> + readonly amount: Prisma.FieldRef<"Payment", 'Int'> + readonly status: Prisma.FieldRef<"Payment", 'PaymentStatus'> + readonly rawCallback: Prisma.FieldRef<"Payment", 'Json'> + readonly snapToken: Prisma.FieldRef<"Payment", 'String'> + readonly expiresAt: Prisma.FieldRef<"Payment", 'DateTime'> + readonly paidAt: Prisma.FieldRef<"Payment", 'DateTime'> + readonly failedAt: Prisma.FieldRef<"Payment", 'DateTime'> + readonly rejectionReason: Prisma.FieldRef<"Payment", 'String'> + readonly createdAt: Prisma.FieldRef<"Payment", 'DateTime'> + readonly updatedAt: Prisma.FieldRef<"Payment", 'DateTime'> +} + + +// Custom InputTypes +/** + * Payment findUnique + */ +export type PaymentFindUniqueArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * Filter, which Payment to fetch. + */ + where: Prisma.PaymentWhereUniqueInput +} + +/** + * Payment findUniqueOrThrow + */ +export type PaymentFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * Filter, which Payment to fetch. + */ + where: Prisma.PaymentWhereUniqueInput +} + +/** + * Payment findFirst + */ +export type PaymentFindFirstArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * Filter, which Payment to fetch. + */ + where?: Prisma.PaymentWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Payments to fetch. + */ + orderBy?: Prisma.PaymentOrderByWithRelationInput | Prisma.PaymentOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Payments. + */ + cursor?: Prisma.PaymentWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Payments from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Payments. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Payments. + */ + distinct?: Prisma.PaymentScalarFieldEnum | Prisma.PaymentScalarFieldEnum[] +} + +/** + * Payment findFirstOrThrow + */ +export type PaymentFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * Filter, which Payment to fetch. + */ + where?: Prisma.PaymentWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Payments to fetch. + */ + orderBy?: Prisma.PaymentOrderByWithRelationInput | Prisma.PaymentOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Payments. + */ + cursor?: Prisma.PaymentWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Payments from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Payments. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Payments. + */ + distinct?: Prisma.PaymentScalarFieldEnum | Prisma.PaymentScalarFieldEnum[] +} + +/** + * Payment findMany + */ +export type PaymentFindManyArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * Filter, which Payments to fetch. + */ + where?: Prisma.PaymentWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Payments to fetch. + */ + orderBy?: Prisma.PaymentOrderByWithRelationInput | Prisma.PaymentOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Payments. + */ + cursor?: Prisma.PaymentWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Payments from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Payments. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Payments. + */ + distinct?: Prisma.PaymentScalarFieldEnum | Prisma.PaymentScalarFieldEnum[] +} + +/** + * Payment create + */ +export type PaymentCreateArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * The data needed to create a Payment. + */ + data: Prisma.XOR +} + +/** + * Payment createMany + */ +export type PaymentCreateManyArgs = { + /** + * The data used to create many Payments. + */ + data: Prisma.PaymentCreateManyInput | Prisma.PaymentCreateManyInput[] + skipDuplicates?: boolean +} + +/** + * Payment createManyAndReturn + */ +export type PaymentCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * The data used to create many Payments. + */ + data: Prisma.PaymentCreateManyInput | Prisma.PaymentCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentIncludeCreateManyAndReturn | null +} + +/** + * Payment update + */ +export type PaymentUpdateArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * The data needed to update a Payment. + */ + data: Prisma.XOR + /** + * Choose, which Payment to update. + */ + where: Prisma.PaymentWhereUniqueInput +} + +/** + * Payment updateMany + */ +export type PaymentUpdateManyArgs = { + /** + * The data used to update Payments. + */ + data: Prisma.XOR + /** + * Filter which Payments to update + */ + where?: Prisma.PaymentWhereInput + /** + * Limit how many Payments to update. + */ + limit?: number +} + +/** + * Payment updateManyAndReturn + */ +export type PaymentUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * The data used to update Payments. + */ + data: Prisma.XOR + /** + * Filter which Payments to update + */ + where?: Prisma.PaymentWhereInput + /** + * Limit how many Payments to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentIncludeUpdateManyAndReturn | null +} + +/** + * Payment upsert + */ +export type PaymentUpsertArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * The filter to search for the Payment to update in case it exists. + */ + where: Prisma.PaymentWhereUniqueInput + /** + * In case the Payment found by the `where` argument doesn't exist, create a new Payment with this data. + */ + create: Prisma.XOR + /** + * In case the Payment was found with the provided `where` argument, update it with this data. + */ + update: Prisma.XOR +} + +/** + * Payment delete + */ +export type PaymentDeleteArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null + /** + * Filter which Payment to delete. + */ + where: Prisma.PaymentWhereUniqueInput +} + +/** + * Payment deleteMany + */ +export type PaymentDeleteManyArgs = { + /** + * Filter which Payments to delete + */ + where?: Prisma.PaymentWhereInput + /** + * Limit how many Payments to delete. + */ + limit?: number +} + +/** + * Payment without action + */ +export type PaymentDefaultArgs = { + /** + * Select specific fields to fetch from the Payment + */ + select?: Prisma.PaymentSelect | null + /** + * Omit specific fields from the Payment + */ + omit?: Prisma.PaymentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.PaymentInclude | null +} diff --git a/app/generated/prisma/models/Trip.ts b/app/generated/prisma/models/Trip.ts index a93c90f..8c377d1 100644 --- a/app/generated/prisma/models/Trip.ts +++ b/app/generated/prisma/models/Trip.ts @@ -336,6 +336,7 @@ export type TripWhereInput = { participants?: Prisma.TripParticipantListRelationFilter images?: Prisma.TripImageListRelationFilter reviews?: Prisma.TripReviewListRelationFilter + bookings?: Prisma.BookingListRelationFilter } export type TripOrderByWithRelationInput = { @@ -362,6 +363,7 @@ export type TripOrderByWithRelationInput = { participants?: Prisma.TripParticipantOrderByRelationAggregateInput images?: Prisma.TripImageOrderByRelationAggregateInput reviews?: Prisma.TripReviewOrderByRelationAggregateInput + bookings?: Prisma.BookingOrderByRelationAggregateInput } export type TripWhereUniqueInput = Prisma.AtLeast<{ @@ -391,6 +393,7 @@ export type TripWhereUniqueInput = Prisma.AtLeast<{ participants?: Prisma.TripParticipantListRelationFilter images?: Prisma.TripImageListRelationFilter reviews?: Prisma.TripReviewListRelationFilter + bookings?: Prisma.BookingListRelationFilter }, "id"> export type TripOrderByWithAggregationInput = { @@ -468,6 +471,7 @@ export type TripCreateInput = { participants?: Prisma.TripParticipantCreateNestedManyWithoutTripInput images?: Prisma.TripImageCreateNestedManyWithoutTripInput reviews?: Prisma.TripReviewCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingCreateNestedManyWithoutTripInput } export type TripUncheckedCreateInput = { @@ -493,6 +497,7 @@ export type TripUncheckedCreateInput = { participants?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutTripInput images?: Prisma.TripImageUncheckedCreateNestedManyWithoutTripInput reviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutTripInput } export type TripUpdateInput = { @@ -518,6 +523,7 @@ export type TripUpdateInput = { participants?: Prisma.TripParticipantUpdateManyWithoutTripNestedInput images?: Prisma.TripImageUpdateManyWithoutTripNestedInput reviews?: Prisma.TripReviewUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUpdateManyWithoutTripNestedInput } export type TripUncheckedUpdateInput = { @@ -543,6 +549,7 @@ export type TripUncheckedUpdateInput = { participants?: Prisma.TripParticipantUncheckedUpdateManyWithoutTripNestedInput images?: Prisma.TripImageUncheckedUpdateManyWithoutTripNestedInput reviews?: Prisma.TripReviewUncheckedUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutTripNestedInput } export type TripCreateManyInput = { @@ -801,6 +808,20 @@ export type TripUpdateOneRequiredWithoutParticipantsNestedInput = { update?: Prisma.XOR, Prisma.TripUncheckedUpdateWithoutParticipantsInput> } +export type TripCreateNestedOneWithoutBookingsInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.TripCreateOrConnectWithoutBookingsInput + connect?: Prisma.TripWhereUniqueInput +} + +export type TripUpdateOneRequiredWithoutBookingsNestedInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.TripCreateOrConnectWithoutBookingsInput + upsert?: Prisma.TripUpsertWithoutBookingsInput + connect?: Prisma.TripWhereUniqueInput + update?: Prisma.XOR, Prisma.TripUncheckedUpdateWithoutBookingsInput> +} + export type TripCreateWithoutOrganizerInput = { id?: string title: string @@ -823,6 +844,7 @@ export type TripCreateWithoutOrganizerInput = { participants?: Prisma.TripParticipantCreateNestedManyWithoutTripInput images?: Prisma.TripImageCreateNestedManyWithoutTripInput reviews?: Prisma.TripReviewCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingCreateNestedManyWithoutTripInput } export type TripUncheckedCreateWithoutOrganizerInput = { @@ -847,6 +869,7 @@ export type TripUncheckedCreateWithoutOrganizerInput = { participants?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutTripInput images?: Prisma.TripImageUncheckedCreateNestedManyWithoutTripInput reviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutTripInput } export type TripCreateOrConnectWithoutOrganizerInput = { @@ -922,6 +945,7 @@ export type TripCreateWithoutReviewsInput = { organizer: Prisma.UserCreateNestedOneWithoutTripsInput participants?: Prisma.TripParticipantCreateNestedManyWithoutTripInput images?: Prisma.TripImageCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingCreateNestedManyWithoutTripInput } export type TripUncheckedCreateWithoutReviewsInput = { @@ -946,6 +970,7 @@ export type TripUncheckedCreateWithoutReviewsInput = { organizerId: string participants?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutTripInput images?: Prisma.TripImageUncheckedCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutTripInput } export type TripCreateOrConnectWithoutReviewsInput = { @@ -986,6 +1011,7 @@ export type TripUpdateWithoutReviewsInput = { organizer?: Prisma.UserUpdateOneRequiredWithoutTripsNestedInput participants?: Prisma.TripParticipantUpdateManyWithoutTripNestedInput images?: Prisma.TripImageUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUpdateManyWithoutTripNestedInput } export type TripUncheckedUpdateWithoutReviewsInput = { @@ -1010,6 +1036,7 @@ export type TripUncheckedUpdateWithoutReviewsInput = { organizerId?: Prisma.StringFieldUpdateOperationsInput | string participants?: Prisma.TripParticipantUncheckedUpdateManyWithoutTripNestedInput images?: Prisma.TripImageUncheckedUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutTripNestedInput } export type TripCreateWithoutImagesInput = { @@ -1034,6 +1061,7 @@ export type TripCreateWithoutImagesInput = { organizer: Prisma.UserCreateNestedOneWithoutTripsInput participants?: Prisma.TripParticipantCreateNestedManyWithoutTripInput reviews?: Prisma.TripReviewCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingCreateNestedManyWithoutTripInput } export type TripUncheckedCreateWithoutImagesInput = { @@ -1058,6 +1086,7 @@ export type TripUncheckedCreateWithoutImagesInput = { organizerId: string participants?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutTripInput reviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutTripInput } export type TripCreateOrConnectWithoutImagesInput = { @@ -1098,6 +1127,7 @@ export type TripUpdateWithoutImagesInput = { organizer?: Prisma.UserUpdateOneRequiredWithoutTripsNestedInput participants?: Prisma.TripParticipantUpdateManyWithoutTripNestedInput reviews?: Prisma.TripReviewUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUpdateManyWithoutTripNestedInput } export type TripUncheckedUpdateWithoutImagesInput = { @@ -1122,6 +1152,7 @@ export type TripUncheckedUpdateWithoutImagesInput = { organizerId?: Prisma.StringFieldUpdateOperationsInput | string participants?: Prisma.TripParticipantUncheckedUpdateManyWithoutTripNestedInput reviews?: Prisma.TripReviewUncheckedUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutTripNestedInput } export type TripCreateWithoutParticipantsInput = { @@ -1146,6 +1177,7 @@ export type TripCreateWithoutParticipantsInput = { organizer: Prisma.UserCreateNestedOneWithoutTripsInput images?: Prisma.TripImageCreateNestedManyWithoutTripInput reviews?: Prisma.TripReviewCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingCreateNestedManyWithoutTripInput } export type TripUncheckedCreateWithoutParticipantsInput = { @@ -1170,6 +1202,7 @@ export type TripUncheckedCreateWithoutParticipantsInput = { organizerId: string images?: Prisma.TripImageUncheckedCreateNestedManyWithoutTripInput reviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutTripInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutTripInput } export type TripCreateOrConnectWithoutParticipantsInput = { @@ -1210,6 +1243,7 @@ export type TripUpdateWithoutParticipantsInput = { organizer?: Prisma.UserUpdateOneRequiredWithoutTripsNestedInput images?: Prisma.TripImageUpdateManyWithoutTripNestedInput reviews?: Prisma.TripReviewUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUpdateManyWithoutTripNestedInput } export type TripUncheckedUpdateWithoutParticipantsInput = { @@ -1234,6 +1268,123 @@ export type TripUncheckedUpdateWithoutParticipantsInput = { organizerId?: Prisma.StringFieldUpdateOperationsInput | string images?: Prisma.TripImageUncheckedUpdateManyWithoutTripNestedInput reviews?: Prisma.TripReviewUncheckedUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutTripNestedInput +} + +export type TripCreateWithoutBookingsInput = { + id?: string + title: string + description?: string | null + category?: $Enums.ActivityCategory + destination: string + location: string + meetingPoint?: string | null + itinerary?: string | null + whatsIncluded?: string | null + whatsExcluded?: string | null + date: Date | string + endDate?: Date | string | null + maxParticipants: number + price: number + vibe?: $Enums.Vibe | null + status?: $Enums.TripStatus + createdAt?: Date | string + updatedAt?: Date | string + organizer: Prisma.UserCreateNestedOneWithoutTripsInput + participants?: Prisma.TripParticipantCreateNestedManyWithoutTripInput + images?: Prisma.TripImageCreateNestedManyWithoutTripInput + reviews?: Prisma.TripReviewCreateNestedManyWithoutTripInput +} + +export type TripUncheckedCreateWithoutBookingsInput = { + id?: string + title: string + description?: string | null + category?: $Enums.ActivityCategory + destination: string + location: string + meetingPoint?: string | null + itinerary?: string | null + whatsIncluded?: string | null + whatsExcluded?: string | null + date: Date | string + endDate?: Date | string | null + maxParticipants: number + price: number + vibe?: $Enums.Vibe | null + status?: $Enums.TripStatus + createdAt?: Date | string + updatedAt?: Date | string + organizerId: string + participants?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutTripInput + images?: Prisma.TripImageUncheckedCreateNestedManyWithoutTripInput + reviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutTripInput +} + +export type TripCreateOrConnectWithoutBookingsInput = { + where: Prisma.TripWhereUniqueInput + create: Prisma.XOR +} + +export type TripUpsertWithoutBookingsInput = { + update: Prisma.XOR + create: Prisma.XOR + where?: Prisma.TripWhereInput +} + +export type TripUpdateToOneWithWhereWithoutBookingsInput = { + where?: Prisma.TripWhereInput + data: Prisma.XOR +} + +export type TripUpdateWithoutBookingsInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + title?: Prisma.StringFieldUpdateOperationsInput | string + description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + category?: Prisma.EnumActivityCategoryFieldUpdateOperationsInput | $Enums.ActivityCategory + destination?: Prisma.StringFieldUpdateOperationsInput | string + location?: Prisma.StringFieldUpdateOperationsInput | string + meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number + price?: Prisma.IntFieldUpdateOperationsInput | number + vibe?: Prisma.NullableEnumVibeFieldUpdateOperationsInput | $Enums.Vibe | null + status?: Prisma.EnumTripStatusFieldUpdateOperationsInput | $Enums.TripStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + organizer?: Prisma.UserUpdateOneRequiredWithoutTripsNestedInput + participants?: Prisma.TripParticipantUpdateManyWithoutTripNestedInput + images?: Prisma.TripImageUpdateManyWithoutTripNestedInput + reviews?: Prisma.TripReviewUpdateManyWithoutTripNestedInput +} + +export type TripUncheckedUpdateWithoutBookingsInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + title?: Prisma.StringFieldUpdateOperationsInput | string + description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + category?: Prisma.EnumActivityCategoryFieldUpdateOperationsInput | $Enums.ActivityCategory + destination?: Prisma.StringFieldUpdateOperationsInput | string + location?: Prisma.StringFieldUpdateOperationsInput | string + meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number + price?: Prisma.IntFieldUpdateOperationsInput | number + vibe?: Prisma.NullableEnumVibeFieldUpdateOperationsInput | $Enums.Vibe | null + status?: Prisma.EnumTripStatusFieldUpdateOperationsInput | $Enums.TripStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + organizerId?: Prisma.StringFieldUpdateOperationsInput | string + participants?: Prisma.TripParticipantUncheckedUpdateManyWithoutTripNestedInput + images?: Prisma.TripImageUncheckedUpdateManyWithoutTripNestedInput + reviews?: Prisma.TripReviewUncheckedUpdateManyWithoutTripNestedInput } export type TripCreateManyOrganizerInput = { @@ -1279,6 +1430,7 @@ export type TripUpdateWithoutOrganizerInput = { participants?: Prisma.TripParticipantUpdateManyWithoutTripNestedInput images?: Prisma.TripImageUpdateManyWithoutTripNestedInput reviews?: Prisma.TripReviewUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUpdateManyWithoutTripNestedInput } export type TripUncheckedUpdateWithoutOrganizerInput = { @@ -1303,6 +1455,7 @@ export type TripUncheckedUpdateWithoutOrganizerInput = { participants?: Prisma.TripParticipantUncheckedUpdateManyWithoutTripNestedInput images?: Prisma.TripImageUncheckedUpdateManyWithoutTripNestedInput reviews?: Prisma.TripReviewUncheckedUpdateManyWithoutTripNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutTripNestedInput } export type TripUncheckedUpdateManyWithoutOrganizerInput = { @@ -1335,12 +1488,14 @@ export type TripCountOutputType = { participants: number images: number reviews: number + bookings: number } export type TripCountOutputTypeSelect = { participants?: boolean | TripCountOutputTypeCountParticipantsArgs images?: boolean | TripCountOutputTypeCountImagesArgs reviews?: boolean | TripCountOutputTypeCountReviewsArgs + bookings?: boolean | TripCountOutputTypeCountBookingsArgs } /** @@ -1374,6 +1529,13 @@ export type TripCountOutputTypeCountReviewsArgs = { + where?: Prisma.BookingWhereInput +} + export type TripSelect = runtime.Types.Extensions.GetSelect<{ id?: boolean @@ -1399,6 +1561,7 @@ export type TripSelect images?: boolean | Prisma.Trip$imagesArgs reviews?: boolean | Prisma.Trip$reviewsArgs + bookings?: boolean | Prisma.Trip$bookingsArgs _count?: boolean | Prisma.TripCountOutputTypeDefaultArgs }, ExtArgs["result"]["trip"]> @@ -1476,6 +1639,7 @@ export type TripInclude images?: boolean | Prisma.Trip$imagesArgs reviews?: boolean | Prisma.Trip$reviewsArgs + bookings?: boolean | Prisma.Trip$bookingsArgs _count?: boolean | Prisma.TripCountOutputTypeDefaultArgs } export type TripIncludeCreateManyAndReturn = { @@ -1492,6 +1656,7 @@ export type $TripPayload[] images: Prisma.$TripImagePayload[] reviews: Prisma.$TripReviewPayload[] + bookings: Prisma.$BookingPayload[] } scalars: runtime.Types.Extensions.GetPayloadResult<{ id: string @@ -1932,6 +2097,7 @@ export interface Prisma__TripClient = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> images = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> reviews = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> + bookings = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. @@ -2452,6 +2618,30 @@ export type Trip$reviewsArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + where?: Prisma.BookingWhereInput + orderBy?: Prisma.BookingOrderByWithRelationInput | Prisma.BookingOrderByWithRelationInput[] + cursor?: Prisma.BookingWhereUniqueInput + take?: number + skip?: number + distinct?: Prisma.BookingScalarFieldEnum | Prisma.BookingScalarFieldEnum[] +} + /** * Trip without action */ diff --git a/app/generated/prisma/models/TripParticipant.ts b/app/generated/prisma/models/TripParticipant.ts index 3d88968..4f8f58c 100644 --- a/app/generated/prisma/models/TripParticipant.ts +++ b/app/generated/prisma/models/TripParticipant.ts @@ -200,6 +200,7 @@ export type TripParticipantWhereInput = { userId?: Prisma.StringFilter<"TripParticipant"> | string trip?: Prisma.XOR user?: Prisma.XOR + booking?: Prisma.XOR | null } export type TripParticipantOrderByWithRelationInput = { @@ -212,6 +213,7 @@ export type TripParticipantOrderByWithRelationInput = { userId?: Prisma.SortOrder trip?: Prisma.TripOrderByWithRelationInput user?: Prisma.UserOrderByWithRelationInput + booking?: Prisma.BookingOrderByWithRelationInput } export type TripParticipantWhereUniqueInput = Prisma.AtLeast<{ @@ -228,6 +230,7 @@ export type TripParticipantWhereUniqueInput = Prisma.AtLeast<{ userId?: Prisma.StringFilter<"TripParticipant"> | string trip?: Prisma.XOR user?: Prisma.XOR + booking?: Prisma.XOR | null }, "id" | "tripId_userId"> export type TripParticipantOrderByWithAggregationInput = { @@ -264,6 +267,7 @@ export type TripParticipantCreateInput = { paymentConfirmedAt?: Date | string | null trip: Prisma.TripCreateNestedOneWithoutParticipantsInput user: Prisma.UserCreateNestedOneWithoutParticipationsInput + booking?: Prisma.BookingCreateNestedOneWithoutParticipantInput } export type TripParticipantUncheckedCreateInput = { @@ -274,6 +278,7 @@ export type TripParticipantUncheckedCreateInput = { paymentConfirmedAt?: Date | string | null tripId: string userId: string + booking?: Prisma.BookingUncheckedCreateNestedOneWithoutParticipantInput } export type TripParticipantUpdateInput = { @@ -284,6 +289,7 @@ export type TripParticipantUpdateInput = { paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null trip?: Prisma.TripUpdateOneRequiredWithoutParticipantsNestedInput user?: Prisma.UserUpdateOneRequiredWithoutParticipationsNestedInput + booking?: Prisma.BookingUpdateOneWithoutParticipantNestedInput } export type TripParticipantUncheckedUpdateInput = { @@ -294,6 +300,7 @@ export type TripParticipantUncheckedUpdateInput = { paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null tripId?: Prisma.StringFieldUpdateOperationsInput | string userId?: Prisma.StringFieldUpdateOperationsInput | string + booking?: Prisma.BookingUncheckedUpdateOneWithoutParticipantNestedInput } export type TripParticipantCreateManyInput = { @@ -369,6 +376,11 @@ export type TripParticipantMinOrderByAggregateInput = { userId?: Prisma.SortOrder } +export type TripParticipantScalarRelationFilter = { + is?: Prisma.TripParticipantWhereInput + isNot?: Prisma.TripParticipantWhereInput +} + export type TripParticipantCreateNestedManyWithoutUserInput = { create?: Prisma.XOR | Prisma.TripParticipantCreateWithoutUserInput[] | Prisma.TripParticipantUncheckedCreateWithoutUserInput[] connectOrCreate?: Prisma.TripParticipantCreateOrConnectWithoutUserInput | Prisma.TripParticipantCreateOrConnectWithoutUserInput[] @@ -457,6 +469,20 @@ export type EnumParticipantStatusFieldUpdateOperationsInput = { set?: $Enums.ParticipantStatus } +export type TripParticipantCreateNestedOneWithoutBookingInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.TripParticipantCreateOrConnectWithoutBookingInput + connect?: Prisma.TripParticipantWhereUniqueInput +} + +export type TripParticipantUpdateOneRequiredWithoutBookingNestedInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.TripParticipantCreateOrConnectWithoutBookingInput + upsert?: Prisma.TripParticipantUpsertWithoutBookingInput + connect?: Prisma.TripParticipantWhereUniqueInput + update?: Prisma.XOR, Prisma.TripParticipantUncheckedUpdateWithoutBookingInput> +} + export type TripParticipantCreateWithoutUserInput = { id?: string status?: $Enums.ParticipantStatus @@ -464,6 +490,7 @@ export type TripParticipantCreateWithoutUserInput = { markedPaidAt?: Date | string | null paymentConfirmedAt?: Date | string | null trip: Prisma.TripCreateNestedOneWithoutParticipantsInput + booking?: Prisma.BookingCreateNestedOneWithoutParticipantInput } export type TripParticipantUncheckedCreateWithoutUserInput = { @@ -473,6 +500,7 @@ export type TripParticipantUncheckedCreateWithoutUserInput = { markedPaidAt?: Date | string | null paymentConfirmedAt?: Date | string | null tripId: string + booking?: Prisma.BookingUncheckedCreateNestedOneWithoutParticipantInput } export type TripParticipantCreateOrConnectWithoutUserInput = { @@ -521,6 +549,7 @@ export type TripParticipantCreateWithoutTripInput = { markedPaidAt?: Date | string | null paymentConfirmedAt?: Date | string | null user: Prisma.UserCreateNestedOneWithoutParticipationsInput + booking?: Prisma.BookingCreateNestedOneWithoutParticipantInput } export type TripParticipantUncheckedCreateWithoutTripInput = { @@ -530,6 +559,7 @@ export type TripParticipantUncheckedCreateWithoutTripInput = { markedPaidAt?: Date | string | null paymentConfirmedAt?: Date | string | null userId: string + booking?: Prisma.BookingUncheckedCreateNestedOneWithoutParticipantInput } export type TripParticipantCreateOrConnectWithoutTripInput = { @@ -558,6 +588,62 @@ export type TripParticipantUpdateManyWithWhereWithoutTripInput = { data: Prisma.XOR } +export type TripParticipantCreateWithoutBookingInput = { + id?: string + status?: $Enums.ParticipantStatus + createdAt?: Date | string + markedPaidAt?: Date | string | null + paymentConfirmedAt?: Date | string | null + trip: Prisma.TripCreateNestedOneWithoutParticipantsInput + user: Prisma.UserCreateNestedOneWithoutParticipationsInput +} + +export type TripParticipantUncheckedCreateWithoutBookingInput = { + id?: string + status?: $Enums.ParticipantStatus + createdAt?: Date | string + markedPaidAt?: Date | string | null + paymentConfirmedAt?: Date | string | null + tripId: string + userId: string +} + +export type TripParticipantCreateOrConnectWithoutBookingInput = { + where: Prisma.TripParticipantWhereUniqueInput + create: Prisma.XOR +} + +export type TripParticipantUpsertWithoutBookingInput = { + update: Prisma.XOR + create: Prisma.XOR + where?: Prisma.TripParticipantWhereInput +} + +export type TripParticipantUpdateToOneWithWhereWithoutBookingInput = { + where?: Prisma.TripParticipantWhereInput + data: Prisma.XOR +} + +export type TripParticipantUpdateWithoutBookingInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + trip?: Prisma.TripUpdateOneRequiredWithoutParticipantsNestedInput + user?: Prisma.UserUpdateOneRequiredWithoutParticipationsNestedInput +} + +export type TripParticipantUncheckedUpdateWithoutBookingInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + tripId?: Prisma.StringFieldUpdateOperationsInput | string + userId?: Prisma.StringFieldUpdateOperationsInput | string +} + export type TripParticipantCreateManyUserInput = { id?: string status?: $Enums.ParticipantStatus @@ -574,6 +660,7 @@ export type TripParticipantUpdateWithoutUserInput = { markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null trip?: Prisma.TripUpdateOneRequiredWithoutParticipantsNestedInput + booking?: Prisma.BookingUpdateOneWithoutParticipantNestedInput } export type TripParticipantUncheckedUpdateWithoutUserInput = { @@ -583,6 +670,7 @@ export type TripParticipantUncheckedUpdateWithoutUserInput = { markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null tripId?: Prisma.StringFieldUpdateOperationsInput | string + booking?: Prisma.BookingUncheckedUpdateOneWithoutParticipantNestedInput } export type TripParticipantUncheckedUpdateManyWithoutUserInput = { @@ -610,6 +698,7 @@ export type TripParticipantUpdateWithoutTripInput = { markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null user?: Prisma.UserUpdateOneRequiredWithoutParticipationsNestedInput + booking?: Prisma.BookingUpdateOneWithoutParticipantNestedInput } export type TripParticipantUncheckedUpdateWithoutTripInput = { @@ -619,6 +708,7 @@ export type TripParticipantUncheckedUpdateWithoutTripInput = { markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null userId?: Prisma.StringFieldUpdateOperationsInput | string + booking?: Prisma.BookingUncheckedUpdateOneWithoutParticipantNestedInput } export type TripParticipantUncheckedUpdateManyWithoutTripInput = { @@ -642,6 +732,7 @@ export type TripParticipantSelect user?: boolean | Prisma.UserDefaultArgs + booking?: boolean | Prisma.TripParticipant$bookingArgs }, ExtArgs["result"]["tripParticipant"]> export type TripParticipantSelectCreateManyAndReturn = runtime.Types.Extensions.GetSelect<{ @@ -682,6 +773,7 @@ export type TripParticipantOmit = { trip?: boolean | Prisma.TripDefaultArgs user?: boolean | Prisma.UserDefaultArgs + booking?: boolean | Prisma.TripParticipant$bookingArgs } export type TripParticipantIncludeCreateManyAndReturn = { trip?: boolean | Prisma.TripDefaultArgs @@ -697,17 +789,20 @@ export type $TripParticipantPayload user: Prisma.$UserPayload + booking: Prisma.$BookingPayload | null } scalars: runtime.Types.Extensions.GetPayloadResult<{ id: string status: $Enums.ParticipantStatus createdAt: Date /** - * Peserta menekan "Saya sudah bayar" (pembayaran manual) + * @deprecated — sumber kebenaran pindah ke Booking/Payment. Tetap di-update + * untuk backward-compat selama transisi UI lama. Akan dihapus PR berikutnya. */ markedPaidAt: Date | null /** - * Organizer mengonfirmasi uang sudah masuk + * @deprecated — sumber kebenaran pindah ke Booking/Payment. Tetap di-update + * untuk backward-compat selama transisi UI lama. Akan dihapus PR berikutnya. */ paymentConfirmedAt: Date | null tripId: string @@ -1108,6 +1203,7 @@ export interface Prisma__TripParticipantClient = {}>(args?: Prisma.Subset>): Prisma.Prisma__TripClient, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> user = {}>(args?: Prisma.Subset>): Prisma.Prisma__UserClient, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + booking = {}>(args?: Prisma.Subset>): Prisma.Prisma__BookingClient, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. @@ -1544,6 +1640,25 @@ export type TripParticipantDeleteManyArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + where?: Prisma.BookingWhereInput +} + /** * TripParticipant without action */ diff --git a/app/generated/prisma/models/User.ts b/app/generated/prisma/models/User.ts index 484f04f..7c5908f 100644 --- a/app/generated/prisma/models/User.ts +++ b/app/generated/prisma/models/User.ts @@ -226,6 +226,7 @@ export type UserWhereInput = { trips?: Prisma.TripListRelationFilter participations?: Prisma.TripParticipantListRelationFilter tripReviews?: Prisma.TripReviewListRelationFilter + bookings?: Prisma.BookingListRelationFilter organizerVerification?: Prisma.XOR | null reviewedVerifications?: Prisma.OrganizerVerificationListRelationFilter profile?: Prisma.XOR | null @@ -246,6 +247,7 @@ export type UserOrderByWithRelationInput = { trips?: Prisma.TripOrderByRelationAggregateInput participations?: Prisma.TripParticipantOrderByRelationAggregateInput tripReviews?: Prisma.TripReviewOrderByRelationAggregateInput + bookings?: Prisma.BookingOrderByRelationAggregateInput organizerVerification?: Prisma.OrganizerVerificationOrderByWithRelationInput reviewedVerifications?: Prisma.OrganizerVerificationOrderByRelationAggregateInput profile?: Prisma.UserProfileOrderByWithRelationInput @@ -269,6 +271,7 @@ export type UserWhereUniqueInput = Prisma.AtLeast<{ trips?: Prisma.TripListRelationFilter participations?: Prisma.TripParticipantListRelationFilter tripReviews?: Prisma.TripReviewListRelationFilter + bookings?: Prisma.BookingListRelationFilter organizerVerification?: Prisma.XOR | null reviewedVerifications?: Prisma.OrganizerVerificationListRelationFilter profile?: Prisma.XOR | null @@ -321,6 +324,7 @@ export type UserCreateInput = { trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileCreateNestedOneWithoutUserInput @@ -341,6 +345,7 @@ export type UserUncheckedCreateInput = { trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationUncheckedCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileUncheckedCreateNestedOneWithoutUserInput @@ -361,6 +366,7 @@ export type UserUpdateInput = { trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUpdateOneWithoutUserNestedInput @@ -381,6 +387,7 @@ export type UserUncheckedUpdateInput = { trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUncheckedUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUncheckedUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUncheckedUpdateOneWithoutUserNestedInput @@ -594,6 +601,20 @@ export type UserUpdateOneRequiredWithoutParticipationsNestedInput = { update?: Prisma.XOR, Prisma.UserUncheckedUpdateWithoutParticipationsInput> } +export type UserCreateNestedOneWithoutBookingsInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.UserCreateOrConnectWithoutBookingsInput + connect?: Prisma.UserWhereUniqueInput +} + +export type UserUpdateOneRequiredWithoutBookingsNestedInput = { + create?: Prisma.XOR + connectOrCreate?: Prisma.UserCreateOrConnectWithoutBookingsInput + upsert?: Prisma.UserUpsertWithoutBookingsInput + connect?: Prisma.UserWhereUniqueInput + update?: Prisma.XOR, Prisma.UserUncheckedUpdateWithoutBookingsInput> +} + export type UserCreateWithoutProfileInput = { id?: string name: string @@ -609,6 +630,7 @@ export type UserCreateWithoutProfileInput = { trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationCreateNestedManyWithoutReviewedByInput } @@ -628,6 +650,7 @@ export type UserUncheckedCreateWithoutProfileInput = { trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationUncheckedCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedCreateNestedManyWithoutReviewedByInput } @@ -663,6 +686,7 @@ export type UserUpdateWithoutProfileInput = { trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUpdateManyWithoutReviewedByNestedInput } @@ -682,6 +706,7 @@ export type UserUncheckedUpdateWithoutProfileInput = { trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUncheckedUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUncheckedUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedUpdateManyWithoutReviewedByNestedInput } @@ -700,6 +725,7 @@ export type UserCreateWithoutAccountsInput = { trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileCreateNestedOneWithoutUserInput @@ -719,6 +745,7 @@ export type UserUncheckedCreateWithoutAccountsInput = { trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationUncheckedCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileUncheckedCreateNestedOneWithoutUserInput @@ -754,6 +781,7 @@ export type UserUpdateWithoutAccountsInput = { trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUpdateOneWithoutUserNestedInput @@ -773,6 +801,7 @@ export type UserUncheckedUpdateWithoutAccountsInput = { trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUncheckedUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUncheckedUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUncheckedUpdateOneWithoutUserNestedInput @@ -793,6 +822,7 @@ export type UserCreateWithoutOrganizerVerificationInput = { trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingCreateNestedManyWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileCreateNestedOneWithoutUserInput } @@ -812,6 +842,7 @@ export type UserUncheckedCreateWithoutOrganizerVerificationInput = { trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileUncheckedCreateNestedOneWithoutUserInput } @@ -836,6 +867,7 @@ export type UserCreateWithoutReviewedVerificationsInput = { trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationCreateNestedOneWithoutUserInput profile?: Prisma.UserProfileCreateNestedOneWithoutUserInput } @@ -855,6 +887,7 @@ export type UserUncheckedCreateWithoutReviewedVerificationsInput = { trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationUncheckedCreateNestedOneWithoutUserInput profile?: Prisma.UserProfileUncheckedCreateNestedOneWithoutUserInput } @@ -890,6 +923,7 @@ export type UserUpdateWithoutOrganizerVerificationInput = { trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUpdateManyWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUpdateOneWithoutUserNestedInput } @@ -909,6 +943,7 @@ export type UserUncheckedUpdateWithoutOrganizerVerificationInput = { trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUncheckedUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUncheckedUpdateOneWithoutUserNestedInput } @@ -939,6 +974,7 @@ export type UserUpdateWithoutReviewedVerificationsInput = { trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUpdateOneWithoutUserNestedInput profile?: Prisma.UserProfileUpdateOneWithoutUserNestedInput } @@ -958,6 +994,7 @@ export type UserUncheckedUpdateWithoutReviewedVerificationsInput = { trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUncheckedUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUncheckedUpdateOneWithoutUserNestedInput profile?: Prisma.UserProfileUncheckedUpdateOneWithoutUserNestedInput } @@ -976,6 +1013,7 @@ export type UserCreateWithoutTripsInput = { accounts?: Prisma.AccountCreateNestedManyWithoutUserInput participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileCreateNestedOneWithoutUserInput @@ -995,6 +1033,7 @@ export type UserUncheckedCreateWithoutTripsInput = { accounts?: Prisma.AccountUncheckedCreateNestedManyWithoutUserInput participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput tripReviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationUncheckedCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileUncheckedCreateNestedOneWithoutUserInput @@ -1030,6 +1069,7 @@ export type UserUpdateWithoutTripsInput = { accounts?: Prisma.AccountUpdateManyWithoutUserNestedInput participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUpdateOneWithoutUserNestedInput @@ -1049,6 +1089,7 @@ export type UserUncheckedUpdateWithoutTripsInput = { accounts?: Prisma.AccountUncheckedUpdateManyWithoutUserNestedInput participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput tripReviews?: Prisma.TripReviewUncheckedUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUncheckedUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUncheckedUpdateOneWithoutUserNestedInput @@ -1068,6 +1109,7 @@ export type UserCreateWithoutTripReviewsInput = { accounts?: Prisma.AccountCreateNestedManyWithoutUserInput trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileCreateNestedOneWithoutUserInput @@ -1087,6 +1129,7 @@ export type UserUncheckedCreateWithoutTripReviewsInput = { accounts?: Prisma.AccountUncheckedCreateNestedManyWithoutUserInput trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationUncheckedCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileUncheckedCreateNestedOneWithoutUserInput @@ -1122,6 +1165,7 @@ export type UserUpdateWithoutTripReviewsInput = { accounts?: Prisma.AccountUpdateManyWithoutUserNestedInput trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUpdateOneWithoutUserNestedInput @@ -1141,6 +1185,7 @@ export type UserUncheckedUpdateWithoutTripReviewsInput = { accounts?: Prisma.AccountUncheckedUpdateManyWithoutUserNestedInput trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUncheckedUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUncheckedUpdateOneWithoutUserNestedInput @@ -1160,6 +1205,7 @@ export type UserCreateWithoutParticipationsInput = { accounts?: Prisma.AccountCreateNestedManyWithoutUserInput trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput tripReviews?: Prisma.TripReviewCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileCreateNestedOneWithoutUserInput @@ -1179,6 +1225,7 @@ export type UserUncheckedCreateWithoutParticipationsInput = { accounts?: Prisma.AccountUncheckedCreateNestedManyWithoutUserInput trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput tripReviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutUserInput + bookings?: Prisma.BookingUncheckedCreateNestedManyWithoutUserInput organizerVerification?: Prisma.OrganizerVerificationUncheckedCreateNestedOneWithoutUserInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedCreateNestedManyWithoutReviewedByInput profile?: Prisma.UserProfileUncheckedCreateNestedOneWithoutUserInput @@ -1214,6 +1261,7 @@ export type UserUpdateWithoutParticipationsInput = { accounts?: Prisma.AccountUpdateManyWithoutUserNestedInput trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput tripReviews?: Prisma.TripReviewUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUpdateOneWithoutUserNestedInput @@ -1233,6 +1281,103 @@ export type UserUncheckedUpdateWithoutParticipationsInput = { accounts?: Prisma.AccountUncheckedUpdateManyWithoutUserNestedInput trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput tripReviews?: Prisma.TripReviewUncheckedUpdateManyWithoutUserNestedInput + bookings?: Prisma.BookingUncheckedUpdateManyWithoutUserNestedInput + organizerVerification?: Prisma.OrganizerVerificationUncheckedUpdateOneWithoutUserNestedInput + reviewedVerifications?: Prisma.OrganizerVerificationUncheckedUpdateManyWithoutReviewedByNestedInput + profile?: Prisma.UserProfileUncheckedUpdateOneWithoutUserNestedInput +} + +export type UserCreateWithoutBookingsInput = { + id?: string + name: string + email: string + password?: string | null + image?: string | null + emailVerified?: Date | string | null + acceptedTermsAndPrivacy?: boolean + acceptedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + accounts?: Prisma.AccountCreateNestedManyWithoutUserInput + trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput + participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput + tripReviews?: Prisma.TripReviewCreateNestedManyWithoutUserInput + organizerVerification?: Prisma.OrganizerVerificationCreateNestedOneWithoutUserInput + reviewedVerifications?: Prisma.OrganizerVerificationCreateNestedManyWithoutReviewedByInput + profile?: Prisma.UserProfileCreateNestedOneWithoutUserInput +} + +export type UserUncheckedCreateWithoutBookingsInput = { + id?: string + name: string + email: string + password?: string | null + image?: string | null + emailVerified?: Date | string | null + acceptedTermsAndPrivacy?: boolean + acceptedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + accounts?: Prisma.AccountUncheckedCreateNestedManyWithoutUserInput + trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput + participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput + tripReviews?: Prisma.TripReviewUncheckedCreateNestedManyWithoutUserInput + organizerVerification?: Prisma.OrganizerVerificationUncheckedCreateNestedOneWithoutUserInput + reviewedVerifications?: Prisma.OrganizerVerificationUncheckedCreateNestedManyWithoutReviewedByInput + profile?: Prisma.UserProfileUncheckedCreateNestedOneWithoutUserInput +} + +export type UserCreateOrConnectWithoutBookingsInput = { + where: Prisma.UserWhereUniqueInput + create: Prisma.XOR +} + +export type UserUpsertWithoutBookingsInput = { + update: Prisma.XOR + create: Prisma.XOR + where?: Prisma.UserWhereInput +} + +export type UserUpdateToOneWithWhereWithoutBookingsInput = { + where?: Prisma.UserWhereInput + data: Prisma.XOR +} + +export type UserUpdateWithoutBookingsInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + name?: Prisma.StringFieldUpdateOperationsInput | string + email?: Prisma.StringFieldUpdateOperationsInput | string + password?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + acceptedTermsAndPrivacy?: Prisma.BoolFieldUpdateOperationsInput | boolean + acceptedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + accounts?: Prisma.AccountUpdateManyWithoutUserNestedInput + trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput + participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput + tripReviews?: Prisma.TripReviewUpdateManyWithoutUserNestedInput + organizerVerification?: Prisma.OrganizerVerificationUpdateOneWithoutUserNestedInput + reviewedVerifications?: Prisma.OrganizerVerificationUpdateManyWithoutReviewedByNestedInput + profile?: Prisma.UserProfileUpdateOneWithoutUserNestedInput +} + +export type UserUncheckedUpdateWithoutBookingsInput = { + id?: Prisma.StringFieldUpdateOperationsInput | string + name?: Prisma.StringFieldUpdateOperationsInput | string + email?: Prisma.StringFieldUpdateOperationsInput | string + password?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + acceptedTermsAndPrivacy?: Prisma.BoolFieldUpdateOperationsInput | boolean + acceptedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string + accounts?: Prisma.AccountUncheckedUpdateManyWithoutUserNestedInput + trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput + participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput + tripReviews?: Prisma.TripReviewUncheckedUpdateManyWithoutUserNestedInput organizerVerification?: Prisma.OrganizerVerificationUncheckedUpdateOneWithoutUserNestedInput reviewedVerifications?: Prisma.OrganizerVerificationUncheckedUpdateManyWithoutReviewedByNestedInput profile?: Prisma.UserProfileUncheckedUpdateOneWithoutUserNestedInput @@ -1248,6 +1393,7 @@ export type UserCountOutputType = { trips: number participations: number tripReviews: number + bookings: number reviewedVerifications: number } @@ -1256,6 +1402,7 @@ export type UserCountOutputTypeSelect = { + where?: Prisma.BookingWhereInput +} + /** * UserCountOutputType without action */ @@ -1320,6 +1474,7 @@ export type UserSelect participations?: boolean | Prisma.User$participationsArgs tripReviews?: boolean | Prisma.User$tripReviewsArgs + bookings?: boolean | Prisma.User$bookingsArgs organizerVerification?: boolean | Prisma.User$organizerVerificationArgs reviewedVerifications?: boolean | Prisma.User$reviewedVerificationsArgs profile?: boolean | Prisma.User$profileArgs @@ -1371,6 +1526,7 @@ export type UserInclude participations?: boolean | Prisma.User$participationsArgs tripReviews?: boolean | Prisma.User$tripReviewsArgs + bookings?: boolean | Prisma.User$bookingsArgs organizerVerification?: boolean | Prisma.User$organizerVerificationArgs reviewedVerifications?: boolean | Prisma.User$reviewedVerificationsArgs profile?: boolean | Prisma.User$profileArgs @@ -1386,6 +1542,7 @@ export type $UserPayload[] participations: Prisma.$TripParticipantPayload[] tripReviews: Prisma.$TripReviewPayload[] + bookings: Prisma.$BookingPayload[] organizerVerification: Prisma.$OrganizerVerificationPayload | null reviewedVerifications: Prisma.$OrganizerVerificationPayload[] profile: Prisma.$UserProfilePayload | null @@ -1811,6 +1968,7 @@ export interface Prisma__UserClient = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> participations = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> tripReviews = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> + bookings = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> organizerVerification = {}>(args?: Prisma.Subset>): Prisma.Prisma__OrganizerVerificationClient, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> reviewedVerifications = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null> profile = {}>(args?: Prisma.Subset>): Prisma.Prisma__UserProfileClient, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> @@ -2341,6 +2499,30 @@ export type User$tripReviewsArgs = { + /** + * Select specific fields to fetch from the Booking + */ + select?: Prisma.BookingSelect | null + /** + * Omit specific fields from the Booking + */ + omit?: Prisma.BookingOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: Prisma.BookingInclude | null + where?: Prisma.BookingWhereInput + orderBy?: Prisma.BookingOrderByWithRelationInput | Prisma.BookingOrderByWithRelationInput[] + cursor?: Prisma.BookingWhereUniqueInput + take?: number + skip?: number + distinct?: Prisma.BookingScalarFieldEnum | Prisma.BookingScalarFieldEnum[] +} + /** * User.organizerVerification */ diff --git a/app/trips/[id]/page.tsx b/app/trips/[id]/page.tsx index 7dc307f..8828bfc 100644 --- a/app/trips/[id]/page.tsx +++ b/app/trips/[id]/page.tsx @@ -5,6 +5,7 @@ import Link from "next/link"; import Image from "next/image"; import { authOptions } from "@/lib/auth"; import { tripService } from "@/server/services/trip.service"; +import { bookingService } from "@/server/services/booking.service"; import { trustService } from "@/server/services/trust.service"; import { formatRupiah } from "@/lib/utils"; import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates"; @@ -128,11 +129,13 @@ export default async function TripDetailPage({ : null; const tripIsFree = isFreeTrip(trip); - const paymentPendingParticipants = tripIsFree - ? [] - : activeParticipants.filter( - (p) => p.markedPaidAt && !p.paymentConfirmedAt - ); + + // Antrian konfirmasi pembayaran: source dari Booking + Payment (B9). + // Hanya organizer yang butuh data ini, dan hanya untuk trip berbayar. + const paymentPendingBookings = + !tripIsFree && isOrganizer + ? await bookingService.getAwaitingManualForTrip(trip.id) + : []; const catMeta = categoryMeta(trip.category); @@ -412,14 +415,13 @@ export default async function TripDetailPage({ /> )} - {isOrganizer && paymentPendingParticipants.length > 0 && ( + {isOrganizer && paymentPendingBookings.length > 0 && ( ({ - id: p.id, - user: p.user, - joinStatus: - p.status === "PENDING" ? ("PENDING" as const) : ("CONFIRMED" as const), + items={paymentPendingBookings.map((b) => ({ + id: b.participantId, + user: { name: b.user.name, image: b.user.image }, + joinStatus: "CONFIRMED" as const, }))} /> )} diff --git a/app/trips/[id]/payment/page.tsx b/app/trips/[id]/payment/page.tsx index 5fc4d73..57342d3 100644 --- a/app/trips/[id]/payment/page.tsx +++ b/app/trips/[id]/payment/page.tsx @@ -5,6 +5,7 @@ import { getServerSession } from "next-auth"; import { authOptions } from "@/lib/auth"; import { tripService } from "@/server/services/trip.service"; import { organizerService } from "@/server/services/organizer.service"; +import { bookingService } from "@/server/services/booking.service"; import { formatRupiah } from "@/lib/utils"; import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates"; import { isFreeTrip } from "@/lib/trip-pricing"; @@ -40,17 +41,18 @@ export default async function PaymentPage({ params }: PageProps) { redirect(`/trips/${id}`); } - const myParticipation = trip.participants.find( - (p) => p.userId === session.user.id && p.status !== "CANCELLED" + const booking = await bookingService.getByTripAndUser( + trip.id, + session.user.id ); - if (!myParticipation || myParticipation.status === "CANCELLED") { - return ( - - ); + if (!booking || booking.status === "CANCELLED") { + return ; } - // Narrowed: status sudah pasti PENDING atau CONFIRMED - const activeStatus: "PENDING" | "CONFIRMED" = myParticipation.status; + + const latestManualPayment = booking.payments.find( + (p) => p.provider === "MANUAL" + ); const tripIsFree = isFreeTrip(trip); const catMeta = categoryMeta(trip.category); @@ -109,7 +111,7 @@ export default async function PaymentPage({ params }: PageProps) { {tripIsFree ? ( ) : ( )} @@ -148,10 +154,10 @@ function NotJoinedNotice({ tripId, title }: { tripId: string; title: string }) { function FreeTripSection({ tripId, - participationStatus, + bookingStatus, }: { tripId: string; - participationStatus: "PENDING" | "CONFIRMED"; + bookingStatus: "PENDING" | "AWAITING_PAY" | "PAID" | "CANCELLED" | "REFUNDED" | "EXPIRED"; }) { return (
@@ -170,7 +176,7 @@ function FreeTripSection({ Status keikutsertaan

- {participationStatus === "CONFIRMED" + {bookingStatus === "PAID" ? "✅ Terkonfirmasi sebagai peserta" : "⏳ Menunggu persetujuan organizer"}

@@ -193,30 +199,33 @@ async function PaidTripSection({ organizerId, organizerName, price, - participationStatus, - markedPaidAt, - paymentConfirmedAt, + bookingStatus, + paymentMarkedAt, + paymentPaidAt, }: { tripId: string; organizerId: string; organizerName: string; price: number; - participationStatus: "PENDING" | "CONFIRMED"; - markedPaidAt: Date | null; - paymentConfirmedAt: Date | null; + bookingStatus: "PENDING" | "AWAITING_PAY" | "PAID" | "CANCELLED" | "REFUNDED" | "EXPIRED"; + paymentMarkedAt: Date | null; + paymentPaidAt: Date | null; }) { const verification = await organizerService.getStatusForUser(organizerId); const bankAvailable = verification?.status === "APPROVED"; - const canMarkPaid = - participationStatus === "CONFIRMED" && !markedPaidAt && !paymentConfirmedAt; - const showStatusOnly = !!markedPaidAt; + + const isApproved = bookingStatus === "AWAITING_PAY" || bookingStatus === "PAID"; + const isPendingApproval = bookingStatus === "PENDING"; + const hasMarkedPaid = !!paymentMarkedAt || !!paymentPaidAt; + const isFullyPaid = bookingStatus === "PAID"; + const canMarkPaid = bookingStatus === "AWAITING_PAY" && !paymentMarkedAt; return (
{!bankAvailable && ( @@ -277,7 +286,7 @@ async function PaidTripSection({
)} - {participationStatus === "PENDING" && ( + {isPendingApproval && (
Kamu belum disetujui organizer untuk ikut trip ini. Tunggu persetujuan dulu sebelum transfer — supaya tidak perlu refund kalau ditolak. @@ -288,9 +297,9 @@ async function PaidTripSection({ )} - {showStatusOnly && ( + {hasMarkedPaid && (
- {paymentConfirmedAt ? ( + {isFullyPaid ? (

✅ Pembayaran kamu sudah dikonfirmasi oleh{" "} @@ -320,27 +329,18 @@ async function PaidTripSection({ } function PaymentTimeline({ - participationStatus, - markedPaidAt, - paymentConfirmedAt, + approved, + markedPaid, + confirmedPaid, }: { - participationStatus: "PENDING" | "CONFIRMED"; - markedPaidAt: Date | null; - paymentConfirmedAt: Date | null; + approved: boolean; + markedPaid: boolean; + confirmedPaid: boolean; }) { const steps = [ - { - label: "Disetujui organizer", - done: participationStatus === "CONFIRMED", - }, - { - label: "Kamu menandai sudah bayar", - done: !!markedPaidAt, - }, - { - label: "Organizer konfirmasi pembayaran", - done: !!paymentConfirmedAt, - }, + { label: "Disetujui organizer", done: approved }, + { label: "Kamu menandai sudah bayar", done: markedPaid }, + { label: "Organizer konfirmasi pembayaran", done: confirmedPaid }, ]; return ( diff --git a/prisma/backfill-bookings.ts b/prisma/backfill-bookings.ts new file mode 100644 index 0000000..b0dbe12 --- /dev/null +++ b/prisma/backfill-bookings.ts @@ -0,0 +1,101 @@ +/** + * Backfill Booking + Payment dari TripParticipant lama. + * + * Idempotent — jalan ulang aman. Skip baris yang sudah punya Booking. + * + * Mapping: + * - participant.status === "CANCELLED" → Booking CANCELLED, no Payment + * - participant.status === "PENDING" → Booking PENDING, no Payment + * - participant.status === "CONFIRMED" + free → Booking PAID, no Payment + * - participant.status === "CONFIRMED" + paid: + * - paymentConfirmedAt set → Booking PAID, Payment PAID (paidAt = paymentConfirmedAt) + * - markedPaidAt set, no confirm → Booking AWAITING_PAY, Payment AWAITING + * - neither → Booking AWAITING_PAY, no Payment + * + * Jalankan: `npx tsx prisma/backfill-bookings.ts` + */ +import { PrismaClient, Prisma } from "../app/generated/prisma/client"; +import { PrismaPg } from "@prisma/adapter-pg"; + +const adapter = new PrismaPg({ + connectionString: process.env.DATABASE_URL!, +}); +const prisma = new PrismaClient({ adapter }); + +async function main() { + const participants = await prisma.tripParticipant.findMany({ + include: { + trip: { select: { price: true } }, + booking: { select: { id: true } }, + }, + orderBy: { createdAt: "asc" }, + }); + + let createdBookings = 0; + let createdPayments = 0; + let skipped = 0; + + for (const p of participants) { + if (p.booking) { + skipped++; + continue; + } + + const isFree = p.trip.price <= 0; + + let bookingStatus: Prisma.BookingCreateInput["status"]; + if (p.status === "CANCELLED") { + bookingStatus = "CANCELLED"; + } else if (p.status === "PENDING") { + bookingStatus = "PENDING"; + } else if (isFree) { + bookingStatus = "PAID"; + } else if (p.paymentConfirmedAt) { + bookingStatus = "PAID"; + } else { + bookingStatus = "AWAITING_PAY"; + } + + const booking = await prisma.booking.create({ + data: { + tripId: p.tripId, + userId: p.userId, + participantId: p.id, + amount: p.trip.price, + status: bookingStatus, + }, + }); + createdBookings++; + + // Payment row hanya kalau ada jejak pembayaran manual + if (!isFree && (p.markedPaidAt || p.paymentConfirmedAt)) { + const paymentStatus: Prisma.PaymentCreateInput["status"] = + p.paymentConfirmedAt ? "PAID" : "AWAITING"; + await prisma.payment.create({ + data: { + bookingId: booking.id, + provider: "MANUAL", + externalOrderId: `manual-${booking.id}`, + amount: p.trip.price, + status: paymentStatus, + method: "manual_transfer", + paidAt: p.paymentConfirmedAt ?? null, + }, + }); + createdPayments++; + } + } + + console.log( + `✅ Backfill selesai. Booking dibuat: ${createdBookings}, Payment dibuat: ${createdPayments}, dilewati (sudah ada): ${skipped}` + ); +} + +main() + .catch((e) => { + console.error("❌ Backfill gagal:", e); + process.exit(1); + }) + .finally(async () => { + await prisma.$disconnect(); + }); diff --git a/prisma/migrations/20260508150000_add_booking_payment/migration.sql b/prisma/migrations/20260508150000_add_booking_payment/migration.sql new file mode 100644 index 0000000..653e8ee --- /dev/null +++ b/prisma/migrations/20260508150000_add_booking_payment/migration.sql @@ -0,0 +1,75 @@ +-- CreateEnum +CREATE TYPE "BookingStatus" AS ENUM ('PENDING', 'AWAITING_PAY', 'PAID', 'CANCELLED', 'REFUNDED', 'EXPIRED'); + +-- CreateEnum +CREATE TYPE "PaymentProvider" AS ENUM ('MANUAL', 'MIDTRANS'); + +-- CreateEnum +CREATE TYPE "PaymentStatus" AS ENUM ('PENDING', 'AWAITING', 'PAID', 'FAILED', 'EXPIRED', 'CANCELLED', 'REFUNDED'); + +-- CreateTable +CREATE TABLE "Booking" ( + "id" TEXT NOT NULL, + "tripId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "participantId" TEXT NOT NULL, + "amount" INTEGER NOT NULL, + "currency" TEXT NOT NULL DEFAULT 'IDR', + "status" "BookingStatus" NOT NULL DEFAULT 'PENDING', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Booking_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Payment" ( + "id" TEXT NOT NULL, + "bookingId" TEXT NOT NULL, + "provider" "PaymentProvider" NOT NULL, + "externalOrderId" TEXT NOT NULL, + "externalTxId" TEXT, + "method" TEXT, + "amount" INTEGER NOT NULL, + "status" "PaymentStatus" NOT NULL DEFAULT 'PENDING', + "rawCallback" JSONB, + "snapToken" TEXT, + "expiresAt" TIMESTAMP(3), + "paidAt" TIMESTAMP(3), + "failedAt" TIMESTAMP(3), + "rejectionReason" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Payment_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Booking_participantId_key" ON "Booking"("participantId"); + +-- CreateIndex +CREATE INDEX "Booking_tripId_status_idx" ON "Booking"("tripId", "status"); + +-- CreateIndex +CREATE INDEX "Booking_userId_idx" ON "Booking"("userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Payment_externalOrderId_key" ON "Payment"("externalOrderId"); + +-- CreateIndex +CREATE INDEX "Payment_bookingId_status_idx" ON "Payment"("bookingId", "status"); + +-- CreateIndex +CREATE INDEX "Payment_provider_status_idx" ON "Payment"("provider", "status"); + +-- AddForeignKey +ALTER TABLE "Booking" ADD CONSTRAINT "Booking_tripId_fkey" FOREIGN KEY ("tripId") REFERENCES "Trip"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Booking" ADD CONSTRAINT "Booking_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Booking" ADD CONSTRAINT "Booking_participantId_fkey" FOREIGN KEY ("participantId") REFERENCES "TripParticipant"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Payment" ADD CONSTRAINT "Payment_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d3c06b3..1e338d8 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -8,38 +8,39 @@ datasource db { } model User { - id String @id @default(cuid()) - name String - email String @unique + id String @id @default(cuid()) + name String + email String @unique /// Hash bcrypt. Null untuk user yang sign-in via OAuth (mis. Google). - password String? - image String? + password String? + image String? /// Diisi PrismaAdapter NextAuth saat email diverifikasi provider OAuth (Google selalu sudah verified). - emailVerified DateTime? + emailVerified DateTime? /// Apakah user telah menyetujui Syarat & Ketentuan dan Kebijakan Privasi - acceptedTermsAndPrivacy Boolean @default(false) + acceptedTermsAndPrivacy Boolean @default(false) /// Waktu user menyetujui Syarat & Ketentuan dan Kebijakan Privasi - acceptedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + acceptedAt DateTime? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt accounts Account[] trips Trip[] participations TripParticipant[] tripReviews TripReview[] + bookings Booking[] - organizerVerification OrganizerVerification? @relation("OrganizerVerificationOwner") - reviewedVerifications OrganizerVerification[] @relation("OrganizerVerificationReviewer") + organizerVerification OrganizerVerification? @relation("OrganizerVerificationOwner") + reviewedVerifications OrganizerVerification[] @relation("OrganizerVerificationReviewer") - profile UserProfile? + profile UserProfile? } /// Profil sosial publik. Berisi info yang user pilih untuk dibagikan ke peserta lain /// (bio, kota, minat, vibe). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. model UserProfile { - id String @id @default(cuid()) - userId String @unique - user User @relation(fields: [userId], references: [id], onDelete: Cascade) + id String @id @default(cuid()) + userId String @unique + user User @relation(fields: [userId], references: [id], onDelete: Cascade) /// Bio singkat, teks bebas bio String? @@ -89,13 +90,13 @@ model OrganizerVerification { user User @relation("OrganizerVerificationOwner", fields: [userId], references: [id], onDelete: Cascade) /// Nama lengkap sesuai KTP - fullName String + fullName String /// NIK terenkripsi (AES-256-GCM, base64). Plaintext tidak disimpan. nikEncrypted String /// HMAC-SHA256(NIK + pepper) untuk uniqueness lookup tanpa membuka plaintext. - nikHash String @unique - birthDate DateTime - address String + nikHash String @unique + birthDate DateTime + address String /// Storage key foto KTP (mis. `ktp/.jpg`). File disimpan terenkripsi di luar /public. ktpImageKey String @@ -111,7 +112,7 @@ model OrganizerVerification { rejectionReason String? reviewedAt DateTime? reviewedById String? - reviewedBy User? @relation("OrganizerVerificationReviewer", fields: [reviewedById], references: [id]) + reviewedBy User? @relation("OrganizerVerificationReviewer", fields: [reviewedById], references: [id]) verifiedAt DateTime? createdAt DateTime @default(now()) @@ -125,7 +126,7 @@ enum VerificationStatus { } model Trip { - id String @id @default(cuid()) + id String @id @default(cuid()) title String description String? /// Kategori aktivitas. @@ -147,16 +148,17 @@ model Trip { price Int /// Ritme/energi trip — dipakai untuk matching dengan vibe user. vibe Vibe? - status TripStatus @default(OPEN) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + status TripStatus @default(OPEN) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt organizerId String - organizer User @relation(fields: [organizerId], references: [id]) + organizer User @relation(fields: [organizerId], references: [id]) participants TripParticipant[] images TripImage[] reviews TripReview[] + bookings Booking[] @@index([category, status, date]) @@index([vibe, status, date]) @@ -170,38 +172,42 @@ model TripReview { updatedAt DateTime @updatedAt tripId String - trip Trip @relation(fields: [tripId], references: [id], onDelete: Cascade) + trip Trip @relation(fields: [tripId], references: [id], onDelete: Cascade) userId String - user User @relation(fields: [userId], references: [id], onDelete: Cascade) + user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([tripId, userId]) } model TripImage { - id String @id @default(cuid()) - url String - caption String? - order Int @default(0) + id String @id @default(cuid()) + url String + caption String? + order Int @default(0) tripId String - trip Trip @relation(fields: [tripId], references: [id], onDelete: Cascade) + trip Trip @relation(fields: [tripId], references: [id], onDelete: Cascade) } model TripParticipant { - id String @id @default(cuid()) - status ParticipantStatus @default(PENDING) - createdAt DateTime @default(now()) - /// Peserta menekan "Saya sudah bayar" (pembayaran manual) - markedPaidAt DateTime? - /// Organizer mengonfirmasi uang sudah masuk - paymentConfirmedAt DateTime? + id String @id @default(cuid()) + status ParticipantStatus @default(PENDING) + createdAt DateTime @default(now()) + /// @deprecated — sumber kebenaran pindah ke Booking/Payment. Tetap di-update + /// untuk backward-compat selama transisi UI lama. Akan dihapus PR berikutnya. + markedPaidAt DateTime? + /// @deprecated — sumber kebenaran pindah ke Booking/Payment. Tetap di-update + /// untuk backward-compat selama transisi UI lama. Akan dihapus PR berikutnya. + paymentConfirmedAt DateTime? tripId String - trip Trip @relation(fields: [tripId], references: [id]) + trip Trip @relation(fields: [tripId], references: [id]) userId String - user User @relation(fields: [userId], references: [id]) + user User @relation(fields: [userId], references: [id]) + + booking Booking? @@unique([tripId, userId]) } @@ -231,3 +237,91 @@ enum ParticipantStatus { CONFIRMED CANCELLED } + +/// Booking 1-1 ke TripParticipant. Lifecycle ikut peserta: +/// - join → Booking PENDING (menunggu approve organizer) +/// - organizer confirm → AWAITING_PAY (paid trip) atau PAID (free trip) +/// - peserta + organizer rampungkan pembayaran → PAID +/// - cancel/reject → CANCELLED +/// `amount` adalah snapshot harga saat booking dibuat — protect dari perubahan trip.price. +model Booking { + id String @id @default(cuid()) + tripId String + trip Trip @relation(fields: [tripId], references: [id]) + userId String + user User @relation(fields: [userId], references: [id]) + participantId String @unique + participant TripParticipant @relation(fields: [participantId], references: [id], onDelete: Cascade) + + amount Int + currency String @default("IDR") + status BookingStatus @default(PENDING) + + payments Payment[] + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([tripId, status]) + @@index([userId]) +} + +enum BookingStatus { + PENDING + AWAITING_PAY + PAID + CANCELLED + REFUNDED + EXPIRED +} + +/// Satu attempt pembayaran. Satu Booking bisa punya banyak Payment kalau retry +/// (di Phase MIDTRANS nanti). Untuk MANUAL biasanya cukup 1 Payment. +model Payment { + id String @id @default(cuid()) + bookingId String + booking Booking @relation(fields: [bookingId], references: [id], onDelete: Cascade) + + provider PaymentProvider + /// order_id eksternal (unik per attempt). Format MANUAL: `manual-`. + /// Format MIDTRANS nanti: `midtrans--`. + externalOrderId String @unique + /// transaction_id dari gateway. Kosong untuk MANUAL atau sebelum first callback. + externalTxId String? + /// Metode konkret: bca_va, gopay, qris, manual_transfer, dst. + method String? + amount Int + status PaymentStatus @default(PENDING) + + /// Snapshot mentah callback gateway (untuk audit & dispute). + rawCallback Json? + /// Snap token Midtrans / redirect URL. + snapToken String? + /// Kapan attempt ini kadaluarsa (Midtrans default 24 jam). + expiresAt DateTime? + + paidAt DateTime? + failedAt DateTime? + rejectionReason String? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([bookingId, status]) + @@index([provider, status]) +} + +enum PaymentProvider { + MANUAL + MIDTRANS +} + +enum PaymentStatus { + PENDING + AWAITING + PAID + FAILED + EXPIRED + CANCELLED + REFUNDED +} diff --git a/server/repositories/booking.repo.ts b/server/repositories/booking.repo.ts new file mode 100644 index 0000000..853820f --- /dev/null +++ b/server/repositories/booking.repo.ts @@ -0,0 +1,74 @@ +import { prisma } from "@/lib/prisma"; +import { Prisma } from "@/app/generated/prisma/client"; + +export const bookingRepo = { + async findById(id: string) { + return prisma.booking.findUnique({ where: { id } }); + }, + + async findByParticipantId(participantId: string) { + return prisma.booking.findUnique({ + where: { participantId }, + include: { payments: { orderBy: { createdAt: "desc" } } }, + }); + }, + + async findByTripAndUser(tripId: string, userId: string) { + return prisma.booking.findFirst({ + where: { tripId, userId }, + include: { payments: { orderBy: { createdAt: "desc" } } }, + }); + }, + + /** + * Daftar booking di trip ini yang masih menunggu konfirmasi pembayaran + * dari organizer (Payment MANUAL status AWAITING). + */ + async findAwaitingManualConfirmation(tripId: string) { + return prisma.booking.findMany({ + where: { + tripId, + status: "AWAITING_PAY", + payments: { + some: { provider: "MANUAL", status: "AWAITING" }, + }, + }, + include: { + participant: true, + user: { select: { id: true, name: true, image: true } }, + payments: { + where: { provider: "MANUAL", status: "AWAITING" }, + orderBy: { createdAt: "desc" }, + take: 1, + }, + }, + orderBy: { updatedAt: "asc" }, + }); + }, + + async create( + data: Pick< + Prisma.BookingUncheckedCreateInput, + "tripId" | "userId" | "participantId" | "amount" | "status" + > + ) { + return prisma.booking.create({ data }); + }, + + async updateStatus(id: string, status: Prisma.BookingUpdateInput["status"]) { + return prisma.booking.update({ + where: { id }, + data: { status }, + }); + }, + + async updateStatusByParticipantId( + participantId: string, + status: Prisma.BookingUpdateInput["status"] + ) { + return prisma.booking.updateMany({ + where: { participantId }, + data: { status }, + }); + }, +}; diff --git a/server/repositories/payment.repo.ts b/server/repositories/payment.repo.ts new file mode 100644 index 0000000..ade1c02 --- /dev/null +++ b/server/repositories/payment.repo.ts @@ -0,0 +1,42 @@ +import { prisma } from "@/lib/prisma"; +import { Prisma } from "@/app/generated/prisma/client"; + +export const paymentRepo = { + async findById(id: string) { + return prisma.payment.findUnique({ where: { id } }); + }, + + async findByExternalOrderId(externalOrderId: string) { + return prisma.payment.findUnique({ where: { externalOrderId } }); + }, + + async findActiveManualForBooking(bookingId: string) { + return prisma.payment.findFirst({ + where: { + bookingId, + provider: "MANUAL", + status: { in: ["PENDING", "AWAITING"] }, + }, + orderBy: { createdAt: "desc" }, + }); + }, + + async create( + data: Pick< + Prisma.PaymentUncheckedCreateInput, + | "bookingId" + | "provider" + | "externalOrderId" + | "amount" + | "status" + | "method" + | "expiresAt" + > + ) { + return prisma.payment.create({ data }); + }, + + async update(id: string, data: Prisma.PaymentUpdateInput) { + return prisma.payment.update({ where: { id }, data }); + }, +}; diff --git a/server/services/booking.service.ts b/server/services/booking.service.ts new file mode 100644 index 0000000..4bed549 --- /dev/null +++ b/server/services/booking.service.ts @@ -0,0 +1,216 @@ +import { Prisma } from "@/app/generated/prisma/client"; +import { prisma } from "@/lib/prisma"; +import { bookingRepo } from "@/server/repositories/booking.repo"; +import { paymentRepo } from "@/server/repositories/payment.repo"; + +const SERIAL_TX_ATTEMPTS = 6; + +function isSerializationConflict(err: unknown): boolean { + return ( + typeof err === "object" && + err !== null && + "code" in err && + (err as { code: string }).code === "P2034" + ); +} + +function manualOrderId(bookingId: string): string { + return `manual-${bookingId}`; +} + +export const bookingService = { + async getByParticipantId(participantId: string) { + return bookingRepo.findByParticipantId(participantId); + }, + + async getByTripAndUser(tripId: string, userId: string) { + return bookingRepo.findByTripAndUser(tripId, userId); + }, + + /** + * Peserta tandai sudah transfer manual. Idempotent: kalau sudah ada Payment + * MANUAL aktif, biarkan; kalau Booking sudah PAID, tolak. + */ + async markPaidManual(bookingId: string, userId: string) { + let lastErr: unknown; + for (let attempt = 0; attempt < SERIAL_TX_ATTEMPTS; attempt++) { + try { + return await prisma.$transaction( + async (tx) => { + const booking = await tx.booking.findUnique({ + where: { id: bookingId }, + include: { trip: { select: { price: true } } }, + }); + if (!booking) { + throw new Error("Booking tidak ditemukan"); + } + if (booking.userId !== userId) { + throw new Error("Booking ini bukan milikmu"); + } + if (booking.amount <= 0) { + throw new Error( + "Booking ini tidak butuh pembayaran (gratis)" + ); + } + if (booking.status === "PAID") { + throw new Error("Pembayaran sudah dikonfirmasi"); + } + if (booking.status !== "AWAITING_PAY") { + throw new Error( + "Booking belum siap menerima pembayaran (tunggu approve organizer)" + ); + } + + const existing = await tx.payment.findFirst({ + where: { + bookingId, + provider: "MANUAL", + status: { in: ["PENDING", "AWAITING"] }, + }, + orderBy: { createdAt: "desc" }, + }); + + if (existing && existing.status === "AWAITING") { + return existing; + } + + const payment = existing + ? await tx.payment.update({ + where: { id: existing.id }, + data: { status: "AWAITING" }, + }) + : await tx.payment.create({ + data: { + bookingId, + provider: "MANUAL", + externalOrderId: manualOrderId(bookingId), + amount: booking.amount, + status: "AWAITING", + }, + }); + + // Backward-compat: tetap update timestamp di TripParticipant + // selama UI lama masih membaca kolom ini. + await tx.tripParticipant.update({ + where: { id: booking.participantId }, + data: { markedPaidAt: new Date() }, + }); + + return payment; + }, + { + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, + maxWait: 5000, + timeout: 15000, + } + ); + } catch (e) { + lastErr = e; + if (isSerializationConflict(e) && attempt < SERIAL_TX_ATTEMPTS - 1) { + continue; + } + throw e; + } + } + throw lastErr instanceof Error + ? lastErr + : new Error("Gagal menandai pembayaran. Coba lagi sebentar."); + }, + + /** + * Organizer konfirmasi pembayaran manual masuk. + * Idempotent: kalau sudah PAID, tolak (UI lama bisa muncul tombol dua kali). + */ + async confirmPaidManual(bookingId: string, organizerId: string) { + let lastErr: unknown; + for (let attempt = 0; attempt < SERIAL_TX_ATTEMPTS; attempt++) { + try { + return await prisma.$transaction( + async (tx) => { + const booking = await tx.booking.findUnique({ + where: { id: bookingId }, + include: { trip: { select: { organizerId: true, price: true } } }, + }); + if (!booking) { + throw new Error("Booking tidak ditemukan"); + } + if (booking.trip.organizerId !== organizerId) { + throw new Error( + "Hanya organizer trip ini yang bisa mengonfirmasi pembayaran" + ); + } + if (booking.amount <= 0) { + throw new Error( + "Booking ini gratis — tidak ada pembayaran yang perlu dikonfirmasi" + ); + } + if (booking.status === "PAID") { + throw new Error("Pembayaran sudah dikonfirmasi sebelumnya"); + } + + const awaitingPayment = await tx.payment.findFirst({ + where: { + bookingId, + provider: "MANUAL", + status: "AWAITING", + }, + orderBy: { createdAt: "desc" }, + }); + + if (!awaitingPayment) { + throw new Error( + "Peserta belum menandai sudah membayar" + ); + } + + const now = new Date(); + + await tx.payment.update({ + where: { id: awaitingPayment.id }, + data: { + status: "PAID", + paidAt: now, + method: "manual_transfer", + }, + }); + + await tx.booking.update({ + where: { id: bookingId }, + data: { status: "PAID" }, + }); + + // Backward-compat: tetap update timestamp di TripParticipant. + await tx.tripParticipant.update({ + where: { id: booking.participantId }, + data: { paymentConfirmedAt: now }, + }); + + return { ok: true as const }; + }, + { + isolationLevel: Prisma.TransactionIsolationLevel.Serializable, + maxWait: 5000, + timeout: 15000, + } + ); + } catch (e) { + lastErr = e; + if (isSerializationConflict(e) && attempt < SERIAL_TX_ATTEMPTS - 1) { + continue; + } + throw e; + } + } + throw lastErr instanceof Error + ? lastErr + : new Error("Gagal mengonfirmasi pembayaran. Coba lagi sebentar."); + }, + + /** + * Daftar booking yang masih menunggu konfirmasi organizer di trip tertentu. + * Dipakai OrganizerPaymentQueue. + */ + async getAwaitingManualForTrip(tripId: string) { + return bookingRepo.findAwaitingManualConfirmation(tripId); + }, +}; diff --git a/server/services/trip.service.ts b/server/services/trip.service.ts index be7ab99..2c54d17 100644 --- a/server/services/trip.service.ts +++ b/server/services/trip.service.ts @@ -3,6 +3,8 @@ import type { ActivityCategory, Vibe } from "@/app/generated/prisma/enums"; import { prisma } from "@/lib/prisma"; import { tripRepo, type TripFilters } from "@/server/repositories/trip.repo"; import { participantRepo } from "@/server/repositories/participant.repo"; +import { bookingRepo } from "@/server/repositories/booking.repo"; +import { bookingService } from "@/server/services/booking.service"; import { LIMITS } from "@/lib/limits"; import { utcStartOfDay, isTripDepartureDayPast } from "@/lib/trip-dates"; import { isFreeTrip } from "@/lib/trip-pricing"; @@ -140,6 +142,7 @@ export const tripService = { date: true, organizerId: true, maxParticipants: true, + price: true, }, }); @@ -186,6 +189,22 @@ export const tripService = { data: { tripId, userId, status: "PENDING" }, }); + // Booking 1-1 ke participant. Upsert untuk handle re-join setelah CANCELLED. + await tx.booking.upsert({ + where: { participantId: participant.id }, + create: { + tripId, + userId, + participantId: participant.id, + amount: trip.price, + status: "PENDING", + }, + update: { + status: "PENDING", + amount: trip.price, + }, + }); + const newCount = await tx.tripParticipant.count({ where: { tripId, status: { not: "CANCELLED" } }, }); @@ -234,7 +253,21 @@ export const tripService = { throw new Error("Kamu tidak terdaftar di trip ini"); } - const result = await participantRepo.cancel(tripId, userId); + const result = await prisma.$transaction(async (tx) => { + const cancelled = await tx.tripParticipant.update({ + where: { tripId_userId: { tripId, userId } }, + data: { + status: "CANCELLED", + markedPaidAt: null, + paymentConfirmedAt: null, + }, + }); + await tx.booking.updateMany({ + where: { participantId: existing.id }, + data: { status: "CANCELLED" }, + }); + return cancelled; + }); if (trip.status === "FULL") { const count = await participantRepo.countByTrip(tripId); @@ -267,7 +300,19 @@ export const tripService = { throw new Error("Peserta ini tidak dalam status menunggu persetujuan"); } - return participantRepo.setStatus(participantId, "CONFIRMED"); + // Trip gratis: Booking langsung PAID. Trip berbayar: AWAITING_PAY (tinggal bayar). + const nextBookingStatus = isFreeTrip(trip) ? "PAID" : "AWAITING_PAY"; + + return prisma.$transaction(async (tx) => { + await tx.booking.updateMany({ + where: { participantId }, + data: { status: nextBookingStatus }, + }); + return tx.tripParticipant.update({ + where: { id: participantId }, + data: { status: "CONFIRMED" }, + }); + }); }, async rejectParticipant( @@ -291,10 +336,20 @@ export const tripService = { throw new Error("Hanya permintaan yang masih menunggu yang bisa ditolak"); } - await participantRepo.setStatusAndClearPayment( - participantId, - "CANCELLED" - ); + await prisma.$transaction(async (tx) => { + await tx.tripParticipant.update({ + where: { id: participantId }, + data: { + status: "CANCELLED", + markedPaidAt: null, + paymentConfirmedAt: null, + }, + }); + await tx.booking.updateMany({ + where: { participantId }, + data: { status: "CANCELLED" }, + }); + }); if (trip.status === "FULL") { const count = await participantRepo.countByTrip(tripId); @@ -322,40 +377,12 @@ export const tripService = { throw new Error("Trip sudah lewat — pembayaran tidak perlu ditandai"); } - const p = await participantRepo.findByTripAndUser(tripId, userId); - if (!p || p.status === "CANCELLED") { + const booking = await bookingRepo.findByTripAndUser(tripId, userId); + if (!booking || booking.status === "CANCELLED") { throw new Error("Kamu tidak terdaftar di trip ini"); } - if (p.paymentConfirmedAt) { - throw new Error("Pembayaran kamu sudah dikonfirmasi organizer"); - } - if (p.markedPaidAt) { - throw new Error("Kamu sudah menandai sudah bayar — tunggu konfirmasi organizer"); - } - - const updated = await participantRepo.tryMarkPaidByUser(tripId, userId); - if (updated.count === 0) { - const again = await participantRepo.findByTripAndUser(tripId, userId); - if (!again || again.status === "CANCELLED") { - throw new Error("Kamu tidak terdaftar di trip ini"); - } - if (again.paymentConfirmedAt) { - throw new Error("Pembayaran kamu sudah dikonfirmasi organizer"); - } - if (again.markedPaidAt) { - throw new Error( - "Kamu sudah menandai sudah bayar — tunggu konfirmasi organizer" - ); - } - throw new Error("Tidak bisa menandai pembayaran. Coba lagi sebentar."); - } - - const row = await participantRepo.findByTripAndUser(tripId, userId); - if (!row) { - throw new Error("Data peserta tidak ditemukan setelah update"); - } - return row; + return bookingService.markPaidManual(booking.id, userId); }, async confirmParticipantPayment( @@ -374,29 +401,11 @@ export const tripService = { throw new Error("Trip ini gratis — tidak ada pembayaran yang perlu dikonfirmasi"); } - const participant = await participantRepo.findById(participantId); - if (!participant || participant.tripId !== tripId) { - throw new Error("Peserta tidak ditemukan"); - } - if (participant.status === "CANCELLED") { - throw new Error("Peserta sudah tidak aktif"); - } - if (!participant.markedPaidAt) { - throw new Error("Peserta belum menandai sudah membayar"); - } - if (participant.paymentConfirmedAt) { - throw new Error("Pembayaran peserta ini sudah dikonfirmasi"); + const booking = await bookingRepo.findByParticipantId(participantId); + if (!booking || booking.tripId !== tripId) { + throw new Error("Booking tidak ditemukan"); } - const updated = await participantRepo.tryConfirmPaymentByOrganizer( - participantId - ); - if (updated.count === 0) { - throw new Error( - "Konfirmasi tidak diproses — mungkin sudah dikonfirmasi atau pembayaran belum ditandai peserta." - ); - } - - return participantRepo.findById(participantId); + return bookingService.confirmPaidManual(booking.id, organizerId); }, };