From 7f419638b5f37ca9d8174f80cc02e4673f348529 Mon Sep 17 00:00:00 2001 From: arifal Date: Fri, 8 May 2026 19:20:27 +0700 Subject: [PATCH] add user profile, profile vibe and trip vibe and social signal --- SOCIAL_ROADMAP.md | 90 +++++++++++ app/generated/prisma/browser.ts | 2 +- app/generated/prisma/client.ts | 2 +- app/generated/prisma/commonInputTypes.ts | 34 ++++ app/generated/prisma/enums.ts | 9 ++ app/generated/prisma/internal/class.ts | 8 +- .../prisma/internal/prismaNamespace.ts | 16 ++ .../prisma/internal/prismaNamespaceBrowser.ts | 2 + app/generated/prisma/models/Trip.ts | 52 +++++- app/generated/prisma/models/UserProfile.ts | 43 ++++- app/layout.tsx | 2 + app/page.tsx | 50 ++++-- app/people/page.tsx | 104 ++++++++++++ app/profile/page.tsx | 2 + app/trips/[id]/page.tsx | 98 ++++++++--- app/trips/page.tsx | 35 +++- app/u/[id]/page.tsx | 14 ++ components/shared/navbar.tsx | 13 ++ components/shared/profile-nudge-banner.tsx | 41 +++++ deployment.md | 136 ---------------- features/profile/actions.ts | 1 + features/profile/components/people-filter.tsx | 153 ++++++++++++++++++ .../profile/components/profile-editor.tsx | 55 +++++++ features/profile/components/user-card.tsx | 102 ++++++++++++ features/profile/schemas.ts | 9 ++ features/trip/actions.ts | 1 + features/trip/components/create-trip-form.tsx | 56 ++++++- features/trip/components/trip-card.tsx | 98 ++++++++++- features/trip/components/trip-filter.tsx | 134 ++++++++++++++- features/trip/schemas.ts | 9 ++ lib/vibe.ts | 41 +++++ .../migration.sql | 5 + .../migration.sql | 5 + prisma/schema.prisma | 13 +- server/repositories/profile.repo.ts | 4 + server/repositories/trip.repo.ts | 45 +++++- server/repositories/user.repo.ts | 58 +++++++ server/services/profile.service.ts | 7 +- server/services/trip.service.ts | 4 +- 39 files changed, 1361 insertions(+), 192 deletions(-) create mode 100644 SOCIAL_ROADMAP.md create mode 100644 app/people/page.tsx create mode 100644 components/shared/profile-nudge-banner.tsx delete mode 100644 deployment.md create mode 100644 features/profile/components/people-filter.tsx create mode 100644 features/profile/components/user-card.tsx create mode 100644 lib/vibe.ts create mode 100644 prisma/migrations/20260508120000_add_profile_vibe/migration.sql create mode 100644 prisma/migrations/20260508130000_add_trip_vibe/migration.sql diff --git a/SOCIAL_ROADMAP.md b/SOCIAL_ROADMAP.md new file mode 100644 index 0000000..be32d42 --- /dev/null +++ b/SOCIAL_ROADMAP.md @@ -0,0 +1,90 @@ +# Setrip — Social Repositioning Roadmap + +Status implementasi reposisi dari "open trip pendakian" → "platform untuk menemukan teman aktivitas & trip bareng". + +> **Prinsip pembeda:** Setrip bukan trip-marketplace. Trip adalah kendaraan untuk koneksi sosial (stranger → teman → circle). Setiap fitur dievaluasi: apakah memperkuat **find a companion**, atau hanya **book a trip**? Kalau cuma yang kedua → tolak. + +--- + +## Phase A — Quick wins (sinyal sosial dari data yang sudah ada) ✅ + +Selesai. `tsc --noEmit` lulus. Migration `20260508120000_add_profile_vibe` belum di-apply ke DB. + +| # | Item | Status | File | +|---|---|---|---| +| A1 | Hapus ikon `🏔️` hardcoded di trip detail → ikon + label kategori dinamis | ✅ | [app/trips/[id]/page.tsx](app/trips/[id]/page.tsx) | +| A2 | Banner onboarding profil di layout (muncul kalau `UserProfile` kosong) | ✅ | [components/shared/profile-nudge-banner.tsx](components/shared/profile-nudge-banner.tsx), [app/layout.tsx](app/layout.tsx) | +| A3 | Confirmed-peserta dirombak: chip nama → kartu (avatar + kota + 3 tag minat) | ✅ | [server/repositories/trip.repo.ts](server/repositories/trip.repo.ts), [app/trips/[id]/page.tsx](app/trips/[id]/page.tsx) | +| A4 | Field `vibe` (CHILL/BALANCED/HARDCORE) di `UserProfile` + UI editor + badge di profil publik | ✅ | [prisma/schema.prisma](prisma/schema.prisma), [prisma/migrations/20260508120000_add_profile_vibe/migration.sql](prisma/migrations/20260508120000_add_profile_vibe/migration.sql), [lib/vibe.ts](lib/vibe.ts), [features/profile/schemas.ts](features/profile/schemas.ts), [features/profile/actions.ts](features/profile/actions.ts), [server/repositories/profile.repo.ts](server/repositories/profile.repo.ts), [server/repositories/user.repo.ts](server/repositories/user.repo.ts), [server/services/profile.service.ts](server/services/profile.service.ts), [features/profile/components/profile-editor.tsx](features/profile/components/profile-editor.tsx), [app/profile/page.tsx](app/profile/page.tsx), [app/u/[id]/page.tsx](app/u/[id]/page.tsx) | + +**Tindakan manual:** jalankan `npx prisma migrate deploy` (atau `dev`) untuk apply migration `20260507185257_add_user_profile` + `20260508120000_add_profile_vibe`. + +--- + +## Phase B — Discovery (people-first, bukan price-first) ✅ + +Selesai. `tsc --noEmit` lulus. Migration `20260508130000_add_trip_vibe` belum di-apply ke DB. + +**Keputusan desain:** `Trip` reuse enum `Vibe` yang sama dengan `UserProfile` (alih-alih bikin `pace`/`level` baru) supaya matching peserta↔trip langsung selaras tanpa mapping. + +| # | Item | Status | File | +|---|---|---|---| +| B1 | Halaman `/people` — daftar user dengan profil terisi | ✅ | [app/people/page.tsx](app/people/page.tsx), [server/repositories/user.repo.ts](server/repositories/user.repo.ts) (`findPeople`), [server/services/profile.service.ts](server/services/profile.service.ts) | +| B2 | Filter kota, interests, vibe di `/people` | ✅ | [features/profile/components/people-filter.tsx](features/profile/components/people-filter.tsx), [features/profile/components/user-card.tsx](features/profile/components/user-card.tsx) | +| B3 | Field `vibe` di `Trip` + tampil di trip detail & TripCard + filter di `/trips` | ✅ | [prisma/schema.prisma](prisma/schema.prisma), [prisma/migrations/20260508130000_add_trip_vibe/migration.sql](prisma/migrations/20260508130000_add_trip_vibe/migration.sql), [features/trip/schemas.ts](features/trip/schemas.ts), [features/trip/actions.ts](features/trip/actions.ts), [server/services/trip.service.ts](server/services/trip.service.ts), [features/trip/components/create-trip-form.tsx](features/trip/components/create-trip-form.tsx), [features/trip/components/trip-card.tsx](features/trip/components/trip-card.tsx), [app/trips/[id]/page.tsx](app/trips/[id]/page.tsx) | +| B4 | TripCard: 3 avatar peserta confirmed + counter `+N` | ✅ | [server/repositories/trip.repo.ts](server/repositories/trip.repo.ts) (include participants di `findOpen`), [features/trip/components/trip-card.tsx](features/trip/components/trip-card.tsx), [app/page.tsx](app/page.tsx), [app/trips/page.tsx](app/trips/page.tsx) | +| B5 | TripCard: badge "✨ X peserta sama minat" untuk user login | ✅ | [features/trip/components/trip-card.tsx](features/trip/components/trip-card.tsx) (compute overlap), homepage & `/trips` (fetch viewer interests) | +| B6 | Filter ukuran grup (Small ≤10 / Medium 11–20 / Large 21+) | ✅ | [server/repositories/trip.repo.ts](server/repositories/trip.repo.ts) (`GroupSize` filter), [features/trip/components/trip-filter.tsx](features/trip/components/trip-filter.tsx), [app/trips/page.tsx](app/trips/page.tsx) | +| B7 | Section "Budget Friendly" → "Lagi Ramai" (social proof) | ✅ | [app/page.tsx](app/page.tsx) — sort by `participantCount desc`, framing "kamu nggak bakal jalan sendirian" | +| B+ | Link `/people` di navbar (desktop + mobile) | ✅ | [components/shared/navbar.tsx](components/shared/navbar.tsx) | + +**Tindakan manual:** jalankan `npx prisma migrate deploy` untuk apply migration `20260508130000_add_trip_vibe` (selain 2 migration Phase A yang masih pending). + +--- + +## Phase C — Interaksi & continuity (separate, lebih besar) ⏳ + +Belum mulai. Setiap item bisa jadi PR terpisah karena perlu schema baru + UI substansial. + +| # | Item | Status | Catatan | +|---|---|---|---| +| C1 | Model `TripMessage` — Q&A publik per trip (sebelum berangkat) | ⏳ pending | Schema + actions + UI di trip detail. Calon peserta tanya organizer tanpa keluar app. | +| C2 | Group chat untuk peserta CONFIRMED (post-confirmation) | ⏳ pending | Bisa pakai tabel `TripMessage` yang sama dengan flag `audience` (PUBLIC/CONFIRMED_ONLY). | +| C3 | Model `Connection` (follow / circle) antar user | ⏳ pending | Foundation untuk "from strangers → circle". Halaman "Circle saya". | +| C4 | Notifikasi: organizer punya pending join, peserta dapat balasan Q&A, dst | ⏳ pending | Bisa email dulu, in-app belakangan. | +| C5 | Post-trip continuity: tombol "follow buddies dari trip ini" + album foto bareng | ⏳ pending | Momen konversi stranger → circle terbesar saat ini terbuang. | +| C6 | Review user (bukan cuma trip) — reputasi peserta (no-show? kooperatif?) | ⏳ pending | Lengkapi trust layer. Anti-scam. | +| C7 | Onboarding flow wajib post-register (bukan banner) — minta minimal 3 interests + city + vibe sebelum bisa join trip | ⏳ pending | Banner Phase A2 cuma soft nudge. Hard-gate saat user pertama kali pencet "Join". | +| C8 | Referral / invite-with-link | ⏳ pending | Loop pertumbuhan komunitas. | + +--- + +## ❌ Anti-list (yang harus DITOLAK kalau muncul) + +Fitur-fitur ini akan menarik Setrip ke arena OTA (Traveloka/Klook) yang tidak bisa dimenangkan: + +- Booking hotel / tiket pesawat +- Tour massal tanpa interaksi (>30 orang, bus pariwisata) +- Mass listing dari travel agent (B2B aggregator) +- Filter & sort harga yang lebih agresif (price-low-to-high, dll.) — perkuat framing harga-dulu +- Affiliate/komisi dari pihak ketiga yang bukan organizer terverifikasi +- SEO-driven mass content untuk destinasi (artikel "10 Gunung Terbaik di Jawa") tanpa angle social +- Integrasi pembayaran kompleks (split-bill, escrow rumit) sebelum chat dasar (C1) ada — prioritas terbalik + +Kalau muncul request ke arah ini, tanya: "ini meningkatkan kemungkinan dua orang asing kenalan, atau cuma memudahkan transaksi?" Kalau jawabannya yang kedua → tolak / tunda. + +--- + +## Konteks positioning (referensi cepat) + +**Untuk siapa:** orang yang ingin pergi tapi tidak punya teman, ingin kenalan baru lewat aktivitas bareng. + +**Bukan untuk:** orang yang sudah punya grup dan tinggal cari paket trip termurah. + +**Categories yang valid** (semua harus punya: organizer, group kecil, interaksi sosial): +- Core: hiking, camping +- Natural expansion: snorkeling, diving, island hopping +- Social activity: city trip, kulineran, konser bareng +- Semi-professional: workshop, kelas outdoor, retreat + +**Tagline:** "Pergi bareng, bukan sendiri" / "From strangers to travel buddies". diff --git a/app/generated/prisma/browser.ts b/app/generated/prisma/browser.ts index eae585e..e92e427 100644 --- a/app/generated/prisma/browser.ts +++ b/app/generated/prisma/browser.ts @@ -25,7 +25,7 @@ export type User = Prisma.UserModel /** * Model UserProfile * Profil sosial publik. Berisi info yang user pilih untuk dibagikan ke peserta lain - * (bio, kota, minat). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. + * (bio, kota, minat, vibe). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. */ export type UserProfile = Prisma.UserProfileModel /** diff --git a/app/generated/prisma/client.ts b/app/generated/prisma/client.ts index 19ee8dc..f2696e4 100644 --- a/app/generated/prisma/client.ts +++ b/app/generated/prisma/client.ts @@ -49,7 +49,7 @@ export type User = Prisma.UserModel /** * Model UserProfile * Profil sosial publik. Berisi info yang user pilih untuk dibagikan ke peserta lain - * (bio, kota, minat). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. + * (bio, kota, minat, vibe). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. */ export type UserProfile = Prisma.UserProfileModel /** diff --git a/app/generated/prisma/commonInputTypes.ts b/app/generated/prisma/commonInputTypes.ts index fbbca32..3db6156 100644 --- a/app/generated/prisma/commonInputTypes.ts +++ b/app/generated/prisma/commonInputTypes.ts @@ -148,6 +148,23 @@ export type DateTimeWithAggregatesFilter<$PrismaModel = never> = { _max?: Prisma.NestedDateTimeFilter<$PrismaModel> } +export type EnumVibeNullableFilter<$PrismaModel = never> = { + equals?: $Enums.Vibe | Prisma.EnumVibeFieldRefInput<$PrismaModel> | null + in?: $Enums.Vibe[] | Prisma.ListEnumVibeFieldRefInput<$PrismaModel> | null + notIn?: $Enums.Vibe[] | Prisma.ListEnumVibeFieldRefInput<$PrismaModel> | null + not?: Prisma.NestedEnumVibeNullableFilter<$PrismaModel> | $Enums.Vibe | null +} + +export type EnumVibeNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.Vibe | Prisma.EnumVibeFieldRefInput<$PrismaModel> | null + in?: $Enums.Vibe[] | Prisma.ListEnumVibeFieldRefInput<$PrismaModel> | null + notIn?: $Enums.Vibe[] | Prisma.ListEnumVibeFieldRefInput<$PrismaModel> | null + not?: Prisma.NestedEnumVibeNullableWithAggregatesFilter<$PrismaModel> | $Enums.Vibe | null + _count?: Prisma.NestedIntNullableFilter<$PrismaModel> + _min?: Prisma.NestedEnumVibeNullableFilter<$PrismaModel> + _max?: Prisma.NestedEnumVibeNullableFilter<$PrismaModel> +} + export type IntNullableFilter<$PrismaModel = never> = { equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null @@ -417,6 +434,23 @@ export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = { _max?: Prisma.NestedDateTimeFilter<$PrismaModel> } +export type NestedEnumVibeNullableFilter<$PrismaModel = never> = { + equals?: $Enums.Vibe | Prisma.EnumVibeFieldRefInput<$PrismaModel> | null + in?: $Enums.Vibe[] | Prisma.ListEnumVibeFieldRefInput<$PrismaModel> | null + notIn?: $Enums.Vibe[] | Prisma.ListEnumVibeFieldRefInput<$PrismaModel> | null + not?: Prisma.NestedEnumVibeNullableFilter<$PrismaModel> | $Enums.Vibe | null +} + +export type NestedEnumVibeNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.Vibe | Prisma.EnumVibeFieldRefInput<$PrismaModel> | null + in?: $Enums.Vibe[] | Prisma.ListEnumVibeFieldRefInput<$PrismaModel> | null + notIn?: $Enums.Vibe[] | Prisma.ListEnumVibeFieldRefInput<$PrismaModel> | null + not?: Prisma.NestedEnumVibeNullableWithAggregatesFilter<$PrismaModel> | $Enums.Vibe | null + _count?: Prisma.NestedIntNullableFilter<$PrismaModel> + _min?: Prisma.NestedEnumVibeNullableFilter<$PrismaModel> + _max?: Prisma.NestedEnumVibeNullableFilter<$PrismaModel> +} + export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = { equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null diff --git a/app/generated/prisma/enums.ts b/app/generated/prisma/enums.ts index 2996c73..00f9140 100644 --- a/app/generated/prisma/enums.ts +++ b/app/generated/prisma/enums.ts @@ -9,6 +9,15 @@ * 🟢 You can import this file directly. */ +export const Vibe = { + CHILL: 'CHILL', + BALANCED: 'BALANCED', + HARDCORE: 'HARDCORE' +} as const + +export type Vibe = (typeof Vibe)[keyof typeof Vibe] + + export const VerificationStatus = { PENDING: 'PENDING', APPROVED: 'APPROVED', diff --git a/app/generated/prisma/internal/class.ts b/app/generated/prisma/internal/class.ts index f31d44d..ed3d90f 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). 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\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\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 selfie memegang KTP.\n selfieKey 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 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}\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\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 selfie memegang KTP.\n selfieKey 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", "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\":\"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\":\"selfieKey\",\"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\":\"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\":\"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\":\"selfieKey\",\"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.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\",\"TripStatus\",\"organizerId\",\"fullName\",\"nikEncrypted\",\"nikHash\",\"birthDate\",\"address\",\"ktpImageKey\",\"selfieKey\",\"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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_wLRASKgAUAAsQIAIaQBAQCvAgAhtQFAALECACHGAQEArwIAIccBAQCvAgAhyAEBAK8CACHJAUAAsQIAIcoBAQCvAgAhywEBAK8CACHMAQEArwIAIc0BAQCvAgAhzgEBAK8CACHPAQEArwIAIdEBAQC8AgAh0gFAALICACHTAQEAvAIAIdQBQACyAgAhAgAAACEAIBcAAHkAIBOdAQEArwIAIZ8BAAD_AtEBIqABQACxAgAhpAEBAK8CACG1AUAAsQIAIcYBAQCvAgAhxwEBAK8CACHIAQEArwIAIckBQACxAgAhygEBAK8CACHLAQEArwIAIcwBAQCvAgAhzQEBAK8CACHOAQEArwIAIc8BAQCvAgAh0QEBALwCACHSAUAAsgIAIdMBAQC8AgAh1AFAALICACECAAAAHAAgFwAAewAgAgAAABwAIBcAAHsAIAEAAAAeACADAAAAIQAgHgAAcwAgHwAAeQAgAQAAACEAIAEAAAAcACAHCgAA_AIAICQAAP4CACAlAAD9AgAg0QEAAKsCACDSAQAAqwIAINMBAACrAgAg1AEAAKsCACAWmgEAAPwBADCbAQAAgwEAEJwBAAD8AQAwnQEBAN8BACGfAQAA_QHRASKgAUAA4QEAIaQBAQDfAQAhtQFAAOEBACHGAQEA3wEAIccBAQDfAQAhyAEBAN8BACHJAUAA4QEAIcoBAQDfAQAhywEBAN8BACHMAQEA3wEAIc0BAQDfAQAhzgEBAN8BACHPAQEA3wEAIdEBAQDuAQAh0gFAAOIBACHTAQEA7gEAIdQBQADiAQAhAwAAABwAIAEAAIIBADAjAACDAQAgAwAAABwAIAEAACAAMAIAACEAIAEAAAAJACABAAAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgFgUAAPgCACAHAAD5AgAgCAAA-gIAIAkAAPsCACCdAQEAAAABnwEAAADFAQKgAUAAAAABtQFAAAAAAbYBAQAAAAG3AQEAAAABuQEAAAC5AQK6AQEAAAABuwEBAAAAAbwBAQAAAAG9AQEAAAABvgEBAAAAAb8BAQAAAAHAAUAAAAABwQFAAAAAAcIBAgAAAAHDAQIAAAABxQEBAAAAAQEXAACLAQAgEp0BAQAAAAGfAQAAAMUBAqABQAAAAAG1AUAAAAABtgEBAAAAAbcBAQAAAAG5AQAAALkBAroBAQAAAAG7AQEAAAABvAEBAAAAAb0BAQAAAAG-AQEAAAABvwEBAAAAAcABQAAAAAHBAUAAAAABwgECAAAAAcMBAgAAAAHFAQEAAAABARcAAI0BADABFwAAjQEAMBYFAADQAgAgBwAA0QIAIAgAANICACAJAADTAgAgnQEBAK8CACGfAQAAzwLFASKgAUAAsQIAIbUBQACxAgAhtgEBAK8CACG3AQEAvAIAIbkBAADOArkBIroBAQCvAgAhuwEBAK8CACG8AQEAvAIAIb0BAQC8AgAhvgEBALwCACG_AQEAvAIAIcABQACxAgAhwQFAALICACHCAQIAvQIAIcMBAgC9AgAhxQEBAK8CACECAAAACQAgFwAAkAEAIBKdAQEArwIAIZ8BAADPAsUBIqABQACxAgAhtQFAALECACG2AQEArwIAIbcBAQC8AgAhuQEAAM4CuQEiugEBAK8CACG7AQEArwIAIbwBAQC8AgAhvQEBALwCACG-AQEAvAIAIb8BAQC8AgAhwAFAALECACHBAUAAsgIAIcIBAgC9AgAhwwECAL0CACHFAQEArwIAIQIAAAAHACAXAACSAQAgAgAAAAcAIBcAAJIBACADAAAACQAgHgAAiwEAIB8AAJABACABAAAACQAgAQAAAAcAIAsKAADJAgAgJAAAzAIAICUAAMsCACBGAADKAgAgRwAAzQIAILcBAACrAgAgvAEAAKsCACC9AQAAqwIAIL4BAACrAgAgvwEAAKsCACDBAQAAqwIAIBWaAQAA9QEAMJsBAACZAQAQnAEAAPUBADCdAQEA3wEAIZ8BAAD3AcUBIqABQADhAQAhtQFAAOEBACG2AQEA3wEAIbcBAQDuAQAhuQEAAPYBuQEiugEBAN8BACG7AQEA3wEAIbwBAQDuAQAhvQEBAO4BACG-AQEA7gEAIb8BAQDuAQAhwAFAAOEBACHBAUAA4gEAIcIBAgDvAQAhwwECAO8BACHFAQEA3wEAIQMAAAAHACABAACYAQAwIwAAmQEAIAMAAAAHACABAAAIADACAAAJACABAAAAFQAgAQAAABUAIAMAAAATACABAAAUADACAAAVACADAAAAEwAgAQAAFAAwAgAAFQAgAwAAABMAIAEAABQAMAIAABUAIAkDAADIAgAgBgAAxwIAIJ0BAQAAAAGgAUAAAAABowEBAAAAAaQBAQAAAAGzAQIAAAABtAEBAAAAAbUBQAAAAAEBFwAAoQEAIAedAQEAAAABoAFAAAAAAaMBAQAAAAGkAQEAAAABswECAAAAAbQBAQAAAAG1AUAAAAABARcAAKMBADABFwAAowEAMAkDAADGAgAgBgAAxQIAIJ0BAQCvAgAhoAFAALECACGjAQEArwIAIaQBAQCvAgAhswECAL0CACG0AQEAvAIAIbUBQACxAgAhAgAAABUAIBcAAKYBACAHnQEBAK8CACGgAUAAsQIAIaMBAQCvAgAhpAEBAK8CACGzAQIAvQIAIbQBAQC8AgAhtQFAALECACECAAAAEwAgFwAAqAEAIAIAAAATACAXAACoAQAgAwAAABUAIB4AAKEBACAfAACmAQAgAQAAABUAIAEAAAATACAGCgAAwAIAICQAAMMCACAlAADCAgAgRgAAwQIAIEcAAMQCACC0AQAAqwIAIAqaAQAA9AEAMJsBAACvAQAQnAEAAPQBADCdAQEA3wEAIaABQADhAQAhowEBAN8BACGkAQEA3wEAIbMBAgDvAQAhtAEBAO4BACG1AUAA4QEAIQMAAAATACABAACuAQAwIwAArwEAIAMAAAATACABAAAUADACAAAVACABAAAAEQAgAQAAABEAIAMAAAAPACABAAAQADACAAARACADAAAADwAgAQAAEAAwAgAAEQAgAwAAAA8AIAEAABAAMAIAABEAIAYGAAC_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_AEAMJsBAACDAQAQnAEAAPwBADCdAQEA3wEAIZ8BAAD9AdEBIqABQADhAQAhpAEBAN8BACG1AUAA4QEAIcYBAQDfAQAhxwEBAN8BACHIAQEA3wEAIckBQADhAQAhygEBAN8BACHLAQEA3wEAIcwBAQDfAQAhzQEBAN8BACHOAQEA3wEAIc8BAQDfAQAh0QEBAO4BACHSAUAA4gEAIdMBAQDuAQAh1AFAAOIBACEHCgAA5wEAICQAAP8BACAlAAD_AQAgpQEAAADRAQKmAQAAANEBCKcBAAAA0QEIrAEAAP4B0QEiBwoAAOcBACAkAAD_AQAgJQAA_wEAIKUBAAAA0QECpgEAAADRAQinAQAAANEBCKwBAAD-AdEBIgSlAQAAANEBAqYBAAAA0QEIpwEAAADRAQisAQAA_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_AQEAhwIAIcABQACIAgAhwQFAAJECACHCAQIAngIAIcMBAgCeAgAhxQEBAI4CACEEpQEAAAC5AQKmAQAAALkBCKcBAAAAuQEIrAEAAPsBuQEiBKUBAAAAxQECpgEAAADFAQinAQAAAMUBCKwBAAD5AcUBIgPtAQAADwAg7gEAAA8AIO8BAAAPACAC1gEBAAAAAdcBAQAAAAEQAwAAiQIAIJoBAACpAgAwmwEAAAMAEJwBAACpAgAwnQEBAI4CACGkAQEAjgIAIdUBAQCOAgAh1gEBAI4CACHXAQEAjgIAIdgBAQCHAgAh2QEBAIcCACHaAQIAqgIAIdsBAQCHAgAh3AEBAIcCACHdAQEAhwIAId4BAQCHAgAhCKUBAgAAAAGmAQIAAAAFpwECAAAABagBAgAAAAGpAQIAAAABqgECAAAAAasBAgAAAAGsAQIA5AEAIQAAAAAB9wEBAAAAAQH3AQAAAJ8BAgH3AUAAAAABAfcBQAAAAAEFHgAAoQQAIB8AAKcEACD0AQAAogQAIPUBAACmBAAg-gEAAAkAIAUeAACfBAAgHwAApAQAIPQBAACgBAAg9QEAAKMEACD6AQAAAQAgAx4AAKEEACD0AQAAogQAIPoBAAAJACADHgAAnwQAIPQBAACgBAAg-gEAAAEAIAAAAAAAAfcBAQAAAAEF9wECAAAAAf4BAgAAAAH_AQIAAAABgAICAAAAAYECAgAAAAEFHgAAmgQAIB8AAJ0EACD0AQAAmwQAIPUBAACcBAAg-gEAAAkAIAMeAACaBAAg9AEAAJsEACD6AQAACQAgAAAAAAAFHgAAkgQAIB8AAJgEACD0AQAAkwQAIPUBAACXBAAg-gEAAAkAIAUeAACQBAAgHwAAlQQAIPQBAACRBAAg9QEAAJQEACD6AQAAAQAgAx4AAJIEACD0AQAAkwQAIPoBAAAJACADHgAAkAQAIPQBAACRBAAg-gEAAAEAIAAAAAAAAfcBAAAAuQECAfcBAAAAxQECBR4AAIgEACAfAACOBAAg9AEAAIkEACD1AQAAjQQAIPoBAAABACALHgAA7AIAMB8AAPECADD0AQAA7QIAMPUBAADuAgAw9gEAAO8CACD3AQAA8AIAMPgBAADwAgAw-QEAAPACADD6AQAA8AIAMPsBAADyAgAw_AEAAPMCADALHgAA4AIAMB8AAOUCADD0AQAA4QIAMPUBAADiAgAw9gEAAOMCACD3AQAA5AIAMPgBAADkAgAw-QEAAOQCADD6AQAA5AIAMPsBAADmAgAw_AEAAOcCADALHgAA1AIAMB8AANkCADD0AQAA1QIAMPUBAADWAgAw9gEAANcCACD3AQAA2AIAMPgBAADYAgAw-QEAANgCADD6AQAA2AIAMPsBAADaAgAw_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-gEAAAEAIAceAAD-AwAgHwAAgwQAIPQBAAD_AwAg9QEAAIIEACD4AQAAHgAg-QEAAB4AIPoBAAABACADHgAAgAQAIPQBAACBBAAg-gEAAAEAIAMeAAD-AwAg9AEAAP8DACD6AQAAAQAgAAAAAAAF9wECAAAAAf4BAgAAAAH_AQIAAAABgAICAAAAAYECAgAAAAEFHgAA-QMAIB8AAPwDACD0AQAA-gMAIPUBAAD7AwAg-gEAAAEAIAMeAAD5AwAg9AEAAPoDACD6AQAAAQAgAAAAAvcBAQAAAAT9AQEAAAAFBR4AAPQDACAfAAD3AwAg9AEAAPUDACD1AQAA9gMAIPoBAAABACAB9wEBAAAABAMeAAD0AwAg9AEAAPUDACD6AQAAAQAgCwQAAOYDACALAADnAwAgDAAA6AMAIA0AAOkDACAPAADqAwAgEAAA6wMAIBEAAOwDACDoAQAAqwIAIOkBAACrAgAg6gEAAKsCACDsAQAAqwIAIAAAAAH3ASAAAAABCx4AANMDADAfAADYAwAw9AEAANQDADD1AQAA1QMAMPYBAADWAwAg9wEAANcDADD4AQAA1wMAMPkBAADXAwAw-gEAANcDADD7AQAA2QMAMPwBAADaAwAwCx4AAMcDADAfAADMAwAw9AEAAMgDADD1AQAAyQMAMPYBAADKAwAg9wEAAMsDADD4AQAAywMAMPkBAADLAwAw-gEAAMsDADD7AQAAzQMAMPwBAADOAwAwCx4AAL4DADAfAADCAwAw9AEAAL8DADD1AQAAwAMAMPYBAADBAwAg9wEAAPACADD4AQAA8AIAMPkBAADwAgAw-gEAAPACADD7AQAAwwMAMPwBAADzAgAwCx4AALUDADAfAAC5AwAw9AEAALYDADD1AQAAtwMAMPYBAAC4AwAg9wEAANgCADD4AQAA2AIAMPkBAADYAgAw-gEAANgCADD7AQAAugMAMPwBAADbAgAwBx4AALADACAfAACzAwAg9AEAALEDACD1AQAAsgMAIPgBAAAcACD5AQAAHAAg-gEAACEAIAseAACkAwAwHwAAqQMAMPQBAAClAwAw9QEAAKYDADD2AQAApwMAIPcBAACoAwAw-AEAAKgDADD5AQAAqAMAMPoBAACoAwAw-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_AQEAAAABwAFAAAAAAcEBQAAAAAHCAQIAAAABwwECAAAAAQIAAAAJACAeAADSAwAgAwAAAAkAIB4AANIDACAfAADRAwAgARcAAPADADAZBQAAiQIAIAcAAJcCACAIAACnAgAgCQAAmAIAIJoBAACkAgAwmwEAAAcAEJwBAACkAgAwnQEBAAAAAZ8BAACmAsUBIqABQACIAgAhtQFAAIgCACG2AQEAjgIAIbcBAQCHAgAhuQEAAKUCuQEiugEBAI4CACG7AQEAjgIAIbwBAQCHAgAhvQEBAIcCACG-AQEAhwIAIb8BAQCHAgAhwAFAAIgCACHBAUAAkQIAIcIBAgCeAgAhwwECAJ4CACHFAQEAjgIAIQIAAAAJACAXAADRAwAgAgAAAM8DACAXAADQAwAgFZoBAADOAwAwmwEAAM8DABCcAQAAzgMAMJ0BAQCOAgAhnwEAAKYCxQEioAFAAIgCACG1AUAAiAIAIbYBAQCOAgAhtwEBAIcCACG5AQAApQK5ASK6AQEAjgIAIbsBAQCOAgAhvAEBAIcCACG9AQEAhwIAIb4BAQCHAgAhvwEBAIcCACHAAUAAiAIAIcEBQACRAgAhwgECAJ4CACHDAQIAngIAIcUBAQCOAgAhFZoBAADOAwAwmwEAAM8DABCcAQAAzgMAMJ0BAQCOAgAhnwEAAKYCxQEioAFAAIgCACG1AUAAiAIAIbYBAQCOAgAhtwEBAIcCACG5AQAApQK5ASK6AQEAjgIAIbsBAQCOAgAhvAEBAIcCACG9AQEAhwIAIb4BAQCHAgAhvwEBAIcCACHAAUAAiAIAIcEBQACRAgAhwgECAJ4CACHDAQIAngIAIcUBAQCOAgAhEZ0BAQCvAgAhnwEAAM8CxQEioAFAALECACG1AUAAsQIAIbYBAQCvAgAhtwEBALwCACG5AQAAzgK5ASK6AQEArwIAIbsBAQCvAgAhvAEBALwCACG9AQEAvAIAIb4BAQC8AgAhvwEBALwCACHAAUAAsQIAIcEBQACyAgAhwgECAL0CACHDAQIAvQIAIRQHAADRAgAgCAAA0gIAIAkAANMCACCdAQEArwIAIZ8BAADPAsUBIqABQACxAgAhtQFAALECACG2AQEArwIAIbcBAQC8AgAhuQEAAM4CuQEiugEBAK8CACG7AQEArwIAIbwBAQC8AgAhvQEBALwCACG-AQEAvAIAIb8BAQC8AgAhwAFAALECACHBAUAAsgIAIcIBAgC9AgAhwwECAL0CACEUBwAA-QIAIAgAAPoCACAJAAD7AgAgnQEBAAAAAZ8BAAAAxQECoAFAAAAAAbUBQAAAAAG2AQEAAAABtwEBAAAAAbkBAAAAuQECugEBAAAAAbsBAQAAAAG8AQEAAAABvQEBAAAAAb4BAQAAAAG_AQEAAAABwAFAAAAAAcEBQAAAAAHCAQIAAAABwwECAAAAAQudAQEAAAAB1QEBAAAAAdYBAQAAAAHXAQEAAAAB2AEBAAAAAdkBAQAAAAHaAQIAAAAB2wEBAAAAAdwBAQAAAAHdAQEAAAAB3gEBAAAAAQIAAAAFACAeAADeAwAgAwAAAAUAIB4AAN4DACAfAADdAwAgARcAAO8DADARAwAAiQIAIJoBAACpAgAwmwEAAAMAEJwBAACpAgAwnQEBAAAAAaQBAQCOAgAh1QEBAI4CACHWAQEAjgIAIdcBAQCOAgAh2AEBAIcCACHZAQEAhwIAIdoBAgCqAgAh2wEBAIcCACHcAQEAhwIAId0BAQCHAgAh3gEBAIcCACHxAQAAqAIAIAIAAAAFACAXAADdAwAgAgAAANsDACAXAADcAwAgD5oBAADaAwAwmwEAANsDABCcAQAA2gMAMJ0BAQCOAgAhpAEBAI4CACHVAQEAjgIAIdYBAQCOAgAh1wEBAI4CACHYAQEAhwIAIdkBAQCHAgAh2gECAKoCACHbAQEAhwIAIdwBAQCHAgAh3QEBAIcCACHeAQEAhwIAIQ-aAQAA2gMAMJsBAADbAwAQnAEAANoDADCdAQEAjgIAIaQBAQCOAgAh1QEBAI4CACHWAQEAjgIAIdcBAQCOAgAh2AEBAIcCACHZAQEAhwIAIdoBAgCqAgAh2wEBAIcCACHcAQEAhwIAId0BAQCHAgAh3gEBAIcCACELnQEBAK8CACHVAQEArwIAIdYBAQCvAgAh1wEBAK8CACHYAQEAvAIAIdkBAQC8AgAh2gECAIkDACHbAQEAvAIAIdwBAQC8AgAh3QEBALwCACHeAQEAvAIAIQudAQEArwIAIdUBAQCvAgAh1gEBAK8CACHXAQEArwIAIdgBAQC8AgAh2QEBALwCACHaAQIAiQMAIdsBAQC8AgAh3AEBALwCACHdAQEAvAIAId4BAQC8AgAhC50BAQAAAAHVAQEAAAAB1gEBAAAAAdcBAQAAAAHYAQEAAAAB2QEBAAAAAdoBAgAAAAHbAQEAAAAB3AEBAAAAAd0BAQAAAAHeAQEAAAABBB4AANMDADD0AQAA1AMAMPYBAADWAwAg-gEAANcDADAEHgAAxwMAMPQBAADIAwAw9gEAAMoDACD6AQAAywMAMAQeAAC-AwAw9AEAAL8DADD2AQAAwQMAIPoBAADwAgAwBB4AALUDADD0AQAAtgMAMPYBAAC4AwAg-gEAANgCADADHgAAsAMAIPQBAACxAwAg-gEAACEAIAQeAACkAwAw9AEAAKUDADD2AQAApwMAIPoBAACoAwAwAx4AAJ8DACD0AQAAoAMAIPoBAABAACAAAAAABgMAAJMDACAOAACTAwAg0QEAAKsCACDSAQAAqwIAINMBAACrAgAg1AEAAKsCACAABAMAAJMDACDfAQAAqwIAIOABAACrAgAg4gEAAKsCACAKBQAAkwMAIAcAAOgDACAIAADuAwAgCQAA6QMAILcBAACrAgAgvAEAAKsCACC9AQAAqwIAIL4BAACrAgAgvwEAAKsCACDBAQAAqwIAIAALnQEBAAAAAdUBAQAAAAHWAQEAAAAB1wEBAAAAAdgBAQAAAAHZAQEAAAAB2gECAAAAAdsBAQAAAAHcAQEAAAAB3QEBAAAAAd4BAQAAAAERnQEBAAAAAZ8BAAAAxQECoAFAAAAAAbUBQAAAAAG2AQEAAAABtwEBAAAAAbkBAAAAuQECugEBAAAAAbsBAQAAAAG8AQEAAAABvQEBAAAAAb4BAQAAAAG_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_AQEAvAIAIcABQACxAgAhwQFAALICACHCAQIAvQIAIcMBAgC9AgAhxQEBAK8CACEVBQAA0AIAIAcAANECACAIAADSAgAgnQEBAK8CACGfAQAAzwLFASKgAUAAsQIAIbUBQACxAgAhtgEBAK8CACG3AQEAvAIAIbkBAADOArkBIroBAQCvAgAhuwEBAK8CACG8AQEAvAIAIb0BAQC8AgAhvgEBALwCACG_AQEAvAIAIcABQACxAgAhwQFAALICACHCAQIAvQIAIcMBAgC9AgAhxQEBAK8CACEVBQAA-AIAIAcAAPkCACAJAAD7AgAgnQEBAAAAAZ8BAAAAxQECoAFAAAAAAbUBQAAAAAG2AQEAAAABtwEBAAAAAbkBAAAAuQECugEBAAAAAbsBAQAAAAG8AQEAAAABvQEBAAAAAb4BAQAAAAG_AQEAAAABwAFAAAAAAcEBQAAAAAHCAQIAAAABwwECAAAAAcUBAQAAAAECAAAACQAgHgAAmgQAIAMAAAAHACAeAACaBAAgHwAAngQAIBcAAAAHACAFAADQAgAgBwAA0QIAIAkAANMCACAXAACeBAAgnQEBAK8CACGfAQAAzwLFASKgAUAAsQIAIbUBQACxAgAhtgEBAK8CACG3AQEAvAIAIbkBAADOArkBIroBAQCvAgAhuwEBAK8CACG8AQEAvAIAIb0BAQC8AgAhvgEBALwCACG_AQEAvAIAIcABQACxAgAhwQFAALICACHCAQIAvQIAIcMBAgC9AgAhxQEBAK8CACEVBQAA0AIAIAcAANECACAJAADTAgAgnQEBAK8CACGfAQAAzwLFASKgAUAAsQIAIbUBQACxAgAhtgEBAK8CACG3AQEAvAIAIbkBAADOArkBIroBAQCvAgAhuwEBAK8CACG8AQEAvAIAIb0BAQC8AgAhvgEBALwCACG_AQEAvAIAIcABQACxAgAhwQFAALICACHCAQIAvQIAIcMBAgC9AgAhxQEBAK8CACEQBAAA3wMAIAsAAOADACANAADiAwAgDwAA4wMAIBAAAOQDACARAADlAwAgnQEBAAAAAaABQAAAAAG1AUAAAAAB5gEBAAAAAecBAQAAAAHoAQEAAAAB6QEBAAAAAeoBQAAAAAHrASAAAAAB7AFAAAAAAQIAAAABACAeAACfBAAgFQUAAPgCACAIAAD6AgAgCQAA-wIAIJ0BAQAAAAGfAQAAAMUBAqABQAAAAAG1AUAAAAABtgEBAAAAAbcBAQAAAAG5AQAAALkBAroBAQAAAAG7AQEAAAABvAEBAAAAAb0BAQAAAAG-AQEAAAABvwEBAAAAAcABQAAAAAHBAUAAAAABwgECAAAAAcMBAgAAAAHFAQEAAAABAgAAAAkAIB4AAKEEACADAAAAHgAgHgAAnwQAIB8AAKUEACASAAAAHgAgBAAAmAMAIAsAAJkDACANAACbAwAgDwAAnAMAIBAAAJ0DACARAACeAwAgFwAApQQAIJ0BAQCvAgAhoAFAALECACG1AUAAsQIAIeYBAQCvAgAh5wEBAK8CACHoAQEAvAIAIekBAQC8AgAh6gFAALICACHrASAAlwMAIewBQACyAgAhEAQAAJgDACALAACZAwAgDQAAmwMAIA8AAJwDACAQAACdAwAgEQAAngMAIJ0BAQCvAgAhoAFAALECACG1AUAAsQIAIeYBAQCvAgAh5wEBAK8CACHoAQEAvAIAIekBAQC8AgAh6gFAALICACHrASAAlwMAIewBQACyAgAhAwAAAAcAIB4AAKEEACAfAACoBAAgFwAAAAcAIAUAANACACAIAADSAgAgCQAA0wIAIBcAAKgEACCdAQEArwIAIZ8BAADPAsUBIqABQACxAgAhtQFAALECACG2AQEArwIAIbcBAQC8AgAhuQEAAM4CuQEiugEBAK8CACG7AQEArwIAIbwBAQC8AgAhvQEBALwCACG-AQEAvAIAIb8BAQC8AgAhwAFAALECACHBAUAAsgIAIcIBAgC9AgAhwwECAL0CACHFAQEArwIAIRUFAADQAgAgCAAA0gIAIAkAANMCACCdAQEArwIAIZ8BAADPAsUBIqABQACxAgAhtQFAALECACG2AQEArwIAIbcBAQC8AgAhuQEAAM4CuQEiugEBAK8CACG7AQEArwIAIbwBAQC8AgAhvQEBALwCACG-AQEAvAIAIb8BAQC8AgAhwAFAALECACHBAUAAsgIAIcIBAgC9AgAhwwECAL0CACHFAQEArwIAIQgEBgIKAAoLCgMMGgQNGwYPHQgQIggRJAkBAwABBQUAAQcOBAgSBQkWBgoABwIDAAEGAAMBBgADAgMAAQYAAwMHFwAIGAAJGQACAwABDh8BAQMAAQUEJQALJgAMJwANKAAQKQAAAAADCgAPJAAQJQARAAAAAwoADyQAECUAEQEDAAEBAwABAwoAFiQAFyUAGAAAAAMKABYkABclABgBAwABAQMAAQUKAB0kACAlACFGAB5HAB8AAAAAAAUKAB0kACAlACFGAB5HAB8CAwABDngBAgMAAQ5-AQMKACYkACclACgAAAADCgAmJAAnJQAoAQUAAQEFAAEFCgAtJAAwJQAxRgAuRwAvAAAAAAAFCgAtJAAwJQAxRgAuRwAvAgMAAQYAAwIDAAEGAAMFCgA2JAA5JQA6RgA3RwA4AAAAAAAFCgA2JAA5JQA6RgA3RwA4AQYAAwEGAAMFCgA_JABCJQBDRgBARwBBAAAAAAAFCgA_JABCJQBDRgBARwBBAgMAAQYAAwIDAAEGAAMDCgBIJABJJQBKAAAAAwoASCQASSUAShICARMqARQsARUtARYuARgwARkyCxozDBs1ARw3Cx04DSA5ASE6ASI7CyY-Dic_EihBCSlCCSpECStFCSxGCS1ICS5KCy9LEzBNCTFPCzJQFDNRCTRSCTVTCzZWFTdXGThYAjlZAjpaAjtbAjxcAj1eAj5gCz9hGkBjAkFlC0JmG0NnAkRoAkVpC0hsHEltIkpuCEtvCExwCE1xCE5yCE90CFB2C1F3I1J6CFN8C1R9JFV_CFaAAQhXgQELWIQBJVmFASlahgEDW4cBA1yIAQNdiQEDXooBA1-MAQNgjgELYY8BKmKRAQNjkwELZJQBK2WVAQNmlgEDZ5cBC2iaASxpmwEyapwBBmudAQZsngEGbZ8BBm6gAQZvogEGcKQBC3GlATNypwEGc6kBC3SqATR1qwEGdqwBBnetAQt4sAE1ebEBO3qyAQV7swEFfLQBBX21AQV-tgEFf7gBBYABugELgQG7ATyCAb0BBYMBvwELhAHAAT2FAcEBBYYBwgEFhwHDAQuIAcYBPokBxwFEigHIAQSLAckBBIwBygEEjQHLAQSOAcwBBI8BzgEEkAHQAQuRAdEBRZIB0wEEkwHVAQuUAdYBRpUB1wEElgHYAQSXAdkBC5gB3AFHmQHdAUs" + 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\",\"selfieKey\",\"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_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_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" } async function decodeBase64AsWasm(wasmBase64: string): Promise { diff --git a/app/generated/prisma/internal/prismaNamespace.ts b/app/generated/prisma/internal/prismaNamespace.ts index 5344089..761471f 100644 --- a/app/generated/prisma/internal/prismaNamespace.ts +++ b/app/generated/prisma/internal/prismaNamespace.ts @@ -1065,6 +1065,7 @@ export const UserProfileScalarFieldEnum = { city: 'city', interests: 'interests', instagram: 'instagram', + vibe: 'vibe', createdAt: 'createdAt', updatedAt: 'updatedAt' } as const @@ -1130,6 +1131,7 @@ export const TripScalarFieldEnum = { endDate: 'endDate', maxParticipants: 'maxParticipants', price: 'price', + vibe: 'vibe', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', @@ -1241,6 +1243,20 @@ export type BooleanFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, +/** + * Reference to a field of type 'Vibe' + */ +export type EnumVibeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Vibe'> + + + +/** + * Reference to a field of type 'Vibe[]' + */ +export type ListEnumVibeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Vibe[]'> + + + /** * Reference to a field of type 'Int' */ diff --git a/app/generated/prisma/internal/prismaNamespaceBrowser.ts b/app/generated/prisma/internal/prismaNamespaceBrowser.ts index 7e7c088..4605ba0 100644 --- a/app/generated/prisma/internal/prismaNamespaceBrowser.ts +++ b/app/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -100,6 +100,7 @@ export const UserProfileScalarFieldEnum = { city: 'city', interests: 'interests', instagram: 'instagram', + vibe: 'vibe', createdAt: 'createdAt', updatedAt: 'updatedAt' } as const @@ -165,6 +166,7 @@ export const TripScalarFieldEnum = { endDate: 'endDate', maxParticipants: 'maxParticipants', price: 'price', + vibe: 'vibe', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', diff --git a/app/generated/prisma/models/Trip.ts b/app/generated/prisma/models/Trip.ts index a7c33fc..a93c90f 100644 --- a/app/generated/prisma/models/Trip.ts +++ b/app/generated/prisma/models/Trip.ts @@ -51,6 +51,7 @@ export type TripMinAggregateOutputType = { endDate: Date | null maxParticipants: number | null price: number | null + vibe: $Enums.Vibe | null status: $Enums.TripStatus | null createdAt: Date | null updatedAt: Date | null @@ -72,6 +73,7 @@ export type TripMaxAggregateOutputType = { endDate: Date | null maxParticipants: number | null price: number | null + vibe: $Enums.Vibe | null status: $Enums.TripStatus | null createdAt: Date | null updatedAt: Date | null @@ -93,6 +95,7 @@ export type TripCountAggregateOutputType = { endDate: number maxParticipants: number price: number + vibe: number status: number createdAt: number updatedAt: number @@ -126,6 +129,7 @@ export type TripMinAggregateInputType = { endDate?: true maxParticipants?: true price?: true + vibe?: true status?: true createdAt?: true updatedAt?: true @@ -147,6 +151,7 @@ export type TripMaxAggregateInputType = { endDate?: true maxParticipants?: true price?: true + vibe?: true status?: true createdAt?: true updatedAt?: true @@ -168,6 +173,7 @@ export type TripCountAggregateInputType = { endDate?: true maxParticipants?: true price?: true + vibe?: true status?: true createdAt?: true updatedAt?: true @@ -276,6 +282,7 @@ export type TripGroupByOutputType = { endDate: Date | null maxParticipants: number price: number + vibe: $Enums.Vibe | null status: $Enums.TripStatus createdAt: Date updatedAt: Date @@ -320,6 +327,7 @@ export type TripWhereInput = { endDate?: Prisma.DateTimeNullableFilter<"Trip"> | Date | string | null maxParticipants?: Prisma.IntFilter<"Trip"> | number price?: Prisma.IntFilter<"Trip"> | number + vibe?: Prisma.EnumVibeNullableFilter<"Trip"> | $Enums.Vibe | null status?: Prisma.EnumTripStatusFilter<"Trip"> | $Enums.TripStatus createdAt?: Prisma.DateTimeFilter<"Trip"> | Date | string updatedAt?: Prisma.DateTimeFilter<"Trip"> | Date | string @@ -345,6 +353,7 @@ export type TripOrderByWithRelationInput = { endDate?: Prisma.SortOrderInput | Prisma.SortOrder maxParticipants?: Prisma.SortOrder price?: Prisma.SortOrder + vibe?: Prisma.SortOrderInput | Prisma.SortOrder status?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder @@ -373,6 +382,7 @@ export type TripWhereUniqueInput = Prisma.AtLeast<{ endDate?: Prisma.DateTimeNullableFilter<"Trip"> | Date | string | null maxParticipants?: Prisma.IntFilter<"Trip"> | number price?: Prisma.IntFilter<"Trip"> | number + vibe?: Prisma.EnumVibeNullableFilter<"Trip"> | $Enums.Vibe | null status?: Prisma.EnumTripStatusFilter<"Trip"> | $Enums.TripStatus createdAt?: Prisma.DateTimeFilter<"Trip"> | Date | string updatedAt?: Prisma.DateTimeFilter<"Trip"> | Date | string @@ -398,6 +408,7 @@ export type TripOrderByWithAggregationInput = { endDate?: Prisma.SortOrderInput | Prisma.SortOrder maxParticipants?: Prisma.SortOrder price?: Prisma.SortOrder + vibe?: Prisma.SortOrderInput | Prisma.SortOrder status?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder @@ -427,6 +438,7 @@ export type TripScalarWhereWithAggregatesInput = { endDate?: Prisma.DateTimeNullableWithAggregatesFilter<"Trip"> | Date | string | null maxParticipants?: Prisma.IntWithAggregatesFilter<"Trip"> | number price?: Prisma.IntWithAggregatesFilter<"Trip"> | number + vibe?: Prisma.EnumVibeNullableWithAggregatesFilter<"Trip"> | $Enums.Vibe | null status?: Prisma.EnumTripStatusWithAggregatesFilter<"Trip"> | $Enums.TripStatus createdAt?: Prisma.DateTimeWithAggregatesFilter<"Trip"> | Date | string updatedAt?: Prisma.DateTimeWithAggregatesFilter<"Trip"> | Date | string @@ -448,6 +460,7 @@ export type TripCreateInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -472,6 +485,7 @@ export type TripUncheckedCreateInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -496,6 +510,7 @@ export type TripUpdateInput = { 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 @@ -520,6 +535,7 @@ export type TripUncheckedUpdateInput = { 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 @@ -544,6 +560,7 @@ export type TripCreateManyInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -565,6 +582,7 @@ export type TripUpdateManyMutationInput = { 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 @@ -585,6 +603,7 @@ export type TripUncheckedUpdateManyInput = { 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 @@ -616,6 +635,7 @@ export type TripCountOrderByAggregateInput = { endDate?: Prisma.SortOrder maxParticipants?: Prisma.SortOrder price?: Prisma.SortOrder + vibe?: Prisma.SortOrder status?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder @@ -642,6 +662,7 @@ export type TripMaxOrderByAggregateInput = { endDate?: Prisma.SortOrder maxParticipants?: Prisma.SortOrder price?: Prisma.SortOrder + vibe?: Prisma.SortOrder status?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder @@ -663,6 +684,7 @@ export type TripMinOrderByAggregateInput = { endDate?: Prisma.SortOrder maxParticipants?: Prisma.SortOrder price?: Prisma.SortOrder + vibe?: Prisma.SortOrder status?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder @@ -794,6 +816,7 @@ export type TripCreateWithoutOrganizerInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -817,6 +840,7 @@ export type TripUncheckedCreateWithoutOrganizerInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -869,6 +893,7 @@ export type TripScalarWhereInput = { endDate?: Prisma.DateTimeNullableFilter<"Trip"> | Date | string | null maxParticipants?: Prisma.IntFilter<"Trip"> | number price?: Prisma.IntFilter<"Trip"> | number + vibe?: Prisma.EnumVibeNullableFilter<"Trip"> | $Enums.Vibe | null status?: Prisma.EnumTripStatusFilter<"Trip"> | $Enums.TripStatus createdAt?: Prisma.DateTimeFilter<"Trip"> | Date | string updatedAt?: Prisma.DateTimeFilter<"Trip"> | Date | string @@ -890,6 +915,7 @@ export type TripCreateWithoutReviewsInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -913,6 +939,7 @@ export type TripUncheckedCreateWithoutReviewsInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -952,6 +979,7 @@ export type TripUpdateWithoutReviewsInput = { 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 @@ -975,6 +1003,7 @@ export type TripUncheckedUpdateWithoutReviewsInput = { 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 @@ -998,6 +1027,7 @@ export type TripCreateWithoutImagesInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -1021,6 +1051,7 @@ export type TripUncheckedCreateWithoutImagesInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -1060,6 +1091,7 @@ export type TripUpdateWithoutImagesInput = { 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 @@ -1083,6 +1115,7 @@ export type TripUncheckedUpdateWithoutImagesInput = { 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 @@ -1106,6 +1139,7 @@ export type TripCreateWithoutParticipantsInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -1129,6 +1163,7 @@ export type TripUncheckedCreateWithoutParticipantsInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -1168,6 +1203,7 @@ export type TripUpdateWithoutParticipantsInput = { 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 @@ -1191,6 +1227,7 @@ export type TripUncheckedUpdateWithoutParticipantsInput = { 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 @@ -1214,6 +1251,7 @@ export type TripCreateManyOrganizerInput = { endDate?: Date | string | null maxParticipants: number price: number + vibe?: $Enums.Vibe | null status?: $Enums.TripStatus createdAt?: Date | string updatedAt?: Date | string @@ -1234,6 +1272,7 @@ export type TripUpdateWithoutOrganizerInput = { 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 @@ -1257,6 +1296,7 @@ export type TripUncheckedUpdateWithoutOrganizerInput = { 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 @@ -1280,6 +1320,7 @@ export type TripUncheckedUpdateManyWithoutOrganizerInput = { 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 @@ -1349,6 +1390,7 @@ export type TripSelect = runtime.Types.Extensions.GetOmit<"id" | "title" | "description" | "category" | "destination" | "location" | "meetingPoint" | "itinerary" | "whatsIncluded" | "whatsExcluded" | "date" | "endDate" | "maxParticipants" | "price" | "status" | "createdAt" | "updatedAt" | "organizerId", ExtArgs["result"]["trip"]> +export type TripOmit = runtime.Types.Extensions.GetOmit<"id" | "title" | "description" | "category" | "destination" | "location" | "meetingPoint" | "itinerary" | "whatsIncluded" | "whatsExcluded" | "date" | "endDate" | "maxParticipants" | "price" | "vibe" | "status" | "createdAt" | "updatedAt" | "organizerId", ExtArgs["result"]["trip"]> export type TripInclude = { organizer?: boolean | Prisma.UserDefaultArgs participants?: boolean | Prisma.Trip$participantsArgs @@ -1481,6 +1526,10 @@ export type $TripPayload readonly maxParticipants: Prisma.FieldRef<"Trip", 'Int'> readonly price: Prisma.FieldRef<"Trip", 'Int'> + readonly vibe: Prisma.FieldRef<"Trip", 'Vibe'> readonly status: Prisma.FieldRef<"Trip", 'TripStatus'> readonly createdAt: Prisma.FieldRef<"Trip", 'DateTime'> readonly updatedAt: Prisma.FieldRef<"Trip", 'DateTime'> diff --git a/app/generated/prisma/models/UserProfile.ts b/app/generated/prisma/models/UserProfile.ts index be26b8c..eb2e12f 100644 --- a/app/generated/prisma/models/UserProfile.ts +++ b/app/generated/prisma/models/UserProfile.ts @@ -15,7 +15,7 @@ import type * as Prisma from "../internal/prismaNamespace" /** * Model UserProfile * Profil sosial publik. Berisi info yang user pilih untuk dibagikan ke peserta lain - * (bio, kota, minat). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. + * (bio, kota, minat, vibe). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. */ export type UserProfileModel = runtime.Types.Result.DefaultSelection @@ -31,6 +31,7 @@ export type UserProfileMinAggregateOutputType = { bio: string | null city: string | null instagram: string | null + vibe: $Enums.Vibe | null createdAt: Date | null updatedAt: Date | null } @@ -41,6 +42,7 @@ export type UserProfileMaxAggregateOutputType = { bio: string | null city: string | null instagram: string | null + vibe: $Enums.Vibe | null createdAt: Date | null updatedAt: Date | null } @@ -52,6 +54,7 @@ export type UserProfileCountAggregateOutputType = { city: number interests: number instagram: number + vibe: number createdAt: number updatedAt: number _all: number @@ -64,6 +67,7 @@ export type UserProfileMinAggregateInputType = { bio?: true city?: true instagram?: true + vibe?: true createdAt?: true updatedAt?: true } @@ -74,6 +78,7 @@ export type UserProfileMaxAggregateInputType = { bio?: true city?: true instagram?: true + vibe?: true createdAt?: true updatedAt?: true } @@ -85,6 +90,7 @@ export type UserProfileCountAggregateInputType = { city?: true interests?: true instagram?: true + vibe?: true createdAt?: true updatedAt?: true _all?: true @@ -169,6 +175,7 @@ export type UserProfileGroupByOutputType = { city: string | null interests: string[] instagram: string | null + vibe: $Enums.Vibe | null createdAt: Date updatedAt: Date _count: UserProfileCountAggregateOutputType | null @@ -201,6 +208,7 @@ export type UserProfileWhereInput = { city?: Prisma.StringNullableFilter<"UserProfile"> | string | null interests?: Prisma.StringNullableListFilter<"UserProfile"> instagram?: Prisma.StringNullableFilter<"UserProfile"> | string | null + vibe?: Prisma.EnumVibeNullableFilter<"UserProfile"> | $Enums.Vibe | null createdAt?: Prisma.DateTimeFilter<"UserProfile"> | Date | string updatedAt?: Prisma.DateTimeFilter<"UserProfile"> | Date | string user?: Prisma.XOR @@ -213,6 +221,7 @@ export type UserProfileOrderByWithRelationInput = { city?: Prisma.SortOrderInput | Prisma.SortOrder interests?: Prisma.SortOrder instagram?: Prisma.SortOrderInput | Prisma.SortOrder + vibe?: Prisma.SortOrderInput | Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder user?: Prisma.UserOrderByWithRelationInput @@ -228,6 +237,7 @@ export type UserProfileWhereUniqueInput = Prisma.AtLeast<{ city?: Prisma.StringNullableFilter<"UserProfile"> | string | null interests?: Prisma.StringNullableListFilter<"UserProfile"> instagram?: Prisma.StringNullableFilter<"UserProfile"> | string | null + vibe?: Prisma.EnumVibeNullableFilter<"UserProfile"> | $Enums.Vibe | null createdAt?: Prisma.DateTimeFilter<"UserProfile"> | Date | string updatedAt?: Prisma.DateTimeFilter<"UserProfile"> | Date | string user?: Prisma.XOR @@ -240,6 +250,7 @@ export type UserProfileOrderByWithAggregationInput = { city?: Prisma.SortOrderInput | Prisma.SortOrder interests?: Prisma.SortOrder instagram?: Prisma.SortOrderInput | Prisma.SortOrder + vibe?: Prisma.SortOrderInput | Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder _count?: Prisma.UserProfileCountOrderByAggregateInput @@ -257,6 +268,7 @@ export type UserProfileScalarWhereWithAggregatesInput = { city?: Prisma.StringNullableWithAggregatesFilter<"UserProfile"> | string | null interests?: Prisma.StringNullableListFilter<"UserProfile"> instagram?: Prisma.StringNullableWithAggregatesFilter<"UserProfile"> | string | null + vibe?: Prisma.EnumVibeNullableWithAggregatesFilter<"UserProfile"> | $Enums.Vibe | null createdAt?: Prisma.DateTimeWithAggregatesFilter<"UserProfile"> | Date | string updatedAt?: Prisma.DateTimeWithAggregatesFilter<"UserProfile"> | Date | string } @@ -267,6 +279,7 @@ export type UserProfileCreateInput = { city?: string | null interests?: Prisma.UserProfileCreateinterestsInput | string[] instagram?: string | null + vibe?: $Enums.Vibe | null createdAt?: Date | string updatedAt?: Date | string user: Prisma.UserCreateNestedOneWithoutProfileInput @@ -279,6 +292,7 @@ export type UserProfileUncheckedCreateInput = { city?: string | null interests?: Prisma.UserProfileCreateinterestsInput | string[] instagram?: string | null + vibe?: $Enums.Vibe | null createdAt?: Date | string updatedAt?: Date | string } @@ -289,6 +303,7 @@ export type UserProfileUpdateInput = { city?: Prisma.NullableStringFieldUpdateOperationsInput | string | null interests?: Prisma.UserProfileUpdateinterestsInput | string[] instagram?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + vibe?: Prisma.NullableEnumVibeFieldUpdateOperationsInput | $Enums.Vibe | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string user?: Prisma.UserUpdateOneRequiredWithoutProfileNestedInput @@ -301,6 +316,7 @@ export type UserProfileUncheckedUpdateInput = { city?: Prisma.NullableStringFieldUpdateOperationsInput | string | null interests?: Prisma.UserProfileUpdateinterestsInput | string[] instagram?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + vibe?: Prisma.NullableEnumVibeFieldUpdateOperationsInput | $Enums.Vibe | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -312,6 +328,7 @@ export type UserProfileCreateManyInput = { city?: string | null interests?: Prisma.UserProfileCreateinterestsInput | string[] instagram?: string | null + vibe?: $Enums.Vibe | null createdAt?: Date | string updatedAt?: Date | string } @@ -322,6 +339,7 @@ export type UserProfileUpdateManyMutationInput = { city?: Prisma.NullableStringFieldUpdateOperationsInput | string | null interests?: Prisma.UserProfileUpdateinterestsInput | string[] instagram?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + vibe?: Prisma.NullableEnumVibeFieldUpdateOperationsInput | $Enums.Vibe | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -333,6 +351,7 @@ export type UserProfileUncheckedUpdateManyInput = { city?: Prisma.NullableStringFieldUpdateOperationsInput | string | null interests?: Prisma.UserProfileUpdateinterestsInput | string[] instagram?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + vibe?: Prisma.NullableEnumVibeFieldUpdateOperationsInput | $Enums.Vibe | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -357,6 +376,7 @@ export type UserProfileCountOrderByAggregateInput = { city?: Prisma.SortOrder interests?: Prisma.SortOrder instagram?: Prisma.SortOrder + vibe?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -367,6 +387,7 @@ export type UserProfileMaxOrderByAggregateInput = { bio?: Prisma.SortOrder city?: Prisma.SortOrder instagram?: Prisma.SortOrder + vibe?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -377,6 +398,7 @@ export type UserProfileMinOrderByAggregateInput = { bio?: Prisma.SortOrder city?: Prisma.SortOrder instagram?: Prisma.SortOrder + vibe?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -422,12 +444,17 @@ export type UserProfileUpdateinterestsInput = { push?: string | string[] } +export type NullableEnumVibeFieldUpdateOperationsInput = { + set?: $Enums.Vibe | null +} + export type UserProfileCreateWithoutUserInput = { id?: string bio?: string | null city?: string | null interests?: Prisma.UserProfileCreateinterestsInput | string[] instagram?: string | null + vibe?: $Enums.Vibe | null createdAt?: Date | string updatedAt?: Date | string } @@ -438,6 +465,7 @@ export type UserProfileUncheckedCreateWithoutUserInput = { city?: string | null interests?: Prisma.UserProfileCreateinterestsInput | string[] instagram?: string | null + vibe?: $Enums.Vibe | null createdAt?: Date | string updatedAt?: Date | string } @@ -464,6 +492,7 @@ export type UserProfileUpdateWithoutUserInput = { city?: Prisma.NullableStringFieldUpdateOperationsInput | string | null interests?: Prisma.UserProfileUpdateinterestsInput | string[] instagram?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + vibe?: Prisma.NullableEnumVibeFieldUpdateOperationsInput | $Enums.Vibe | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -474,6 +503,7 @@ export type UserProfileUncheckedUpdateWithoutUserInput = { city?: Prisma.NullableStringFieldUpdateOperationsInput | string | null interests?: Prisma.UserProfileUpdateinterestsInput | string[] instagram?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + vibe?: Prisma.NullableEnumVibeFieldUpdateOperationsInput | $Enums.Vibe | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -487,6 +517,7 @@ export type UserProfileSelect @@ -499,6 +530,7 @@ export type UserProfileSelectCreateManyAndReturn @@ -511,6 +543,7 @@ export type UserProfileSelectUpdateManyAndReturn @@ -523,11 +556,12 @@ export type UserProfileSelectScalar = { city?: boolean interests?: boolean instagram?: boolean + vibe?: boolean createdAt?: boolean updatedAt?: boolean } -export type UserProfileOmit = runtime.Types.Extensions.GetOmit<"id" | "userId" | "bio" | "city" | "interests" | "instagram" | "createdAt" | "updatedAt", ExtArgs["result"]["userProfile"]> +export type UserProfileOmit = runtime.Types.Extensions.GetOmit<"id" | "userId" | "bio" | "city" | "interests" | "instagram" | "vibe" | "createdAt" | "updatedAt", ExtArgs["result"]["userProfile"]> export type UserProfileInclude = { user?: boolean | Prisma.UserDefaultArgs } @@ -562,6 +596,10 @@ export type $UserProfilePayload @@ -994,6 +1032,7 @@ export interface UserProfileFieldRefs { readonly city: Prisma.FieldRef<"UserProfile", 'String'> readonly interests: Prisma.FieldRef<"UserProfile", 'String[]'> readonly instagram: Prisma.FieldRef<"UserProfile", 'String'> + readonly vibe: Prisma.FieldRef<"UserProfile", 'Vibe'> readonly createdAt: Prisma.FieldRef<"UserProfile", 'DateTime'> readonly updatedAt: Prisma.FieldRef<"UserProfile", 'DateTime'> } diff --git a/app/layout.tsx b/app/layout.tsx index 5396665..d13a9a6 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -2,6 +2,7 @@ import type { Metadata } from "next"; import { Geist, Geist_Mono } from "next/font/google"; import { SessionProvider } from "@/components/providers/session-provider"; import { Navbar } from "@/components/shared/navbar"; +import { ProfileNudgeBanner } from "@/components/shared/profile-nudge-banner"; import { siteConfig, siteUrl } from "@/lib/site"; import "./globals.css"; @@ -80,6 +81,7 @@ export default function RootLayout({ +
{children}
diff --git a/app/page.tsx b/app/page.tsx index 226acb9..751e697 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,11 +1,25 @@ import type { Metadata } from "next"; import Link from "next/link"; import Image from "next/image"; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/lib/auth"; import { tripService } from "@/server/services/trip.service"; +import { profileRepo } from "@/server/repositories/profile.repo"; import { TripCard } from "@/features/trip/components/trip-card"; import { siteConfig, siteUrl, absoluteUrl } from "@/lib/site"; import { ACTIVITY_CATEGORIES, categoryMeta } from "@/lib/activity-category"; +type OpenTrip = Awaited>[number]; + +function mapParticipants(trip: OpenTrip) { + return trip.participants.map((p) => ({ + id: p.id, + name: p.user.name, + image: p.user.image, + interests: p.user.profile?.interests ?? [], + })); +} + export const metadata: Metadata = { title: "Cari Teman Trip & Aktivitas — Pergi Bareng, Bukan Sendiri", description: `${siteConfig.slogan} ${siteConfig.description}`, @@ -18,7 +32,14 @@ export const metadata: Metadata = { }; export default async function HomePage() { - const trips = await tripService.getOpenTrips(); + const session = await getServerSession(authOptions); + const [trips, viewerProfile] = await Promise.all([ + tripService.getOpenTrips(), + session?.user?.id + ? profileRepo.findByUserId(session.user.id) + : Promise.resolve(null), + ]); + const viewerInterests = viewerProfile?.interests ?? []; const now = new Date(); const nextWeek = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); @@ -35,8 +56,10 @@ export default async function HomePage() { const shownIds = new Set([...upcomingIds, ...latestTrips.map((t) => t.id)]); - const budgetTrips = trips - .filter((t) => !shownIds.has(t.id) && t.price <= 300000) + // Section sosial: trip yang paling ramai joiner-nya (social proof, bukan price proof). + const buzzingTrips = trips + .filter((t) => !shownIds.has(t.id) && t._count.participants > 0) + .sort((a, b) => b._count.participants - a._count.participants) .slice(0, 3); const orgJsonLd = { @@ -191,6 +214,7 @@ export default async function HomePage() { id={trip.id} title={trip.title} category={trip.category} + vibe={trip.vibe} destination={trip.destination} location={trip.location} date={trip.date} @@ -204,6 +228,8 @@ export default async function HomePage() { isVerifiedOrganizer={ trip.organizer.organizerVerification?.status === "APPROVED" } + participants={mapParticipants(trip)} + viewerInterests={viewerInterests} priority={i === 0} /> ))} @@ -261,6 +287,7 @@ export default async function HomePage() { id={trip.id} title={trip.title} category={trip.category} + vibe={trip.vibe} destination={trip.destination} location={trip.location} date={trip.date} @@ -274,35 +301,38 @@ export default async function HomePage() { isVerifiedOrganizer={ trip.organizer.organizerVerification?.status === "APPROVED" } + participants={mapParticipants(trip)} + viewerInterests={viewerInterests} /> ))} )} - {/* Budget Friendly */} - {budgetTrips.length > 0 && ( + {/* Lagi Ramai — social proof, bukan price proof */} + {buzzingTrips.length > 0 && (
- 💸 + 🤝

- Budget Friendly + Lagi Ramai

- Trip di bawah Rp 300.000 + Banyak yang sudah gabung — kamu nggak bakal jalan sendirian

- {budgetTrips.map((trip) => ( + {buzzingTrips.map((trip) => ( ))}
diff --git a/app/people/page.tsx b/app/people/page.tsx new file mode 100644 index 0000000..f632e89 --- /dev/null +++ b/app/people/page.tsx @@ -0,0 +1,104 @@ +import type { Metadata } from "next"; +import { Suspense } from "react"; +import { profileService } from "@/server/services/profile.service"; +import { UserCard } from "@/features/profile/components/user-card"; +import { PeopleFilter } from "@/features/profile/components/people-filter"; +import { isVibe, vibeLabel } from "@/lib/vibe"; +import { siteConfig } from "@/lib/site"; + +interface PeoplePageProps { + searchParams: Promise<{ + city?: string; + interest?: string; + vibe?: string; + }>; +} + +export async function generateMetadata({ + searchParams, +}: PeoplePageProps): Promise { + const { city, interest, vibe: vibeParam } = await searchParams; + const vibe = isVibe(vibeParam) ? vibeParam : undefined; + const parts: string[] = []; + if (vibe) parts.push(`Vibe ${vibeLabel(vibe).toLowerCase()}`); + if (city) parts.push(`di ${city}`); + if (interest) parts.push(`#${interest.toLowerCase()}`); + const title = parts.length + ? `Cari Teman ${parts.join(" ")}` + : "Cari Teman Aktivitas — Profil Anggota"; + const description = `Telusuri profil anggota ${siteConfig.name} berdasarkan minat, kota, dan vibe. Temukan calon teman trip dengan ritme yang cocok sebelum gabung bareng.`; + return { + title, + description, + alternates: { canonical: "/people" }, + openGraph: { title, description, url: "/people" }, + }; +} + +export default async function PeoplePage({ searchParams }: PeoplePageProps) { + const params = await searchParams; + const vibe = isVibe(params.vibe) ? params.vibe : undefined; + const filters = { + city: params.city?.trim() || undefined, + interest: params.interest?.trim().toLowerCase() || undefined, + vibe, + }; + const hasFilters = Boolean(filters.city || filters.interest || filters.vibe); + + const people = await profileService.findPeople(filters); + + return ( +
+
+

+ Cari Teman Aktivitas +

+

+ {hasFilters + ? `${people.length} orang ditemukan dengan filter di atas` + : `${people.length} anggota dengan profil sosial — kenali dulu sebelum gabung trip`} +

+
+ +
+ + + +
+ + {people.length === 0 ? ( +
+
+ 🔍 +
+

+ {hasFilters + ? "Belum ada anggota yang cocok" + : "Belum ada anggota dengan profil terisi"} +

+

+ {hasFilters + ? "Coba longgarkan filter — kota, minat, atau vibe." + : "Setelah anggota lain mengisi profil, mereka akan muncul di sini."} +

+
+ ) : ( +
    + {people.map((u) => ( +
  • + +
  • + ))} +
+ )} +
+ ); +} diff --git a/app/profile/page.tsx b/app/profile/page.tsx index 4133042..5d12c96 100644 --- a/app/profile/page.tsx +++ b/app/profile/page.tsx @@ -95,6 +95,7 @@ export default async function ProfilePage() { city: ownProfile.city, interests: ownProfile.interests, instagram: ownProfile.instagram, + vibe: ownProfile.vibe, } : null } @@ -169,6 +170,7 @@ export default async function ProfilePage() { id={trip.id} title={trip.title} category={trip.category} + vibe={trip.vibe} destination={trip.destination} location={trip.location} date={trip.date} diff --git a/app/trips/[id]/page.tsx b/app/trips/[id]/page.tsx index 0dac425..077ec11 100644 --- a/app/trips/[id]/page.tsx +++ b/app/trips/[id]/page.tsx @@ -2,6 +2,7 @@ import type { Metadata } from "next"; import { notFound } from "next/navigation"; import { getServerSession } from "next-auth"; import Link from "next/link"; +import Image from "next/image"; import { authOptions } from "@/lib/auth"; import { tripService } from "@/server/services/trip.service"; import { trustService } from "@/server/services/trust.service"; @@ -15,6 +16,8 @@ import { TripProgramBlock } from "@/features/trip/components/trip-program-block" import { OrganizerPaymentQueue } from "@/features/booking/components/organizer-payment-queue"; import { ImageGallery } from "@/features/trip/components/image-gallery"; import { TripReviewSection } from "@/features/review/components/trip-review-section"; +import { categoryMeta } from "@/lib/activity-category"; +import { vibeMeta } from "@/lib/vibe"; import { isPastTripLastDayForReview, isTripDepartureDayPast, @@ -127,6 +130,8 @@ export default async function TripDetailPage({ (p) => p.markedPaidAt && !p.paymentConfirmedAt ); + const catMeta = categoryMeta(trip.category); + const tripUrl = absoluteUrl(`/trips/${trip.id}`); const eventStatus = trip.status === "OPEN" @@ -240,8 +245,21 @@ export default async function TripDetailPage({

{trip.title}

-

- 🏔️ {trip.destination} +

+ {catMeta.icon} + + {catMeta.label} + + {trip.vibe && ( + + {vibeMeta(trip.vibe).icon} + {vibeMeta(trip.vibe).label} + + )} + {trip.destination}

-

+

Peserta terkonfirmasi ({confirmedCount})

+

+ Kenalan dulu sebelum berangkat — klik kartu untuk lihat profil. +

{confirmedCount === 0 ? (

Belum ada peserta yang dikonfirmasi.{" "} @@ -459,22 +480,61 @@ export default async function TripDetailPage({ : "Jadilah yang pertama mendaftar! 🎒"}

) : ( -
- {confirmedParticipants.map((p) => ( - -
- {p.user.name.charAt(0).toUpperCase()} -
- - {p.user.name} - - - ))} -
+
    + {confirmedParticipants.map((p) => { + const interests = p.user.profile?.interests ?? []; + const city = p.user.profile?.city; + return ( +
  • + + {p.user.image ? ( + + ) : ( +
    + {p.user.name.charAt(0).toUpperCase()} +
    + )} +
    +

    + {p.user.name} +

    + {city && ( +

    + 📍 {city} +

    + )} + {interests.length > 0 && ( +
    + {interests.slice(0, 3).map((tag) => ( + + #{tag} + + ))} + {interests.length > 3 && ( + + +{interests.length - 3} + + )} +
    + )} +
    + +
  • + ); + })} +
)} diff --git a/app/trips/page.tsx b/app/trips/page.tsx index 0985b4e..d1afdcb 100644 --- a/app/trips/page.tsx +++ b/app/trips/page.tsx @@ -1,11 +1,21 @@ import type { Metadata } from "next"; import Link from "next/link"; import { Suspense } from "react"; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/lib/auth"; import { tripService } from "@/server/services/trip.service"; +import { profileRepo } from "@/server/repositories/profile.repo"; import { TripCard } from "@/features/trip/components/trip-card"; import { TripFilter } from "@/features/trip/components/trip-filter"; import { siteConfig } from "@/lib/site"; import { categoryLabel, isActivityCategory } from "@/lib/activity-category"; +import { isVibe } from "@/lib/vibe"; +import type { GroupSize } from "@/server/repositories/trip.repo"; + +const GROUP_SIZES: GroupSize[] = ["SMALL", "MEDIUM", "LARGE"]; +function isGroupSize(value: unknown): value is GroupSize { + return typeof value === "string" && (GROUP_SIZES as string[]).includes(value); +} interface TripsPageProps { searchParams: Promise<{ @@ -13,6 +23,8 @@ interface TripsPageProps { from?: string; to?: string; category?: string; + vibe?: string; + groupSize?: string; }>; } @@ -44,19 +56,30 @@ export async function generateMetadata({ export default async function TripsPage({ searchParams }: TripsPageProps) { const params = await searchParams; const category = isActivityCategory(params.category) ? params.category : undefined; - const hasFilters = Boolean(params.q || params.from || params.to || category); + const vibe = isVibe(params.vibe) ? params.vibe : undefined; + const groupSize = isGroupSize(params.groupSize) ? params.groupSize : undefined; + const hasFilters = Boolean( + params.q || params.from || params.to || category || vibe || groupSize + ); const filters = { q: params.q, from: params.from, to: params.to, category, + vibe, + groupSize, }; - const [trips, allTrips] = await Promise.all([ + const session = await getServerSession(authOptions); + const [trips, allTrips, viewerProfile] = await Promise.all([ tripService.getOpenTrips(filters), hasFilters ? tripService.getOpenTrips() : null, + session?.user?.id + ? profileRepo.findByUserId(session.user.id) + : Promise.resolve(null), ]); const totalCount = hasFilters ? allTrips!.length : trips.length; + const viewerInterests = viewerProfile?.interests ?? []; return (
@@ -120,6 +143,7 @@ export default async function TripsPage({ searchParams }: TripsPageProps) { id={trip.id} title={trip.title} category={trip.category} + vibe={trip.vibe} destination={trip.destination} location={trip.location} date={trip.date} @@ -133,6 +157,13 @@ export default async function TripsPage({ searchParams }: TripsPageProps) { isVerifiedOrganizer={ trip.organizer.organizerVerification?.status === "APPROVED" } + participants={trip.participants.map((p) => ({ + id: p.id, + name: p.user.name, + image: p.user.image, + interests: p.user.profile?.interests ?? [], + }))} + viewerInterests={viewerInterests} /> ))}
diff --git a/app/u/[id]/page.tsx b/app/u/[id]/page.tsx index a7eabc7..cc99cb1 100644 --- a/app/u/[id]/page.tsx +++ b/app/u/[id]/page.tsx @@ -6,6 +6,7 @@ import { profileService } from "@/server/services/profile.service"; import { TripCard } from "@/features/trip/components/trip-card"; import { ProfileTripRow } from "@/features/profile/components/profile-trip-row"; import { siteConfig } from "@/lib/site"; +import { vibeMeta } from "@/lib/vibe"; interface PageProps { params: Promise<{ id: string }>; @@ -94,6 +95,18 @@ export default async function PublicProfilePage({ params }: PageProps) {

)} + {profile?.vibe && ( +
+ + {vibeMeta(profile.vibe).icon} + Vibe: {vibeMeta(profile.vibe).label} + +
+ )} + {profile?.interests && profile.interests.length > 0 && (
{profile.interests.map((tag) => ( @@ -164,6 +177,7 @@ export default async function PublicProfilePage({ params }: PageProps) { id={trip.id} title={trip.title} category={trip.category} + vibe={trip.vibe} destination={trip.destination} location={trip.location} date={trip.date} diff --git a/components/shared/navbar.tsx b/components/shared/navbar.tsx index a80124f..b8733d3 100644 --- a/components/shared/navbar.tsx +++ b/components/shared/navbar.tsx @@ -35,6 +35,12 @@ export function Navbar() { > Open Trip + + Cari Teman + {session?.user ? ( <> @@ -125,6 +131,13 @@ export function Navbar() { > Open Trip + setMenuOpen(false)} + className="rounded-lg px-3 py-2.5 text-sm font-medium text-neutral-700 transition-colors hover:bg-neutral-50" + > + Cari Teman + {session?.user ? ( <> diff --git a/components/shared/profile-nudge-banner.tsx b/components/shared/profile-nudge-banner.tsx new file mode 100644 index 0000000..a332572 --- /dev/null +++ b/components/shared/profile-nudge-banner.tsx @@ -0,0 +1,41 @@ +import Link from "next/link"; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/lib/auth"; +import { profileRepo } from "@/server/repositories/profile.repo"; + +/** + * Server component banner: muncul di atas semua halaman ketika user sudah login + * tapi profil sosialnya kosong. Menjaga janji "kenalan dulu, gabung kemudian" + * dengan mendorong user mengisi minat/kota sebelum join trip. + */ +export async function ProfileNudgeBanner() { + const session = await getServerSession(authOptions); + if (!session?.user?.id) return null; + + const profile = await profileRepo.findByUserId(session.user.id); + const hasMeaningfulProfile = + !!profile && + (!!profile.bio?.trim() || + !!profile.city?.trim() || + profile.interests.length > 0); + + if (hasMeaningfulProfile) return null; + + return ( +
+
+

+ Lengkapi profil sosial kamu — + bio, kota, dan minat. Calon teman trip akan lebih mudah kenal kamu + sebelum gabung bareng. +

+ + Isi profil sekarang + +
+
+ ); +} diff --git a/deployment.md b/deployment.md deleted file mode 100644 index 702c7a5..0000000 --- a/deployment.md +++ /dev/null @@ -1,136 +0,0 @@ -# Deploy Setrip dengan PM2 - -Panduan ini untuk menjalankan aplikasi **Next.js** (setrip) di server Linux/VPS menggunakan **PM2**. Pastikan **PostgreSQL** sudah tersedia dan URL-nya sesuai dengan variabel lingkungan aplikasi. - -## Prasyarat - -- Node.js **20.x** (disarankan, selaras dengan `@types/node` di proyek) -- npm atau pnpm/yarn (contoh di bawah memakai **npm**) -- PM2 terpasang global: `npm install -g pm2` -- Basis data PostgreSQL dan file `.env` di server (lihat bagian Lingkungan) - -## File PM2 - -Konfigurasi PM2 ada di root repositori: **`ecosystem.config.js`** (nama ini disengaja). - -### Jangan `pm2 start ecosystem.js` kecuali itu skrip Node - -Jika Anda menjalankan `pm2 start ecosystem.js` pada file yang isinya hanya `module.exports = { apps: [...] }`, PM2 menganggapnya **skrip aplikasi biasa** dan menjalankannya dengan `node ecosystem.js`. Akibatnya: - -- Nama proses di daftar PM2 jadi **`ecosystem`** (bukan `setrip`). -- Next.js **tidak** dijalankan lewat entri `apps` Anda. - -Gunakan selalu: - -```bash -pm2 start ecosystem.config.js --env production -``` - -Isi file menjalankan biner Next (`next start`) setelah build, mode **fork**, satu proses, **PORT** **3090**. Ubah `PORT` di file tersebut jika kebijakan port berubah. - -### Berapa port yang dibutuhkan? - -Untuk **trafik HTTP/HTTPS ke aplikasi Next.js**, cukup **satu port** yang didengarkan oleh `next start` — di setup ini **3090** (atau satu port lain yang Anda set). - -**PostgreSQL** memakai port tersendiri (biasanya **5432**) di mesin tempat database berjalan. Itu bukan “port kedua untuk publik” dari aplikasi web: koneksi DB terjadi dari server aplikasi ke database (localhost atau jaringan internal). Di firewall publik Anda biasanya hanya membuka **80/443** (reverse proxy) atau **3090** jika diakses langsung tanpa proxy. - -## Langkah deploy (pertama kali) - -1. **Clone** repositori ke server (misalnya `/var/www/setrip`). - -2. **Masuk** ke folder proyek dan pasang dependensi produksi: - - ```bash - cd /var/www/setrip - npm ci - ``` - -3. **Lingkungan** — salin atau buat `.env` / `.env.production` di server (jangan commit rahasia ke git). Minimal sesuai kebutuhan aplikasi Anda, contoh: - - - `DATABASE_URL` — koneksi PostgreSQL - - `NEXTAUTH_SECRET` — string acak yang kuat - - `NEXTAUTH_URL` — URL publik aplikasi (harus cocok dengan yang dibuka browser), misalnya `https://domain-anda.com` atau `http://host:3090` jika tanpa HTTPS dan akses langsung ke port tersebut - -4. **Prisma** — generate client dan terapkan migrasi (jika memakai migrasi): - - ```bash - npx prisma generate - npx prisma migrate deploy - ``` - -5. **Build** Next.js: - - ```bash - npm run build - ``` - -6. **Mulai** dengan PM2: - - ```bash - pm2 start ecosystem.config.js --env production - ``` - - Tanpa `--env production` tetap jalan; variabel default memakai blok `env` di file. - -7. **Simpan** daftar proses agar bangkit lagi setelah reboot: - - ```bash - pm2 save - pm2 startup - ``` - - Ikuti perintah yang dikeluarkan PM2 (biasanya menyalin satu baris `sudo env ...`). - -## Perintah PM2 yang sering dipakai - -| Perintah | Keterangan | -|----------|------------| -| `pm2 status` | Status semua aplikasi | -| `pm2 logs setrip` | Log aplikasi bernama `setrip` | -| `pm2 reload setrip` | Reload tanpa downtime (berguna setelah deploy baru) | -| `pm2 restart setrip` | Restart proses | -| `pm2 stop setrip` | Menghentikan aplikasi | -| `pm2 delete setrip` | Menghapus aplikasi dari daftar PM2 | - -## Deploy ulang (update kode) - -Di server, setelah `git pull` (atau salin artefak baru): - -```bash -cd /var/www/setrip -npm ci -npx prisma generate -npx prisma migrate deploy -npm run build -pm2 reload setrip -``` - -Jika nama aplikasi di PM2 berbeda, ganti `setrip` dengan nama di `ecosystem.config.js` (`name`). - -### Hapus proses PM2 yang salah (nama `ecosystem`) - -Jika Anda pernah menjalankan `pm2 start ecosystem.js` dan muncul proses bernama `ecosystem`: - -```bash -pm2 stop ecosystem -pm2 delete ecosystem -``` - -Atau pakai id dari `pm2 status` (contoh id `9`): - -```bash -pm2 stop 9 -pm2 delete 9 -``` - -Lalu mulai lagi dengan `pm2 start ecosystem.config.js --env production` dan `pm2 save`. - -## Reverse proxy (opsional) - -Agar bisa HTTPS dan port 80/443, letakkan **Nginx** (atau Caddy) di depan aplikasi yang mendengarkan di `127.0.0.1:3090`. Pastikan `NEXTAUTH_URL` memakai skema dan host yang sama dengan yang diakses pengguna. - -## Pemecahan masalah - -- **502 / tidak terhubung** — cek `pm2 logs setrip`, pastikan PostgreSQL dapat dijangkau dari server, dan `PORT` tidak bentrok dengan layanan lain. -- **Error Prisma** — pastikan `npx prisma generate` dijalankan setelah `npm ci` di setiap deploy, dan `DATABASE_URL` benar. -- **NextAuth** — `NEXTAUTH_URL` harus persis URL publik (termasuk `https://`). diff --git a/features/profile/actions.ts b/features/profile/actions.ts index 69d47ce..3ea8f7e 100644 --- a/features/profile/actions.ts +++ b/features/profile/actions.ts @@ -22,6 +22,7 @@ export async function updateProfileAction(formData: FormData) { city: formData.get("city"), instagram: formData.get("instagram"), interests, + vibe: formData.get("vibe"), }; const parsed = updateProfileSchema.safeParse(raw); diff --git a/features/profile/components/people-filter.tsx b/features/profile/components/people-filter.tsx new file mode 100644 index 0000000..a5e5080 --- /dev/null +++ b/features/profile/components/people-filter.tsx @@ -0,0 +1,153 @@ +"use client"; + +import { useRouter, useSearchParams } from "next/navigation"; +import { useState } from "react"; +import { VIBES, vibeMeta, isVibe } from "@/lib/vibe"; +import type { Vibe } from "@/app/generated/prisma/enums"; + +export function PeopleFilter() { + const router = useRouter(); + const searchParams = useSearchParams(); + + const initialVibe = searchParams.get("vibe"); + const [vibe, setVibe] = useState( + isVibe(initialVibe) ? initialVibe : null + ); + const [city, setCity] = useState(searchParams.get("city") ?? ""); + const [interest, setInterest] = useState(searchParams.get("interest") ?? ""); + + function buildParams(overrides?: { vibe?: Vibe | null }) { + const params = new URLSearchParams(); + const nextVibe = overrides && "vibe" in overrides ? overrides.vibe : vibe; + if (nextVibe) params.set("vibe", nextVibe); + if (city.trim()) params.set("city", city.trim()); + if (interest.trim()) params.set("interest", interest.trim().toLowerCase()); + return params; + } + + function pushFilters(params: URLSearchParams) { + const qs = params.toString(); + router.push(`/people${qs ? `?${qs}` : ""}`); + } + + function handleSelectVibe(next: Vibe | null) { + setVibe(next); + pushFilters(buildParams({ vibe: next })); + } + + function handleSearch(e: React.FormEvent) { + e.preventDefault(); + pushFilters(buildParams()); + } + + function handleReset() { + setVibe(null); + setCity(""); + setInterest(""); + router.push("/people"); + } + + const hasFilters = vibe || city.trim() || interest.trim(); + + return ( +
+
+ +
+ + {VIBES.map((v) => { + const m = vibeMeta(v); + const active = vibe === v; + return ( + + ); + })} +
+
+ +
+
+ + setCity(e.target.value)} + placeholder="Bandung, Jakarta, ..." + className="w-full rounded-xl border border-neutral-200 bg-neutral-50 px-3 py-2.5 text-sm text-neutral-800 placeholder:text-neutral-400 focus:border-primary-500 focus:bg-white" + /> +
+ +
+ + setInterest(e.target.value)} + placeholder="hiking, fotografi, yoga..." + className="w-full rounded-xl border border-neutral-200 bg-neutral-50 px-3 py-2.5 text-sm text-neutral-800 placeholder:text-neutral-400 focus:border-primary-500 focus:bg-white" + /> +
+ +
+ + {hasFilters && ( + + )} +
+
+
+ ); +} diff --git a/features/profile/components/profile-editor.tsx b/features/profile/components/profile-editor.tsx index c8302b1..8331667 100644 --- a/features/profile/components/profile-editor.tsx +++ b/features/profile/components/profile-editor.tsx @@ -4,6 +4,8 @@ import { useState } from "react"; import { useRouter } from "next/navigation"; import { updateProfileAction } from "@/features/profile/actions"; import { LIMITS } from "@/lib/limits"; +import { VIBES, vibeMeta } from "@/lib/vibe"; +import type { Vibe } from "@/app/generated/prisma/enums"; interface ProfileEditorProps { userId: string; @@ -12,6 +14,7 @@ interface ProfileEditorProps { city: string | null; interests: string[]; instagram: string | null; + vibe: Vibe | null; } | null; } @@ -27,6 +30,7 @@ export function ProfileEditor({ userId, initial }: ProfileEditorProps) { const [instagram, setInstagram] = useState(initial?.instagram ?? ""); const [interests, setInterests] = useState(initial?.interests ?? []); const [interestDraft, setInterestDraft] = useState(""); + const [vibe, setVibe] = useState(initial?.vibe ?? null); function addInterest() { const v = interestDraft.trim().toLowerCase(); @@ -65,6 +69,7 @@ export function ProfileEditor({ userId, initial }: ProfileEditorProps) { if (bio.trim()) formData.set("bio", bio.trim()); if (city.trim()) formData.set("city", city.trim()); if (instagram.trim()) formData.set("instagram", instagram.trim()); + if (vibe) formData.set("vibe", vibe); interests.forEach((t) => formData.append("interests", t)); const result = await updateProfileAction(formData); @@ -257,6 +262,56 @@ export function ProfileEditor({ userId, initial }: ProfileEditorProps) {
+
+ +

+ Bantu calon teman trip nyambung dengan ritme kamu. +

+
+ + {VIBES.map((v) => { + const m = vibeMeta(v); + const active = vibe === v; + return ( + + ); + })} +
+ {vibe && ( +

+ {vibeMeta(vibe).description} +

+ )} +
+
+ {/* Vibe Chips */} +
+ +

+ Bantu calon peserta menilai apakah ritmenya cocok dengan mereka. +

+
+ + {VIBES.map((v) => { + const m = vibeMeta(v); + const active = v === vibe; + return ( + + ); + })} +
+ {vibe && ( +

+ {vibeMeta(vibe).description} +

+ )} +
+
)} - - {meta.icon} - {meta.label} - +
+ + {meta.icon} + {meta.label} + + {vMeta && ( + + {vMeta.icon} + {vMeta.label} + + )} +
+ {(previewParticipants.length > 0 || overlapCount > 0) && ( +
+ {previewParticipants.length > 0 && ( +
+ {previewParticipants.map((p) => + p.image ? ( + + ) : ( +
+ {p.name.charAt(0).toUpperCase()} +
+ ) + )} + {moreCount > 0 && ( +
+ +{moreCount} +
+ )} +
+ )} + {overlapCount > 0 && ( + + ✨ {overlapCount} peserta sama minat + + )} +
+ )} +
{formatRupiah(price)} diff --git a/features/trip/components/trip-filter.tsx b/features/trip/components/trip-filter.tsx index 7ee2a19..3c5f9ff 100644 --- a/features/trip/components/trip-filter.tsx +++ b/features/trip/components/trip-filter.tsx @@ -10,16 +10,38 @@ import { categoryMeta, isActivityCategory, } from "@/lib/activity-category"; -import type { ActivityCategory } from "@/app/generated/prisma/enums"; +import { VIBES, vibeMeta, isVibe } from "@/lib/vibe"; +import type { ActivityCategory, Vibe } from "@/app/generated/prisma/enums"; + +type GroupSize = "SMALL" | "MEDIUM" | "LARGE"; +const GROUP_SIZES: { value: GroupSize; label: string; hint: string }[] = [ + { value: "SMALL", label: "Small", hint: "≤10 — paling akrab" }, + { value: "MEDIUM", label: "Medium", hint: "11–20" }, + { value: "LARGE", label: "Large", hint: "21+" }, +]; +function isGroupSize(value: unknown): value is GroupSize { + return ( + typeof value === "string" && + GROUP_SIZES.some((g) => g.value === value) + ); +} export function TripFilter() { const router = useRouter(); const searchParams = useSearchParams(); const initialCategory = searchParams.get("category"); + const initialVibe = searchParams.get("vibe"); + const initialGroup = searchParams.get("groupSize"); const [category, setCategory] = useState( isActivityCategory(initialCategory) ? initialCategory : null ); + const [vibe, setVibe] = useState( + isVibe(initialVibe) ? initialVibe : null + ); + const [groupSize, setGroupSize] = useState( + isGroupSize(initialGroup) ? initialGroup : null + ); const [query, setQuery] = useState(searchParams.get("q") ?? ""); const [startDate, setStartDate] = useState( searchParams.get("from") ? new Date(searchParams.get("from")!) : null @@ -28,11 +50,20 @@ export function TripFilter() { searchParams.get("to") ? new Date(searchParams.get("to")!) : null ); - function buildParams(overrides?: { category?: ActivityCategory | null }) { + function buildParams(overrides?: { + category?: ActivityCategory | null; + vibe?: Vibe | null; + groupSize?: GroupSize | null; + }) { const params = new URLSearchParams(); const nextCategory = overrides && "category" in overrides ? overrides.category : category; + const nextVibe = overrides && "vibe" in overrides ? overrides.vibe : vibe; + const nextGroup = + overrides && "groupSize" in overrides ? overrides.groupSize : groupSize; if (nextCategory) params.set("category", nextCategory); + if (nextVibe) params.set("vibe", nextVibe); + if (nextGroup) params.set("groupSize", nextGroup); if (query.trim()) params.set("q", query.trim()); if (startDate) params.set("from", formatLocalCalendarYmd(startDate)); if (endDate) params.set("to", formatLocalCalendarYmd(endDate)); @@ -49,6 +80,16 @@ export function TripFilter() { pushFilters(buildParams({ category: next })); } + function handleSelectVibe(next: Vibe | null) { + setVibe(next); + pushFilters(buildParams({ vibe: next })); + } + + function handleSelectGroupSize(next: GroupSize | null) { + setGroupSize(next); + pushFilters(buildParams({ groupSize: next })); + } + function handleDateChange(dates: [Date | null, Date | null]) { const [start, end] = dates; setStartDate(start); @@ -57,6 +98,8 @@ export function TripFilter() { if (!start && !end) { const params = new URLSearchParams(); if (category) params.set("category", category); + if (vibe) params.set("vibe", vibe); + if (groupSize) params.set("groupSize", groupSize); if (query.trim()) params.set("q", query.trim()); pushFilters(params); } @@ -69,13 +112,15 @@ export function TripFilter() { function handleReset() { setCategory(null); + setVibe(null); + setGroupSize(null); setQuery(""); setStartDate(null); setEndDate(null); router.push("/trips"); } - const hasFilters = category || query || startDate || endDate; + const hasFilters = category || vibe || groupSize || query || startDate || endDate; return (
+ {/* Vibe & Ukuran grup */} +
+
+ +
+ + {VIBES.map((v) => { + const m = vibeMeta(v); + const active = vibe === v; + return ( + + ); + })} +
+
+ +
+ +
+ + {GROUP_SIZES.map((g) => { + const active = groupSize === g.value; + return ( + + ); + })} +
+
+
+
{/* Search input */}
diff --git a/features/trip/schemas.ts b/features/trip/schemas.ts index 622ec3a..f0e75a1 100644 --- a/features/trip/schemas.ts +++ b/features/trip/schemas.ts @@ -1,6 +1,7 @@ import { z } from "zod/v4"; import { LIMITS } from "@/lib/limits"; import { ACTIVITY_CATEGORIES } from "@/lib/activity-category"; +import { VIBES } from "@/lib/vibe"; import type { ActivityCategory } from "@/app/generated/prisma/enums"; import { isTripDepartureDayPast, @@ -146,6 +147,14 @@ export const createTripSchema = z ) .optional() ), + vibe: z.preprocess( + (val) => { + if (val == null) return undefined; + const s = String(val).trim(); + return s === "" ? undefined : s; + }, + z.enum([...VIBES]).optional() + ), }) .superRefine((data, ctx) => { const dep = tripStoredInstantFromYmd(data.date); diff --git a/lib/vibe.ts b/lib/vibe.ts new file mode 100644 index 0000000..fa00b81 --- /dev/null +++ b/lib/vibe.ts @@ -0,0 +1,41 @@ +import type { Vibe } from "@/app/generated/prisma/enums"; + +export const VIBES = ["CHILL", "BALANCED", "HARDCORE"] as const satisfies readonly Vibe[]; + +interface VibeMeta { + label: string; + icon: string; + description: string; +} + +const META: Record = { + CHILL: { + label: "Chill", + icon: "😌", + description: "Santai, nikmati prosesnya, no rush.", + }, + BALANCED: { + label: "Balanced", + icon: "🙂", + description: "Seimbang — ada effort, ada healing.", + }, + HARDCORE: { + label: "Hardcore", + icon: "🔥", + description: "Push limit, target tercapai, full energy.", + }, +}; + +export function vibeMeta(vibe: Vibe): VibeMeta { + return META[vibe]; +} + +export function vibeLabel(vibe: Vibe): string { + return META[vibe].label; +} + +export function isVibe(value: unknown): value is Vibe { + return ( + typeof value === "string" && (VIBES as readonly string[]).includes(value) + ); +} diff --git a/prisma/migrations/20260508120000_add_profile_vibe/migration.sql b/prisma/migrations/20260508120000_add_profile_vibe/migration.sql new file mode 100644 index 0000000..11d0a79 --- /dev/null +++ b/prisma/migrations/20260508120000_add_profile_vibe/migration.sql @@ -0,0 +1,5 @@ +-- CreateEnum +CREATE TYPE "Vibe" AS ENUM ('CHILL', 'BALANCED', 'HARDCORE'); + +-- AlterTable +ALTER TABLE "UserProfile" ADD COLUMN "vibe" "Vibe"; diff --git a/prisma/migrations/20260508130000_add_trip_vibe/migration.sql b/prisma/migrations/20260508130000_add_trip_vibe/migration.sql new file mode 100644 index 0000000..6b92c3b --- /dev/null +++ b/prisma/migrations/20260508130000_add_trip_vibe/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "Trip" ADD COLUMN "vibe" "Vibe"; + +-- CreateIndex +CREATE INDEX "Trip_vibe_status_date_idx" ON "Trip"("vibe", "status", "date"); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d8fea84..40ceb15 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -35,7 +35,7 @@ model User { } /// Profil sosial publik. Berisi info yang user pilih untuk dibagikan ke peserta lain -/// (bio, kota, minat). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. +/// (bio, kota, minat, vibe). Tidak menyimpan data sensitif — KYC tetap di OrganizerVerification. model UserProfile { id String @id @default(cuid()) userId String @unique @@ -49,11 +49,19 @@ model UserProfile { interests String[] @default([]) /// Username Instagram (tanpa @, opsional) instagram String? + /// Gaya jalan / energi user — dipakai untuk matching teman dengan ritme serupa. + vibe Vibe? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } +enum Vibe { + CHILL + BALANCED + HARDCORE +} + /// Tabel link akun OAuth pihak ketiga (Google, dst). Diisi oleh PrismaAdapter NextAuth. /// Session tidak pakai DB — kita pakai JWT, jadi Session/VerificationToken tidak perlu. model Account { @@ -136,6 +144,8 @@ model Trip { endDate DateTime? maxParticipants Int price Int + /// Ritme/energi trip — dipakai untuk matching dengan vibe user. + vibe Vibe? status TripStatus @default(OPEN) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -148,6 +158,7 @@ model Trip { reviews TripReview[] @@index([category, status, date]) + @@index([vibe, status, date]) } model TripReview { diff --git a/server/repositories/profile.repo.ts b/server/repositories/profile.repo.ts index cca0a53..b0ba259 100644 --- a/server/repositories/profile.repo.ts +++ b/server/repositories/profile.repo.ts @@ -1,10 +1,12 @@ import { prisma } from "@/lib/prisma"; +import type { Vibe } from "@/app/generated/prisma/enums"; interface UpsertProfileInput { bio?: string; city?: string; instagram?: string; interests: string[]; + vibe?: Vibe; } export const profileRepo = { @@ -21,12 +23,14 @@ export const profileRepo = { city: data.city, instagram: data.instagram, interests: data.interests, + vibe: data.vibe, }, update: { bio: data.bio, city: data.city, instagram: data.instagram, interests: data.interests, + vibe: data.vibe, }, }); }, diff --git a/server/repositories/trip.repo.ts b/server/repositories/trip.repo.ts index 7b989a6..cec6c05 100644 --- a/server/repositories/trip.repo.ts +++ b/server/repositories/trip.repo.ts @@ -1,6 +1,6 @@ import { prisma } from "@/lib/prisma"; import { Prisma } from "@/app/generated/prisma/client"; -import type { ActivityCategory } from "@/app/generated/prisma/enums"; +import type { ActivityCategory, Vibe } from "@/app/generated/prisma/enums"; import { utcStartOfDay, utcDayStartFromYmd, @@ -8,11 +8,15 @@ import { maxUtcDate, } from "@/lib/trip-dates"; +export type GroupSize = "SMALL" | "MEDIUM" | "LARGE"; + export interface TripFilters { q?: string; from?: string; to?: string; category?: ActivityCategory; + vibe?: Vibe; + groupSize?: GroupSize; } export const tripRepo = { @@ -47,6 +51,18 @@ export const tripRepo = { andParts.push({ category: filters.category }); } + if (filters?.vibe) { + andParts.push({ vibe: filters.vibe }); + } + + if (filters?.groupSize === "SMALL") { + andParts.push({ maxParticipants: { lte: 10 } }); + } else if (filters?.groupSize === "MEDIUM") { + andParts.push({ maxParticipants: { gte: 11, lte: 20 } }); + } else if (filters?.groupSize === "LARGE") { + andParts.push({ maxParticipants: { gte: 21 } }); + } + if (!filters?.from && !filters?.to) { andParts.push({ date: { gte: todayStart } }); } else { @@ -104,6 +120,22 @@ export const tripRepo = { }, }, images: { orderBy: { order: "asc" }, take: 1 }, + participants: { + where: { status: "CONFIRMED" }, + take: 10, + orderBy: { createdAt: "asc" }, + select: { + id: true, + user: { + select: { + id: true, + name: true, + image: true, + profile: { select: { interests: true } }, + }, + }, + }, + }, _count: { select: { participants: { where: { status: { not: "CANCELLED" } } }, @@ -129,7 +161,16 @@ export const tripRepo = { }, images: { orderBy: { order: "asc" } }, participants: { - include: { user: { select: { id: true, name: true, image: true } } }, + include: { + user: { + select: { + id: true, + name: true, + image: true, + profile: { select: { city: true, interests: true } }, + }, + }, + }, }, reviews: { orderBy: { createdAt: "desc" }, diff --git a/server/repositories/user.repo.ts b/server/repositories/user.repo.ts index 5fefbb0..986007c 100644 --- a/server/repositories/user.repo.ts +++ b/server/repositories/user.repo.ts @@ -1,5 +1,12 @@ import { prisma } from "@/lib/prisma"; import { Prisma } from "@/app/generated/prisma/client"; +import type { Vibe } from "@/app/generated/prisma/enums"; + +export interface PeopleFilters { + city?: string; + interest?: string; + vibe?: Vibe; +} export const userRepo = { async findByEmail(email: string) { @@ -42,6 +49,7 @@ export const userRepo = { city: true, interests: true, instagram: true, + vibe: true, }, }, organizerVerification: { select: { status: true } }, @@ -49,6 +57,56 @@ export const userRepo = { }); }, + /** + * Discovery /people: ambil user yang punya profil sosial terisi (minimal salah + * satu dari bio/city/interests/vibe). Filter optional by city/interest/vibe. + * Tidak ekspos email/KYC. + */ + async findPeople(filters?: PeopleFilters, limit = 60) { + const profileWhere: Prisma.UserProfileWhereInput = { + OR: [ + { bio: { not: null } }, + { city: { not: null } }, + { vibe: { not: null } }, + { interests: { isEmpty: false } }, + ], + }; + + if (filters?.city) { + profileWhere.city = { + contains: filters.city, + mode: "insensitive", + }; + } + if (filters?.interest) { + profileWhere.interests = { has: filters.interest.toLowerCase() }; + } + if (filters?.vibe) { + profileWhere.vibe = filters.vibe; + } + + return prisma.user.findMany({ + where: { profile: { is: profileWhere } }, + select: { + id: true, + name: true, + image: true, + createdAt: true, + profile: { + select: { + bio: true, + city: true, + interests: true, + vibe: true, + }, + }, + organizerVerification: { select: { status: true } }, + }, + orderBy: { createdAt: "desc" }, + take: limit, + }); + }, + async create(data: Prisma.UserCreateInput) { return prisma.user.create({ data }); }, diff --git a/server/services/profile.service.ts b/server/services/profile.service.ts index 24fa852..a5f2438 100644 --- a/server/services/profile.service.ts +++ b/server/services/profile.service.ts @@ -1,4 +1,4 @@ -import { userRepo } from "@/server/repositories/user.repo"; +import { userRepo, type PeopleFilters } from "@/server/repositories/user.repo"; import { tripRepo } from "@/server/repositories/trip.repo"; import { participantRepo } from "@/server/repositories/participant.repo"; import { organizerRepo } from "@/server/repositories/organizer.repo"; @@ -11,12 +11,17 @@ export const profileService = { return profileRepo.findByUserId(userId); }, + async findPeople(filters?: PeopleFilters) { + return userRepo.findPeople(filters); + }, + async updateProfile(userId: string, input: UpdateProfileInput) { return profileRepo.upsertByUserId(userId, { bio: input.bio, city: input.city, instagram: input.instagram, interests: input.interests, + vibe: input.vibe, }); }, diff --git a/server/services/trip.service.ts b/server/services/trip.service.ts index f40824d..5e49de2 100644 --- a/server/services/trip.service.ts +++ b/server/services/trip.service.ts @@ -1,5 +1,5 @@ import { Prisma } from "@/app/generated/prisma/client"; -import type { ActivityCategory } from "@/app/generated/prisma/enums"; +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"; @@ -31,6 +31,7 @@ interface CreateTripInput { endDate?: Date; maxParticipants: number; price: number; + vibe?: Vibe; organizerId: string; imageUrls?: string[]; } @@ -82,6 +83,7 @@ export const tripService = { endDate: input.endDate, maxParticipants: input.maxParticipants, price: input.price, + vibe: input.vibe, organizer: { connect: { id: input.organizerId } }, images, } satisfies Prisma.TripCreateInput;