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_AgAgnQEBAAAAAaMBAQAAAAGwAQEAAAABsQEBAAAAAbIBAgAAAAEBFwAAtwEAIAWdAQEAAAABowEBAAAAAbABAQAAAAGxAQEAAAABsgECAAAAAQEXAAC5AQAwARcAALkBADAGBgAAvgIAIJ0BAQCvAgAhowEBAK8CACGwAQEArwIAIbEBAQC8AgAhsgECAL0CACECAAAAEQAgFwAAvAEAIAWdAQEArwIAIaMBAQCvAgAhsAEBAK8CACGxAQEAvAIAIbIBAgC9AgAhAgAAAA8AIBcAAL4BACACAAAADwAgFwAAvgEAIAMAAAARACAeAAC3AQAgHwAAvAEAIAEAAAARACABAAAADwAgBgoAALcCACAkAAC6AgAgJQAAuQIAIEYAALgCACBHAAC7AgAgsQEAAKsCACAImgEAAO0BADCbAQAAxQEAEJwBAADtAQAwnQEBAN8BACGjAQEA3wEAIbABAQDfAQAhsQEBAO4BACGyAQIA7wEAIQMAAAAPACABAADEAQAwIwAAxQEAIAMAAAAPACABAAAQADACAAARACABAAAADQAgAQAAAA0AIAMAAAALACABAAAMADACAAANACADAAAACwAgAQAADAAwAgAADQAgAwAAAAsAIAEAAAwAMAIAAA0AIAkDAAC2AgAgBgAAtQIAIJ0BAQAAAAGfAQAAAJ8BAqABQAAAAAGhAUAAAAABogFAAAAAAaMBAQAAAAGkAQEAAAABARcAAM0BACAHnQEBAAAAAZ8BAAAAnwECoAFAAAAAAaEBQAAAAAGiAUAAAAABowEBAAAAAaQBAQAAAAEBFwAAzwEAMAEXAADPAQAwCQMAALQCACAGAACzAgAgnQEBAK8CACGfAQAAsAKfASKgAUAAsQIAIaEBQACyAgAhogFAALICACGjAQEArwIAIaQBAQCvAgAhAgAAAA0AIBcAANIBACAHnQEBAK8CACGfAQAAsAKfASKgAUAAsQIAIaEBQACyAgAhogFAALICACGjAQEArwIAIaQBAQCvAgAhAgAAAAsAIBcAANQBACACAAAACwAgFwAA1AEAIAMAAAANACAeAADNAQAgHwAA0gEAIAEAAAANACABAAAACwAgBQoAAKwCACAkAACuAgAgJQAArQIAIKEBAACrAgAgogEAAKsCACAKmgEAAN4BADCbAQAA2wEAEJwBAADeAQAwnQEBAN8BACGfAQAA4AGfASKgAUAA4QEAIaEBQADiAQAhogFAAOIBACGjAQEA3wEAIaQBAQDfAQAhAwAAAAsAIAEAANoBADAjAADbAQAgAwAAAAsAIAEAAAwAMAIAAA0AIAqaAQAA3gEAMJsBAADbAQAQnAEAAN4BADCdAQEA3wEAIZ8BAADgAZ8BIqABQADhAQAhoQFAAOIBACGiAUAA4gEAIaMBAQDfAQAhpAEBAN8BACEOCgAA5wEAICQAAOwBACAlAADsAQAgpQEBAAAAAaYBAQAAAASnAQEAAAAEqAEBAAAAAakBAQAAAAGqAQEAAAABqwEBAAAAAawBAQDrAQAhrQEBAAAAAa4BAQAAAAGvAQEAAAABBwoAAOcBACAkAADqAQAgJQAA6gEAIKUBAAAAnwECpgEAAACfAQinAQAAAJ8BCKwBAADpAZ8BIgsKAADnAQAgJAAA6AEAICUAAOgBACClAUAAAAABpgFAAAAABKcBQAAAAASoAUAAAAABqQFAAAAAAaoBQAAAAAGrAUAAAAABrAFAAOYBACELCgAA5AEAICQAAOUBACAlAADlAQAgpQFAAAAAAaYBQAAAAAWnAUAAAAAFqAFAAAAAAakBQAAAAAGqAUAAAAABqwFAAAAAAawBQADjAQAhCwoAAOQBACAkAADlAQAgJQAA5QEAIKUBQAAAAAGmAUAAAAAFpwFAAAAABagBQAAAAAGpAUAAAAABqgFAAAAAAasBQAAAAAGsAUAA4wEAIQilAQIAAAABpgECAAAABacBAgAAAAWoAQIAAAABqQECAAAAAaoBAgAAAAGrAQIAAAABrAECAOQBACEIpQFAAAAAAaYBQAAAAAWnAUAAAAAFqAFAAAAAAakBQAAAAAGqAUAAAAABqwFAAAAAAawBQADlAQAhCwoAAOcBACAkAADoAQAgJQAA6AEAIKUBQAAAAAGmAUAAAAAEpwFAAAAABKgBQAAAAAGpAUAAAAABqgFAAAAAAasBQAAAAAGsAUAA5gEAIQilAQIAAAABpgECAAAABKcBAgAAAASoAQIAAAABqQECAAAAAaoBAgAAAAGrAQIAAAABrAECAOcBACEIpQFAAAAAAaYBQAAAAASnAUAAAAAEqAFAAAAAAakBQAAAAAGqAUAAAAABqwFAAAAAAawBQADoAQAhBwoAAOcBACAkAADqAQAgJQAA6gEAIKUBAAAAnwECpgEAAACfAQinAQAAAJ8BCKwBAADpAZ8BIgSlAQAAAJ8BAqYBAAAAnwEIpwEAAACfAQisAQAA6gGfASIOCgAA5wEAICQAAOwBACAlAADsAQAgpQEBAAAAAaYBAQAAAASnAQEAAAAEqAEBAAAAAakBAQAAAAGqAQEAAAABqwEBAAAAAawBAQDrAQAhrQEBAAAAAa4BAQAAAAGvAQEAAAABC6UBAQAAAAGmAQEAAAAEpwEBAAAABKgBAQAAAAGpAQEAAAABqgEBAAAAAasBAQAAAAGsAQEA7AEAIa0BAQAAAAGuAQEAAAABrwEBAAAAAQiaAQAA7QEAMJsBAADFAQAQnAEAAO0BADCdAQEA3wEAIaMBAQDfAQAhsAEBAN8BACGxAQEA7gEAIbIBAgDvAQAhDgoAAOQBACAkAADzAQAgJQAA8wEAIKUBAQAAAAGmAQEAAAAFpwEBAAAABagBAQAAAAGpAQEAAAABqgEBAAAAAasBAQAAAAGsAQEA8gEAIa0BAQAAAAGuAQEAAAABrwEBAAAAAQ0KAADnAQAgJAAA5wEAICUAAOcBACBGAADxAQAgRwAA5wEAIKUBAgAAAAGmAQIAAAAEpwECAAAABKgBAgAAAAGpAQIAAAABqgECAAAAAasBAgAAAAGsAQIA8AEAIQ0KAADnAQAgJAAA5wEAICUAAOcBACBGAADxAQAgRwAA5wEAIKUBAgAAAAGmAQIAAAAEpwECAAAABKgBAgAAAAGpAQIAAAABqgECAAAAAasBAgAAAAGsAQIA8AEAIQilAQgAAAABpgEIAAAABKcBCAAAAASoAQgAAAABqQEIAAAAAaoBCAAAAAGrAQgAAAABrAEIAPEBACEOCgAA5AEAICQAAPMBACAlAADzAQAgpQEBAAAAAaYBAQAAAAWnAQEAAAAFqAEBAAAAAakBAQAAAAGqAQEAAAABqwEBAAAAAawBAQDyAQAhrQEBAAAAAa4BAQAAAAGvAQEAAAABC6UBAQAAAAGmAQEAAAAFpwEBAAAABagBAQAAAAGpAQEAAAABqgEBAAAAAasBAQAAAAGsAQEA8wEAIa0BAQAAAAGuAQEAAAABrwEBAAAAAQqaAQAA9AEAMJsBAACvAQAQnAEAAPQBADCdAQEA3wEAIaABQADhAQAhowEBAN8BACGkAQEA3wEAIbMBAgDvAQAhtAEBAO4BACG1AUAA4QEAIRWaAQAA9QEAMJsBAACZAQAQnAEAAPUBADCdAQEA3wEAIZ8BAAD3AcUBIqABQADhAQAhtQFAAOEBACG2AQEA3wEAIbcBAQDuAQAhuQEAAPYBuQEiugEBAN8BACG7AQEA3wEAIbwBAQDuAQAhvQEBAO4BACG-AQEA7gEAIb8BAQDuAQAhwAFAAOEBACHBAUAA4gEAIcIBAgDvAQAhwwECAO8BACHFAQEA3wEAIQcKAADnAQAgJAAA-wEAICUAAPsBACClAQAAALkBAqYBAAAAuQEIpwEAAAC5AQisAQAA-gG5ASIHCgAA5wEAICQAAPkBACAlAAD5AQAgpQEAAADFAQKmAQAAAMUBCKcBAAAAxQEIrAEAAPgBxQEiBwoAAOcBACAkAAD5AQAgJQAA-QEAIKUBAAAAxQECpgEAAADFAQinAQAAAMUBCKwBAAD4AcUBIgSlAQAAAMUBAqYBAAAAxQEIpwEAAADFAQisAQAA-QHFASIHCgAA5wEAICQAAPsBACAlAAD7AQAgpQEAAAC5AQKmAQAAALkBCKcBAAAAuQEIrAEAAPoBuQEiBKUBAAAAuQECpgEAAAC5AQinAQAAALkBCKwBAAD7AbkBIhaaAQAA_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}
-
-
- ))}
-
+
)}
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 (
+
+ );
+}
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) {
+
+
+ Vibe jalanmu{" "}
+ (opsional)
+
+
+ Bantu calon teman trip nyambung dengan ritme kamu.
+
+
+ setVibe(null)}
+ aria-pressed={vibe === null}
+ className={`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${
+ vibe === null
+ ? "border-neutral-700 bg-neutral-800 text-white"
+ : "border-neutral-200 bg-white text-neutral-600 hover:bg-neutral-50"
+ }`}
+ >
+ Belum diisi
+
+ {VIBES.map((v) => {
+ const m = vibeMeta(v);
+ const active = vibe === v;
+ return (
+ setVibe(v)}
+ aria-pressed={active}
+ title={m.description}
+ className={`inline-flex items-center gap-1.5 rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${
+ active
+ ? "border-primary-600 bg-primary-600 text-white"
+ : "border-neutral-200 bg-white text-neutral-600 hover:bg-neutral-50"
+ }`}
+ >
+ {m.icon}
+ {m.label}
+
+ );
+ })}
+
+ {vibe && (
+
+ {vibeMeta(vibe).description}
+
+ )}
+
+
+
+ {image ? (
+
+ ) : (
+
+ {name.charAt(0).toUpperCase()}
+
+ )}
+
+
+ {name}
+
+ {profile?.city && (
+
+ 📍 {profile.city}
+
+ )}
+
+ {isVerifiedOrganizer && (
+
+ ✅ Organizer
+
+ )}
+ {profile?.vibe && (
+
+ {vibeMeta(profile.vibe).icon}
+ {vibeMeta(profile.vibe).label}
+
+ )}
+
+
+
+
+ {profile?.bio && (
+
+ {profile.bio}
+
+ )}
+
+ {interests.length > 0 && (
+
+ {interests.slice(0, 5).map((tag) => (
+
+ #{tag}
+
+ ))}
+ {interests.length > 5 && (
+
+ +{interests.length - 5}
+
+ )}
+
+ )}
+
+ );
+}
diff --git a/features/profile/schemas.ts b/features/profile/schemas.ts
index 415af7c..4b2c7c6 100644
--- a/features/profile/schemas.ts
+++ b/features/profile/schemas.ts
@@ -1,5 +1,6 @@
import { z } from "zod/v4";
import { LIMITS } from "@/lib/limits";
+import { VIBES } from "@/lib/vibe";
const optionalTrimmed = (max: number, label: string) =>
z.preprocess(
@@ -52,6 +53,14 @@ export const updateProfileSchema = z.object({
`Maksimal ${LIMITS.MAX_PROFILE_INTERESTS_COUNT} minat`
)
.default([]),
+ vibe: z.preprocess(
+ (val) => {
+ if (val == null) return undefined;
+ const s = String(val).trim();
+ return s === "" ? undefined : s;
+ },
+ z.enum([...VIBES]).optional()
+ ),
});
export type UpdateProfileInput = z.infer;
diff --git a/features/trip/actions.ts b/features/trip/actions.ts
index 73e376e..158be08 100644
--- a/features/trip/actions.ts
+++ b/features/trip/actions.ts
@@ -28,6 +28,7 @@ export async function createTripAction(formData: FormData) {
endDate: (formData.get("endDate") as string) || undefined,
maxParticipants: formData.get("maxParticipants") as string,
price: formData.get("price") as string,
+ vibe: formData.get("vibe"),
};
const result = createTripSchema.safeParse(raw);
diff --git a/features/trip/components/create-trip-form.tsx b/features/trip/components/create-trip-form.tsx
index 3a6fd4e..33816f2 100644
--- a/features/trip/components/create-trip-form.tsx
+++ b/features/trip/components/create-trip-form.tsx
@@ -11,7 +11,8 @@ import {
ACTIVITY_CATEGORIES,
categoryMeta,
} from "@/lib/activity-category";
-import type { ActivityCategory } from "@/app/generated/prisma/enums";
+import { VIBES, vibeMeta } from "@/lib/vibe";
+import type { ActivityCategory, Vibe } from "@/app/generated/prisma/enums";
function formatRupiahInput(value: string): string {
const num = value.replace(/\D/g, "");
@@ -32,6 +33,7 @@ export function CreateTripForm({ isVerifiedOrganizer }: CreateTripFormProps) {
const [loading, setLoading] = useState(false);
const [category, setCategory] = useState("HIKING");
+ const [vibe, setVibe] = useState(null);
const [startDate, setStartDate] = useState(null);
const [endDate, setEndDate] = useState(null);
const [priceDisplay, setPriceDisplay] = useState("");
@@ -62,6 +64,7 @@ export function CreateTripForm({ isVerifiedOrganizer }: CreateTripFormProps) {
}
}
formData.set("price", parseRupiahInput(priceDisplay));
+ if (vibe) formData.set("vibe", vibe);
const result = await createTripAction(formData);
@@ -124,6 +127,57 @@ export function CreateTripForm({ isVerifiedOrganizer }: CreateTripFormProps) {
+ {/* Vibe Chips */}
+
+
+ Vibe Trip{" "}
+ (opsional)
+
+
+ Bantu calon peserta menilai apakah ritmenya cocok dengan mereka.
+
+
+ setVibe(null)}
+ aria-pressed={vibe === null}
+ className={`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${
+ vibe === null
+ ? "border-neutral-700 bg-neutral-800 text-white"
+ : "border-secondary-200 bg-white text-secondary-800 hover:bg-secondary-100"
+ }`}
+ >
+ Belum diisi
+
+ {VIBES.map((v) => {
+ const m = vibeMeta(v);
+ const active = v === vibe;
+ return (
+ setVibe(v)}
+ aria-pressed={active}
+ title={m.description}
+ className={`inline-flex items-center gap-1.5 rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${
+ active
+ ? "border-secondary-600 bg-secondary-600 text-white"
+ : "border-secondary-200 bg-white text-secondary-800 hover:bg-secondary-100"
+ }`}
+ >
+ {m.icon}
+ {m.label}
+
+ );
+ })}
+
+ {vibe && (
+
+ {vibeMeta(vibe).description}
+
+ )}
+
+
Judul Trip
diff --git a/features/trip/components/trip-card.tsx b/features/trip/components/trip-card.tsx
index 50c9e9e..c898316 100644
--- a/features/trip/components/trip-card.tsx
+++ b/features/trip/components/trip-card.tsx
@@ -3,12 +3,21 @@ import Link from "next/link";
import { formatRupiah } from "@/lib/utils";
import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates";
import { categoryMeta } from "@/lib/activity-category";
-import type { ActivityCategory } from "@/app/generated/prisma/enums";
+import { vibeMeta } from "@/lib/vibe";
+import type { ActivityCategory, Vibe } from "@/app/generated/prisma/enums";
+
+interface TripCardParticipant {
+ id: string;
+ name: string;
+ image: string | null;
+ interests: string[];
+}
interface TripCardProps {
id: string;
title: string;
category: ActivityCategory;
+ vibe?: Vibe | null;
destination: string;
location: string;
date: Date | string;
@@ -21,12 +30,17 @@ interface TripCardProps {
coverImage?: string | null;
priority?: boolean;
isVerifiedOrganizer?: boolean;
+ /** Daftar peserta CONFIRMED (subset, untuk preview avatar). Optional. */
+ participants?: TripCardParticipant[];
+ /** Interests user yang sedang melihat — untuk hitung overlap. Optional. */
+ viewerInterests?: string[];
}
export function TripCard({
id,
title,
category,
+ vibe,
destination,
location,
date,
@@ -39,10 +53,25 @@ export function TripCard({
coverImage,
priority,
isVerifiedOrganizer,
+ participants,
+ viewerInterests,
}: TripCardProps) {
const spotsLeft = maxParticipants - participantCount;
const isSmallGroup = maxParticipants <= 10;
const meta = categoryMeta(category);
+ const vMeta = vibe ? vibeMeta(vibe) : null;
+
+ const previewParticipants = participants?.slice(0, 3) ?? [];
+ const moreCount =
+ participants && participants.length > 3 ? participants.length - 3 : 0;
+
+ let overlapCount = 0;
+ if (viewerInterests && viewerInterests.length > 0 && participants) {
+ const viewerSet = new Set(viewerInterests.map((i) => i.toLowerCase()));
+ overlapCount = participants.filter((p) =>
+ p.interests.some((tag) => viewerSet.has(tag.toLowerCase()))
+ ).length;
+ }
return (
@@ -63,13 +92,24 @@ export function TripCard({
{meta.icon}
)}
-
- {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 */}
+
+
+
+ Vibe
+
+
+ handleSelectVibe(null)}
+ aria-pressed={vibe === null}
+ className={`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${
+ vibe === null
+ ? "border-secondary-600 bg-secondary-600 text-white"
+ : "border-neutral-200 bg-white text-neutral-600 hover:bg-neutral-50"
+ }`}
+ >
+ Semua
+
+ {VIBES.map((v) => {
+ const m = vibeMeta(v);
+ const active = vibe === v;
+ return (
+ handleSelectVibe(v)}
+ aria-pressed={active}
+ title={m.description}
+ className={`inline-flex items-center gap-1 rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${
+ active
+ ? "border-secondary-600 bg-secondary-600 text-white"
+ : "border-neutral-200 bg-white text-neutral-600 hover:bg-neutral-50"
+ }`}
+ >
+ {m.icon}
+ {m.label}
+
+ );
+ })}
+
+
+
+
+
+ Ukuran grup
+
+
+ handleSelectGroupSize(null)}
+ aria-pressed={groupSize === null}
+ className={`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${
+ groupSize === null
+ ? "border-primary-600 bg-primary-600 text-white"
+ : "border-neutral-200 bg-white text-neutral-600 hover:bg-neutral-50"
+ }`}
+ >
+ Semua
+
+ {GROUP_SIZES.map((g) => {
+ const active = groupSize === g.value;
+ return (
+ handleSelectGroupSize(g.value)}
+ aria-pressed={active}
+ title={g.hint}
+ className={`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${
+ active
+ ? "border-primary-600 bg-primary-600 text-white"
+ : "border-neutral-200 bg-white text-neutral-600 hover:bg-neutral-50"
+ }`}
+ >
+ {g.label}
+
+ );
+ })}
+
+
+
+
{/* 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;