add payment, trust badge, handle race condition, fix booking schema

This commit is contained in:
arifal
2026-04-20 23:57:31 +07:00
parent ba5f64ae0e
commit fcdca34460
33 changed files with 1781 additions and 138 deletions
+56 -9
View File
@@ -73,7 +73,7 @@ export default function CreateTripPage() {
setLoading(true);
const formData = new FormData(e.currentTarget);
// Hari kalender lokal → YYYY-MM-DD (bukan toISOString, supaya tidak geser ke UTC)
// Tanggal dari picker → string tanggal untuk server action
formData.set("date", formatLocalCalendarYmd(startDate));
if (endDate) {
const startYmd = formatLocalCalendarYmd(startDate);
@@ -215,10 +215,63 @@ export default function CreateTripPage() {
name="description"
rows={4}
className="w-full rounded-xl border border-neutral-200 bg-neutral-50 px-4 py-2.5 text-sm text-neutral-800 placeholder:text-neutral-400 focus:bg-white"
placeholder="Detail trip, itinerary, meeting point, fasilitas..."
placeholder="Ringkasan trip, vibe, level kesulitan..."
/>
</div>
<div>
<label htmlFor="meetingPoint" className="mb-1.5 block text-sm font-semibold text-neutral-700">
Meeting point
</label>
<input
id="meetingPoint"
name="meetingPoint"
type="text"
className="w-full rounded-xl border border-neutral-200 bg-neutral-50 px-4 py-2.5 text-sm text-neutral-800 placeholder:text-neutral-400 focus:bg-white"
placeholder="contoh: Alfamart Cicaheum, 05:00 WIB"
/>
</div>
<div>
<label htmlFor="itinerary" className="mb-1.5 block text-sm font-semibold text-neutral-700">
Itinerary
</label>
<textarea
id="itinerary"
name="itinerary"
rows={5}
className="w-full rounded-xl border border-neutral-200 bg-neutral-50 px-4 py-2.5 text-sm text-neutral-800 placeholder:text-neutral-400 focus:bg-white"
placeholder={"Hari 1: …\nHari 2: …"}
/>
</div>
<div className="grid gap-4 sm:grid-cols-2">
<div>
<label htmlFor="whatsIncluded" className="mb-1.5 block text-sm font-semibold text-neutral-700">
Termasuk
</label>
<textarea
id="whatsIncluded"
name="whatsIncluded"
rows={4}
className="w-full rounded-xl border border-neutral-200 bg-neutral-50 px-4 py-2.5 text-sm text-neutral-800 placeholder:text-neutral-400 focus:bg-white"
placeholder="Transport, konsumsi, tenda, …"
/>
</div>
<div>
<label htmlFor="whatsExcluded" className="mb-1.5 block text-sm font-semibold text-neutral-700">
Tidak termasuk
</label>
<textarea
id="whatsExcluded"
name="whatsExcluded"
rows={4}
className="w-full rounded-xl border border-neutral-200 bg-neutral-50 px-4 py-2.5 text-sm text-neutral-800 placeholder:text-neutral-400 focus:bg-white"
placeholder="Tiket masuk TN, sleeping bag, …"
/>
</div>
</div>
<ImageUrlInput />
{/* Date Range & Participants & Price */}
@@ -226,14 +279,8 @@ export default function CreateTripPage() {
{/* Date Range Picker */}
<div>
<label className="mb-1.5 block text-sm font-semibold text-neutral-700">
Tanggal Berangkat Pulang
Tanggal berangkat pulang
</label>
<p className="mb-1.5 text-[11px] leading-snug text-neutral-500 sm:text-xs">
Pilih satu tanggal untuk trip <span className="font-medium">satu hari</span>
. Pilih rentang untuk trip <span className="font-medium">lebih dari satu hari</span>
. Tanggal disimpan sebagai hari kalender yang kamu klik; filter Open Trip memakai{" "}
<span className="font-medium">UTC</span> yang sama.
</p>
<div className="relative">
<span className="absolute left-3 top-1/2 z-10 -translate-y-1/2 text-neutral-400">
<svg
+26
View File
@@ -44,6 +44,11 @@ export type StringNullableFilter<$PrismaModel = never> = {
not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null
}
export type BoolFilter<$PrismaModel = never> = {
equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>
not?: Prisma.NestedBoolFilter<$PrismaModel> | boolean
}
export type DateTimeFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
@@ -96,6 +101,14 @@ export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
_max?: Prisma.NestedStringNullableFilter<$PrismaModel>
}
export type BoolWithAggregatesFilter<$PrismaModel = never> = {
equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>
not?: Prisma.NestedBoolWithAggregatesFilter<$PrismaModel> | boolean
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedBoolFilter<$PrismaModel>
_max?: Prisma.NestedBoolFilter<$PrismaModel>
}
export type DateTimeWithAggregatesFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
@@ -224,6 +237,11 @@ export type NestedStringNullableFilter<$PrismaModel = never> = {
not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null
}
export type NestedBoolFilter<$PrismaModel = never> = {
equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>
not?: Prisma.NestedBoolFilter<$PrismaModel> | boolean
}
export type NestedDateTimeFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
@@ -291,6 +309,14 @@ export type NestedIntNullableFilter<$PrismaModel = never> = {
not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null
}
export type NestedBoolWithAggregatesFilter<$PrismaModel = never> = {
equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>
not?: Prisma.NestedBoolWithAggregatesFilter<$PrismaModel> | boolean
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedBoolFilter<$PrismaModel>
_max?: Prisma.NestedBoolFilter<$PrismaModel>
}
export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
File diff suppressed because one or more lines are too long
@@ -823,6 +823,7 @@ export const UserScalarFieldEnum = {
email: 'email',
password: 'password',
image: 'image',
isVerified: 'isVerified',
createdAt: 'createdAt',
updatedAt: 'updatedAt'
} as const
@@ -836,6 +837,10 @@ export const TripScalarFieldEnum = {
description: 'description',
mountain: 'mountain',
location: 'location',
meetingPoint: 'meetingPoint',
itinerary: 'itinerary',
whatsIncluded: 'whatsIncluded',
whatsExcluded: 'whatsExcluded',
date: 'date',
endDate: 'endDate',
maxParticipants: 'maxParticipants',
@@ -877,6 +882,8 @@ export const TripParticipantScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
markedPaidAt: 'markedPaidAt',
paymentConfirmedAt: 'paymentConfirmedAt',
tripId: 'tripId',
userId: 'userId'
} as const
@@ -928,6 +935,13 @@ export type ListStringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaMod
/**
* Reference to a field of type 'Boolean'
*/
export type BooleanFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Boolean'>
/**
* Reference to a field of type 'DateTime'
*/
@@ -80,6 +80,7 @@ export const UserScalarFieldEnum = {
email: 'email',
password: 'password',
image: 'image',
isVerified: 'isVerified',
createdAt: 'createdAt',
updatedAt: 'updatedAt'
} as const
@@ -93,6 +94,10 @@ export const TripScalarFieldEnum = {
description: 'description',
mountain: 'mountain',
location: 'location',
meetingPoint: 'meetingPoint',
itinerary: 'itinerary',
whatsIncluded: 'whatsIncluded',
whatsExcluded: 'whatsExcluded',
date: 'date',
endDate: 'endDate',
maxParticipants: 'maxParticipants',
@@ -134,6 +139,8 @@ export const TripParticipantScalarFieldEnum = {
id: 'id',
status: 'status',
createdAt: 'createdAt',
markedPaidAt: 'markedPaidAt',
paymentConfirmedAt: 'paymentConfirmedAt',
tripId: 'tripId',
userId: 'userId'
} as const
+201 -1
View File
@@ -42,6 +42,10 @@ export type TripMinAggregateOutputType = {
description: string | null
mountain: string | null
location: string | null
meetingPoint: string | null
itinerary: string | null
whatsIncluded: string | null
whatsExcluded: string | null
date: Date | null
endDate: Date | null
maxParticipants: number | null
@@ -58,6 +62,10 @@ export type TripMaxAggregateOutputType = {
description: string | null
mountain: string | null
location: string | null
meetingPoint: string | null
itinerary: string | null
whatsIncluded: string | null
whatsExcluded: string | null
date: Date | null
endDate: Date | null
maxParticipants: number | null
@@ -74,6 +82,10 @@ export type TripCountAggregateOutputType = {
description: number
mountain: number
location: number
meetingPoint: number
itinerary: number
whatsIncluded: number
whatsExcluded: number
date: number
endDate: number
maxParticipants: number
@@ -102,6 +114,10 @@ export type TripMinAggregateInputType = {
description?: true
mountain?: true
location?: true
meetingPoint?: true
itinerary?: true
whatsIncluded?: true
whatsExcluded?: true
date?: true
endDate?: true
maxParticipants?: true
@@ -118,6 +134,10 @@ export type TripMaxAggregateInputType = {
description?: true
mountain?: true
location?: true
meetingPoint?: true
itinerary?: true
whatsIncluded?: true
whatsExcluded?: true
date?: true
endDate?: true
maxParticipants?: true
@@ -134,6 +154,10 @@ export type TripCountAggregateInputType = {
description?: true
mountain?: true
location?: true
meetingPoint?: true
itinerary?: true
whatsIncluded?: true
whatsExcluded?: true
date?: true
endDate?: true
maxParticipants?: true
@@ -237,6 +261,10 @@ export type TripGroupByOutputType = {
description: string | null
mountain: string
location: string
meetingPoint: string | null
itinerary: string | null
whatsIncluded: string | null
whatsExcluded: string | null
date: Date
endDate: Date | null
maxParticipants: number
@@ -276,6 +304,10 @@ export type TripWhereInput = {
description?: Prisma.StringNullableFilter<"Trip"> | string | null
mountain?: Prisma.StringFilter<"Trip"> | string
location?: Prisma.StringFilter<"Trip"> | string
meetingPoint?: Prisma.StringNullableFilter<"Trip"> | string | null
itinerary?: Prisma.StringNullableFilter<"Trip"> | string | null
whatsIncluded?: Prisma.StringNullableFilter<"Trip"> | string | null
whatsExcluded?: Prisma.StringNullableFilter<"Trip"> | string | null
date?: Prisma.DateTimeFilter<"Trip"> | Date | string
endDate?: Prisma.DateTimeNullableFilter<"Trip"> | Date | string | null
maxParticipants?: Prisma.IntFilter<"Trip"> | number
@@ -296,6 +328,10 @@ export type TripOrderByWithRelationInput = {
description?: Prisma.SortOrderInput | Prisma.SortOrder
mountain?: Prisma.SortOrder
location?: Prisma.SortOrder
meetingPoint?: Prisma.SortOrderInput | Prisma.SortOrder
itinerary?: Prisma.SortOrderInput | Prisma.SortOrder
whatsIncluded?: Prisma.SortOrderInput | Prisma.SortOrder
whatsExcluded?: Prisma.SortOrderInput | Prisma.SortOrder
date?: Prisma.SortOrder
endDate?: Prisma.SortOrderInput | Prisma.SortOrder
maxParticipants?: Prisma.SortOrder
@@ -319,6 +355,10 @@ export type TripWhereUniqueInput = Prisma.AtLeast<{
description?: Prisma.StringNullableFilter<"Trip"> | string | null
mountain?: Prisma.StringFilter<"Trip"> | string
location?: Prisma.StringFilter<"Trip"> | string
meetingPoint?: Prisma.StringNullableFilter<"Trip"> | string | null
itinerary?: Prisma.StringNullableFilter<"Trip"> | string | null
whatsIncluded?: Prisma.StringNullableFilter<"Trip"> | string | null
whatsExcluded?: Prisma.StringNullableFilter<"Trip"> | string | null
date?: Prisma.DateTimeFilter<"Trip"> | Date | string
endDate?: Prisma.DateTimeNullableFilter<"Trip"> | Date | string | null
maxParticipants?: Prisma.IntFilter<"Trip"> | number
@@ -339,6 +379,10 @@ export type TripOrderByWithAggregationInput = {
description?: Prisma.SortOrderInput | Prisma.SortOrder
mountain?: Prisma.SortOrder
location?: Prisma.SortOrder
meetingPoint?: Prisma.SortOrderInput | Prisma.SortOrder
itinerary?: Prisma.SortOrderInput | Prisma.SortOrder
whatsIncluded?: Prisma.SortOrderInput | Prisma.SortOrder
whatsExcluded?: Prisma.SortOrderInput | Prisma.SortOrder
date?: Prisma.SortOrder
endDate?: Prisma.SortOrderInput | Prisma.SortOrder
maxParticipants?: Prisma.SortOrder
@@ -363,6 +407,10 @@ export type TripScalarWhereWithAggregatesInput = {
description?: Prisma.StringNullableWithAggregatesFilter<"Trip"> | string | null
mountain?: Prisma.StringWithAggregatesFilter<"Trip"> | string
location?: Prisma.StringWithAggregatesFilter<"Trip"> | string
meetingPoint?: Prisma.StringNullableWithAggregatesFilter<"Trip"> | string | null
itinerary?: Prisma.StringNullableWithAggregatesFilter<"Trip"> | string | null
whatsIncluded?: Prisma.StringNullableWithAggregatesFilter<"Trip"> | string | null
whatsExcluded?: Prisma.StringNullableWithAggregatesFilter<"Trip"> | string | null
date?: Prisma.DateTimeWithAggregatesFilter<"Trip"> | Date | string
endDate?: Prisma.DateTimeNullableWithAggregatesFilter<"Trip"> | Date | string | null
maxParticipants?: Prisma.IntWithAggregatesFilter<"Trip"> | number
@@ -379,6 +427,10 @@ export type TripCreateInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -398,6 +450,10 @@ export type TripUncheckedCreateInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -417,6 +473,10 @@ export type TripUpdateInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -436,6 +496,10 @@ export type TripUncheckedUpdateInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -455,6 +519,10 @@ export type TripCreateManyInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -471,6 +539,10 @@ export type TripUpdateManyMutationInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -486,6 +558,10 @@ export type TripUncheckedUpdateManyInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -512,6 +588,10 @@ export type TripCountOrderByAggregateInput = {
description?: Prisma.SortOrder
mountain?: Prisma.SortOrder
location?: Prisma.SortOrder
meetingPoint?: Prisma.SortOrder
itinerary?: Prisma.SortOrder
whatsIncluded?: Prisma.SortOrder
whatsExcluded?: Prisma.SortOrder
date?: Prisma.SortOrder
endDate?: Prisma.SortOrder
maxParticipants?: Prisma.SortOrder
@@ -533,6 +613,10 @@ export type TripMaxOrderByAggregateInput = {
description?: Prisma.SortOrder
mountain?: Prisma.SortOrder
location?: Prisma.SortOrder
meetingPoint?: Prisma.SortOrder
itinerary?: Prisma.SortOrder
whatsIncluded?: Prisma.SortOrder
whatsExcluded?: Prisma.SortOrder
date?: Prisma.SortOrder
endDate?: Prisma.SortOrder
maxParticipants?: Prisma.SortOrder
@@ -549,6 +633,10 @@ export type TripMinOrderByAggregateInput = {
description?: Prisma.SortOrder
mountain?: Prisma.SortOrder
location?: Prisma.SortOrder
meetingPoint?: Prisma.SortOrder
itinerary?: Prisma.SortOrder
whatsIncluded?: Prisma.SortOrder
whatsExcluded?: Prisma.SortOrder
date?: Prisma.SortOrder
endDate?: Prisma.SortOrder
maxParticipants?: Prisma.SortOrder
@@ -675,6 +763,10 @@ export type TripCreateWithoutOrganizerInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -693,6 +785,10 @@ export type TripUncheckedCreateWithoutOrganizerInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -740,6 +836,10 @@ export type TripScalarWhereInput = {
description?: Prisma.StringNullableFilter<"Trip"> | string | null
mountain?: Prisma.StringFilter<"Trip"> | string
location?: Prisma.StringFilter<"Trip"> | string
meetingPoint?: Prisma.StringNullableFilter<"Trip"> | string | null
itinerary?: Prisma.StringNullableFilter<"Trip"> | string | null
whatsIncluded?: Prisma.StringNullableFilter<"Trip"> | string | null
whatsExcluded?: Prisma.StringNullableFilter<"Trip"> | string | null
date?: Prisma.DateTimeFilter<"Trip"> | Date | string
endDate?: Prisma.DateTimeNullableFilter<"Trip"> | Date | string | null
maxParticipants?: Prisma.IntFilter<"Trip"> | number
@@ -756,6 +856,10 @@ export type TripCreateWithoutReviewsInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -774,6 +878,10 @@ export type TripUncheckedCreateWithoutReviewsInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -808,6 +916,10 @@ export type TripUpdateWithoutReviewsInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -826,6 +938,10 @@ export type TripUncheckedUpdateWithoutReviewsInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -844,6 +960,10 @@ export type TripCreateWithoutImagesInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -862,6 +982,10 @@ export type TripUncheckedCreateWithoutImagesInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -896,6 +1020,10 @@ export type TripUpdateWithoutImagesInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -914,6 +1042,10 @@ export type TripUncheckedUpdateWithoutImagesInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -932,6 +1064,10 @@ export type TripCreateWithoutParticipantsInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -950,6 +1086,10 @@ export type TripUncheckedCreateWithoutParticipantsInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -984,6 +1124,10 @@ export type TripUpdateWithoutParticipantsInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -1002,6 +1146,10 @@ export type TripUncheckedUpdateWithoutParticipantsInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -1020,6 +1168,10 @@ export type TripCreateManyOrganizerInput = {
description?: string | null
mountain: string
location: string
meetingPoint?: string | null
itinerary?: string | null
whatsIncluded?: string | null
whatsExcluded?: string | null
date: Date | string
endDate?: Date | string | null
maxParticipants: number
@@ -1035,6 +1187,10 @@ export type TripUpdateWithoutOrganizerInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -1053,6 +1209,10 @@ export type TripUncheckedUpdateWithoutOrganizerInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -1071,6 +1231,10 @@ export type TripUncheckedUpdateManyWithoutOrganizerInput = {
description?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
mountain?: Prisma.StringFieldUpdateOperationsInput | string
location?: Prisma.StringFieldUpdateOperationsInput | string
meetingPoint?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
itinerary?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsIncluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
whatsExcluded?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
date?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
endDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
maxParticipants?: Prisma.IntFieldUpdateOperationsInput | number
@@ -1135,6 +1299,10 @@ export type TripSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = r
description?: boolean
mountain?: boolean
location?: boolean
meetingPoint?: boolean
itinerary?: boolean
whatsIncluded?: boolean
whatsExcluded?: boolean
date?: boolean
endDate?: boolean
maxParticipants?: boolean
@@ -1156,6 +1324,10 @@ export type TripSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensio
description?: boolean
mountain?: boolean
location?: boolean
meetingPoint?: boolean
itinerary?: boolean
whatsIncluded?: boolean
whatsExcluded?: boolean
date?: boolean
endDate?: boolean
maxParticipants?: boolean
@@ -1173,6 +1345,10 @@ export type TripSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensio
description?: boolean
mountain?: boolean
location?: boolean
meetingPoint?: boolean
itinerary?: boolean
whatsIncluded?: boolean
whatsExcluded?: boolean
date?: boolean
endDate?: boolean
maxParticipants?: boolean
@@ -1190,6 +1366,10 @@ export type TripSelectScalar = {
description?: boolean
mountain?: boolean
location?: boolean
meetingPoint?: boolean
itinerary?: boolean
whatsIncluded?: boolean
whatsExcluded?: boolean
date?: boolean
endDate?: boolean
maxParticipants?: boolean
@@ -1200,7 +1380,7 @@ export type TripSelectScalar = {
organizerId?: boolean
}
export type TripOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "title" | "description" | "mountain" | "location" | "date" | "endDate" | "maxParticipants" | "price" | "status" | "createdAt" | "updatedAt" | "organizerId", ExtArgs["result"]["trip"]>
export type TripOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "title" | "description" | "mountain" | "location" | "meetingPoint" | "itinerary" | "whatsIncluded" | "whatsExcluded" | "date" | "endDate" | "maxParticipants" | "price" | "status" | "createdAt" | "updatedAt" | "organizerId", ExtArgs["result"]["trip"]>
export type TripInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
organizer?: boolean | Prisma.UserDefaultArgs<ExtArgs>
participants?: boolean | Prisma.Trip$participantsArgs<ExtArgs>
@@ -1229,6 +1409,22 @@ export type $TripPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs =
description: string | null
mountain: string
location: string
/**
* Titik kumpul / meeting point (teks bebas)
*/
meetingPoint: string | null
/**
* Itinerary hari per hari (teks bebas, bullet OK)
*/
itinerary: string | null
/**
* Yang termasuk harga (teks bebas)
*/
whatsIncluded: string | null
/**
* Yang tidak termasuk (teks bebas)
*/
whatsExcluded: string | null
date: Date
endDate: Date | null
maxParticipants: number
@@ -1669,6 +1865,10 @@ export interface TripFieldRefs {
readonly description: Prisma.FieldRef<"Trip", 'String'>
readonly mountain: Prisma.FieldRef<"Trip", 'String'>
readonly location: Prisma.FieldRef<"Trip", 'String'>
readonly meetingPoint: Prisma.FieldRef<"Trip", 'String'>
readonly itinerary: Prisma.FieldRef<"Trip", 'String'>
readonly whatsIncluded: Prisma.FieldRef<"Trip", 'String'>
readonly whatsExcluded: Prisma.FieldRef<"Trip", 'String'>
readonly date: Prisma.FieldRef<"Trip", 'DateTime'>
readonly endDate: Prisma.FieldRef<"Trip", 'DateTime'>
readonly maxParticipants: Prisma.FieldRef<"Trip", 'Int'>
+89 -1
View File
@@ -28,6 +28,8 @@ export type TripParticipantMinAggregateOutputType = {
id: string | null
status: $Enums.ParticipantStatus | null
createdAt: Date | null
markedPaidAt: Date | null
paymentConfirmedAt: Date | null
tripId: string | null
userId: string | null
}
@@ -36,6 +38,8 @@ export type TripParticipantMaxAggregateOutputType = {
id: string | null
status: $Enums.ParticipantStatus | null
createdAt: Date | null
markedPaidAt: Date | null
paymentConfirmedAt: Date | null
tripId: string | null
userId: string | null
}
@@ -44,6 +48,8 @@ export type TripParticipantCountAggregateOutputType = {
id: number
status: number
createdAt: number
markedPaidAt: number
paymentConfirmedAt: number
tripId: number
userId: number
_all: number
@@ -54,6 +60,8 @@ export type TripParticipantMinAggregateInputType = {
id?: true
status?: true
createdAt?: true
markedPaidAt?: true
paymentConfirmedAt?: true
tripId?: true
userId?: true
}
@@ -62,6 +70,8 @@ export type TripParticipantMaxAggregateInputType = {
id?: true
status?: true
createdAt?: true
markedPaidAt?: true
paymentConfirmedAt?: true
tripId?: true
userId?: true
}
@@ -70,6 +80,8 @@ export type TripParticipantCountAggregateInputType = {
id?: true
status?: true
createdAt?: true
markedPaidAt?: true
paymentConfirmedAt?: true
tripId?: true
userId?: true
_all?: true
@@ -151,6 +163,8 @@ export type TripParticipantGroupByOutputType = {
id: string
status: $Enums.ParticipantStatus
createdAt: Date
markedPaidAt: Date | null
paymentConfirmedAt: Date | null
tripId: string
userId: string
_count: TripParticipantCountAggregateOutputType | null
@@ -180,6 +194,8 @@ export type TripParticipantWhereInput = {
id?: Prisma.StringFilter<"TripParticipant"> | string
status?: Prisma.EnumParticipantStatusFilter<"TripParticipant"> | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFilter<"TripParticipant"> | Date | string
markedPaidAt?: Prisma.DateTimeNullableFilter<"TripParticipant"> | Date | string | null
paymentConfirmedAt?: Prisma.DateTimeNullableFilter<"TripParticipant"> | Date | string | null
tripId?: Prisma.StringFilter<"TripParticipant"> | string
userId?: Prisma.StringFilter<"TripParticipant"> | string
trip?: Prisma.XOR<Prisma.TripScalarRelationFilter, Prisma.TripWhereInput>
@@ -190,6 +206,8 @@ export type TripParticipantOrderByWithRelationInput = {
id?: Prisma.SortOrder
status?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
markedPaidAt?: Prisma.SortOrderInput | Prisma.SortOrder
paymentConfirmedAt?: Prisma.SortOrderInput | Prisma.SortOrder
tripId?: Prisma.SortOrder
userId?: Prisma.SortOrder
trip?: Prisma.TripOrderByWithRelationInput
@@ -204,6 +222,8 @@ export type TripParticipantWhereUniqueInput = Prisma.AtLeast<{
NOT?: Prisma.TripParticipantWhereInput | Prisma.TripParticipantWhereInput[]
status?: Prisma.EnumParticipantStatusFilter<"TripParticipant"> | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFilter<"TripParticipant"> | Date | string
markedPaidAt?: Prisma.DateTimeNullableFilter<"TripParticipant"> | Date | string | null
paymentConfirmedAt?: Prisma.DateTimeNullableFilter<"TripParticipant"> | Date | string | null
tripId?: Prisma.StringFilter<"TripParticipant"> | string
userId?: Prisma.StringFilter<"TripParticipant"> | string
trip?: Prisma.XOR<Prisma.TripScalarRelationFilter, Prisma.TripWhereInput>
@@ -214,6 +234,8 @@ export type TripParticipantOrderByWithAggregationInput = {
id?: Prisma.SortOrder
status?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
markedPaidAt?: Prisma.SortOrderInput | Prisma.SortOrder
paymentConfirmedAt?: Prisma.SortOrderInput | Prisma.SortOrder
tripId?: Prisma.SortOrder
userId?: Prisma.SortOrder
_count?: Prisma.TripParticipantCountOrderByAggregateInput
@@ -228,6 +250,8 @@ export type TripParticipantScalarWhereWithAggregatesInput = {
id?: Prisma.StringWithAggregatesFilter<"TripParticipant"> | string
status?: Prisma.EnumParticipantStatusWithAggregatesFilter<"TripParticipant"> | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeWithAggregatesFilter<"TripParticipant"> | Date | string
markedPaidAt?: Prisma.DateTimeNullableWithAggregatesFilter<"TripParticipant"> | Date | string | null
paymentConfirmedAt?: Prisma.DateTimeNullableWithAggregatesFilter<"TripParticipant"> | Date | string | null
tripId?: Prisma.StringWithAggregatesFilter<"TripParticipant"> | string
userId?: Prisma.StringWithAggregatesFilter<"TripParticipant"> | string
}
@@ -236,6 +260,8 @@ export type TripParticipantCreateInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
trip: Prisma.TripCreateNestedOneWithoutParticipantsInput
user: Prisma.UserCreateNestedOneWithoutParticipationsInput
}
@@ -244,6 +270,8 @@ export type TripParticipantUncheckedCreateInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
tripId: string
userId: string
}
@@ -252,6 +280,8 @@ export type TripParticipantUpdateInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
trip?: Prisma.TripUpdateOneRequiredWithoutParticipantsNestedInput
user?: Prisma.UserUpdateOneRequiredWithoutParticipationsNestedInput
}
@@ -260,6 +290,8 @@ export type TripParticipantUncheckedUpdateInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
tripId?: Prisma.StringFieldUpdateOperationsInput | string
userId?: Prisma.StringFieldUpdateOperationsInput | string
}
@@ -268,6 +300,8 @@ export type TripParticipantCreateManyInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
tripId: string
userId: string
}
@@ -276,12 +310,16 @@ export type TripParticipantUpdateManyMutationInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
}
export type TripParticipantUncheckedUpdateManyInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
tripId?: Prisma.StringFieldUpdateOperationsInput | string
userId?: Prisma.StringFieldUpdateOperationsInput | string
}
@@ -305,6 +343,8 @@ export type TripParticipantCountOrderByAggregateInput = {
id?: Prisma.SortOrder
status?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
markedPaidAt?: Prisma.SortOrder
paymentConfirmedAt?: Prisma.SortOrder
tripId?: Prisma.SortOrder
userId?: Prisma.SortOrder
}
@@ -313,6 +353,8 @@ export type TripParticipantMaxOrderByAggregateInput = {
id?: Prisma.SortOrder
status?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
markedPaidAt?: Prisma.SortOrder
paymentConfirmedAt?: Prisma.SortOrder
tripId?: Prisma.SortOrder
userId?: Prisma.SortOrder
}
@@ -321,6 +363,8 @@ export type TripParticipantMinOrderByAggregateInput = {
id?: Prisma.SortOrder
status?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
markedPaidAt?: Prisma.SortOrder
paymentConfirmedAt?: Prisma.SortOrder
tripId?: Prisma.SortOrder
userId?: Prisma.SortOrder
}
@@ -417,6 +461,8 @@ export type TripParticipantCreateWithoutUserInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
trip: Prisma.TripCreateNestedOneWithoutParticipantsInput
}
@@ -424,6 +470,8 @@ export type TripParticipantUncheckedCreateWithoutUserInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
tripId: string
}
@@ -460,6 +508,8 @@ export type TripParticipantScalarWhereInput = {
id?: Prisma.StringFilter<"TripParticipant"> | string
status?: Prisma.EnumParticipantStatusFilter<"TripParticipant"> | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFilter<"TripParticipant"> | Date | string
markedPaidAt?: Prisma.DateTimeNullableFilter<"TripParticipant"> | Date | string | null
paymentConfirmedAt?: Prisma.DateTimeNullableFilter<"TripParticipant"> | Date | string | null
tripId?: Prisma.StringFilter<"TripParticipant"> | string
userId?: Prisma.StringFilter<"TripParticipant"> | string
}
@@ -468,6 +518,8 @@ export type TripParticipantCreateWithoutTripInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
user: Prisma.UserCreateNestedOneWithoutParticipationsInput
}
@@ -475,6 +527,8 @@ export type TripParticipantUncheckedCreateWithoutTripInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
userId: string
}
@@ -508,6 +562,8 @@ export type TripParticipantCreateManyUserInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
tripId: string
}
@@ -515,6 +571,8 @@ export type TripParticipantUpdateWithoutUserInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
trip?: Prisma.TripUpdateOneRequiredWithoutParticipantsNestedInput
}
@@ -522,6 +580,8 @@ export type TripParticipantUncheckedUpdateWithoutUserInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
tripId?: Prisma.StringFieldUpdateOperationsInput | string
}
@@ -529,6 +589,8 @@ export type TripParticipantUncheckedUpdateManyWithoutUserInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
tripId?: Prisma.StringFieldUpdateOperationsInput | string
}
@@ -536,6 +598,8 @@ export type TripParticipantCreateManyTripInput = {
id?: string
status?: $Enums.ParticipantStatus
createdAt?: Date | string
markedPaidAt?: Date | string | null
paymentConfirmedAt?: Date | string | null
userId: string
}
@@ -543,6 +607,8 @@ export type TripParticipantUpdateWithoutTripInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
user?: Prisma.UserUpdateOneRequiredWithoutParticipationsNestedInput
}
@@ -550,6 +616,8 @@ export type TripParticipantUncheckedUpdateWithoutTripInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
userId?: Prisma.StringFieldUpdateOperationsInput | string
}
@@ -557,6 +625,8 @@ export type TripParticipantUncheckedUpdateManyWithoutTripInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
status?: Prisma.EnumParticipantStatusFieldUpdateOperationsInput | $Enums.ParticipantStatus
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
markedPaidAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
paymentConfirmedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
userId?: Prisma.StringFieldUpdateOperationsInput | string
}
@@ -566,6 +636,8 @@ export type TripParticipantSelect<ExtArgs extends runtime.Types.Extensions.Inter
id?: boolean
status?: boolean
createdAt?: boolean
markedPaidAt?: boolean
paymentConfirmedAt?: boolean
tripId?: boolean
userId?: boolean
trip?: boolean | Prisma.TripDefaultArgs<ExtArgs>
@@ -576,6 +648,8 @@ export type TripParticipantSelectCreateManyAndReturn<ExtArgs extends runtime.Typ
id?: boolean
status?: boolean
createdAt?: boolean
markedPaidAt?: boolean
paymentConfirmedAt?: boolean
tripId?: boolean
userId?: boolean
trip?: boolean | Prisma.TripDefaultArgs<ExtArgs>
@@ -586,6 +660,8 @@ export type TripParticipantSelectUpdateManyAndReturn<ExtArgs extends runtime.Typ
id?: boolean
status?: boolean
createdAt?: boolean
markedPaidAt?: boolean
paymentConfirmedAt?: boolean
tripId?: boolean
userId?: boolean
trip?: boolean | Prisma.TripDefaultArgs<ExtArgs>
@@ -596,11 +672,13 @@ export type TripParticipantSelectScalar = {
id?: boolean
status?: boolean
createdAt?: boolean
markedPaidAt?: boolean
paymentConfirmedAt?: boolean
tripId?: boolean
userId?: boolean
}
export type TripParticipantOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "status" | "createdAt" | "tripId" | "userId", ExtArgs["result"]["tripParticipant"]>
export type TripParticipantOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "status" | "createdAt" | "markedPaidAt" | "paymentConfirmedAt" | "tripId" | "userId", ExtArgs["result"]["tripParticipant"]>
export type TripParticipantInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
trip?: boolean | Prisma.TripDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
@@ -624,6 +702,14 @@ export type $TripParticipantPayload<ExtArgs extends runtime.Types.Extensions.Int
id: string
status: $Enums.ParticipantStatus
createdAt: Date
/**
* Peserta menekan "Saya sudah bayar" (pembayaran manual)
*/
markedPaidAt: Date | null
/**
* Organizer mengonfirmasi uang sudah masuk
*/
paymentConfirmedAt: Date | null
tripId: string
userId: string
}, ExtArgs["result"]["tripParticipant"]>
@@ -1054,6 +1140,8 @@ export interface TripParticipantFieldRefs {
readonly id: Prisma.FieldRef<"TripParticipant", 'String'>
readonly status: Prisma.FieldRef<"TripParticipant", 'ParticipantStatus'>
readonly createdAt: Prisma.FieldRef<"TripParticipant", 'DateTime'>
readonly markedPaidAt: Prisma.FieldRef<"TripParticipant", 'DateTime'>
readonly paymentConfirmedAt: Prisma.FieldRef<"TripParticipant", 'DateTime'>
readonly tripId: Prisma.FieldRef<"TripParticipant", 'String'>
readonly userId: Prisma.FieldRef<"TripParticipant", 'String'>
}
+48 -1
View File
@@ -30,6 +30,7 @@ export type UserMinAggregateOutputType = {
email: string | null
password: string | null
image: string | null
isVerified: boolean | null
createdAt: Date | null
updatedAt: Date | null
}
@@ -40,6 +41,7 @@ export type UserMaxAggregateOutputType = {
email: string | null
password: string | null
image: string | null
isVerified: boolean | null
createdAt: Date | null
updatedAt: Date | null
}
@@ -50,6 +52,7 @@ export type UserCountAggregateOutputType = {
email: number
password: number
image: number
isVerified: number
createdAt: number
updatedAt: number
_all: number
@@ -62,6 +65,7 @@ export type UserMinAggregateInputType = {
email?: true
password?: true
image?: true
isVerified?: true
createdAt?: true
updatedAt?: true
}
@@ -72,6 +76,7 @@ export type UserMaxAggregateInputType = {
email?: true
password?: true
image?: true
isVerified?: true
createdAt?: true
updatedAt?: true
}
@@ -82,6 +87,7 @@ export type UserCountAggregateInputType = {
email?: true
password?: true
image?: true
isVerified?: true
createdAt?: true
updatedAt?: true
_all?: true
@@ -165,6 +171,7 @@ export type UserGroupByOutputType = {
email: string
password: string
image: string | null
isVerified: boolean
createdAt: Date
updatedAt: Date
_count: UserCountAggregateOutputType | null
@@ -196,6 +203,7 @@ export type UserWhereInput = {
email?: Prisma.StringFilter<"User"> | string
password?: Prisma.StringFilter<"User"> | string
image?: Prisma.StringNullableFilter<"User"> | string | null
isVerified?: Prisma.BoolFilter<"User"> | boolean
createdAt?: Prisma.DateTimeFilter<"User"> | Date | string
updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string
trips?: Prisma.TripListRelationFilter
@@ -209,6 +217,7 @@ export type UserOrderByWithRelationInput = {
email?: Prisma.SortOrder
password?: Prisma.SortOrder
image?: Prisma.SortOrderInput | Prisma.SortOrder
isVerified?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
trips?: Prisma.TripOrderByRelationAggregateInput
@@ -225,6 +234,7 @@ export type UserWhereUniqueInput = Prisma.AtLeast<{
name?: Prisma.StringFilter<"User"> | string
password?: Prisma.StringFilter<"User"> | string
image?: Prisma.StringNullableFilter<"User"> | string | null
isVerified?: Prisma.BoolFilter<"User"> | boolean
createdAt?: Prisma.DateTimeFilter<"User"> | Date | string
updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string
trips?: Prisma.TripListRelationFilter
@@ -238,6 +248,7 @@ export type UserOrderByWithAggregationInput = {
email?: Prisma.SortOrder
password?: Prisma.SortOrder
image?: Prisma.SortOrderInput | Prisma.SortOrder
isVerified?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
_count?: Prisma.UserCountOrderByAggregateInput
@@ -254,6 +265,7 @@ export type UserScalarWhereWithAggregatesInput = {
email?: Prisma.StringWithAggregatesFilter<"User"> | string
password?: Prisma.StringWithAggregatesFilter<"User"> | string
image?: Prisma.StringNullableWithAggregatesFilter<"User"> | string | null
isVerified?: Prisma.BoolWithAggregatesFilter<"User"> | boolean
createdAt?: Prisma.DateTimeWithAggregatesFilter<"User"> | Date | string
updatedAt?: Prisma.DateTimeWithAggregatesFilter<"User"> | Date | string
}
@@ -264,6 +276,7 @@ export type UserCreateInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput
@@ -277,6 +290,7 @@ export type UserUncheckedCreateInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput
@@ -290,6 +304,7 @@ export type UserUpdateInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput
@@ -303,6 +318,7 @@ export type UserUncheckedUpdateInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput
@@ -316,6 +332,7 @@ export type UserCreateManyInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
}
@@ -326,6 +343,7 @@ export type UserUpdateManyMutationInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
@@ -336,6 +354,7 @@ export type UserUncheckedUpdateManyInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
@@ -346,6 +365,7 @@ export type UserCountOrderByAggregateInput = {
email?: Prisma.SortOrder
password?: Prisma.SortOrder
image?: Prisma.SortOrder
isVerified?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
}
@@ -356,6 +376,7 @@ export type UserMaxOrderByAggregateInput = {
email?: Prisma.SortOrder
password?: Prisma.SortOrder
image?: Prisma.SortOrder
isVerified?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
}
@@ -366,6 +387,7 @@ export type UserMinOrderByAggregateInput = {
email?: Prisma.SortOrder
password?: Prisma.SortOrder
image?: Prisma.SortOrder
isVerified?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
}
@@ -383,6 +405,10 @@ export type NullableStringFieldUpdateOperationsInput = {
set?: string | null
}
export type BoolFieldUpdateOperationsInput = {
set?: boolean
}
export type DateTimeFieldUpdateOperationsInput = {
set?: Date | string
}
@@ -435,6 +461,7 @@ export type UserCreateWithoutTripsInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
participations?: Prisma.TripParticipantCreateNestedManyWithoutUserInput
@@ -447,6 +474,7 @@ export type UserUncheckedCreateWithoutTripsInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
participations?: Prisma.TripParticipantUncheckedCreateNestedManyWithoutUserInput
@@ -475,6 +503,7 @@ export type UserUpdateWithoutTripsInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
participations?: Prisma.TripParticipantUpdateManyWithoutUserNestedInput
@@ -487,6 +516,7 @@ export type UserUncheckedUpdateWithoutTripsInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
participations?: Prisma.TripParticipantUncheckedUpdateManyWithoutUserNestedInput
@@ -499,6 +529,7 @@ export type UserCreateWithoutTripReviewsInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput
@@ -511,6 +542,7 @@ export type UserUncheckedCreateWithoutTripReviewsInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput
@@ -539,6 +571,7 @@ export type UserUpdateWithoutTripReviewsInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput
@@ -551,6 +584,7 @@ export type UserUncheckedUpdateWithoutTripReviewsInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput
@@ -563,6 +597,7 @@ export type UserCreateWithoutParticipationsInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
trips?: Prisma.TripCreateNestedManyWithoutOrganizerInput
@@ -575,6 +610,7 @@ export type UserUncheckedCreateWithoutParticipationsInput = {
email: string
password: string
image?: string | null
isVerified?: boolean
createdAt?: Date | string
updatedAt?: Date | string
trips?: Prisma.TripUncheckedCreateNestedManyWithoutOrganizerInput
@@ -603,6 +639,7 @@ export type UserUpdateWithoutParticipationsInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
trips?: Prisma.TripUpdateManyWithoutOrganizerNestedInput
@@ -615,6 +652,7 @@ export type UserUncheckedUpdateWithoutParticipationsInput = {
email?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
image?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
isVerified?: Prisma.BoolFieldUpdateOperationsInput | boolean
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
trips?: Prisma.TripUncheckedUpdateManyWithoutOrganizerNestedInput
@@ -676,6 +714,7 @@ export type UserSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = r
email?: boolean
password?: boolean
image?: boolean
isVerified?: boolean
createdAt?: boolean
updatedAt?: boolean
trips?: boolean | Prisma.User$tripsArgs<ExtArgs>
@@ -690,6 +729,7 @@ export type UserSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensio
email?: boolean
password?: boolean
image?: boolean
isVerified?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["user"]>
@@ -700,6 +740,7 @@ export type UserSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensio
email?: boolean
password?: boolean
image?: boolean
isVerified?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["user"]>
@@ -710,11 +751,12 @@ export type UserSelectScalar = {
email?: boolean
password?: boolean
image?: boolean
isVerified?: boolean
createdAt?: boolean
updatedAt?: boolean
}
export type UserOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "name" | "email" | "password" | "image" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]>
export type UserOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "name" | "email" | "password" | "image" | "isVerified" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]>
export type UserInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
trips?: boolean | Prisma.User$tripsArgs<ExtArgs>
participations?: boolean | Prisma.User$participationsArgs<ExtArgs>
@@ -737,6 +779,10 @@ export type $UserPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs =
email: string
password: string
image: string | null
/**
* Akun diverifikasi tim SeTrip (manual / admin) — tampil sebagai badge kepercayaan
*/
isVerified: boolean
createdAt: Date
updatedAt: Date
}, ExtArgs["result"]["user"]>
@@ -1170,6 +1216,7 @@ export interface UserFieldRefs {
readonly email: Prisma.FieldRef<"User", 'String'>
readonly password: Prisma.FieldRef<"User", 'String'>
readonly image: Prisma.FieldRef<"User", 'String'>
readonly isVerified: Prisma.FieldRef<"User", 'Boolean'>
readonly createdAt: Prisma.FieldRef<"User", 'DateTime'>
readonly updatedAt: Prisma.FieldRef<"User", 'DateTime'>
}
+12 -2
View File
@@ -173,8 +173,18 @@ export default async function ProfilePage() {
date={t.date}
endDate={t.endDate}
rightSlot={
<span className="text-neutral-400">
{p.status === "CONFIRMED" ? "Terdaftar" : p.status}
<span
className={
p.status === "PENDING"
? "font-medium text-amber-700"
: "text-neutral-400"
}
>
{p.status === "CONFIRMED"
? "Terkonfirmasi"
: p.status === "PENDING"
? "Menunggu organizer"
: p.status}
</span>
}
/>
+94 -8
View File
@@ -3,8 +3,14 @@ import { getServerSession } from "next-auth";
import Link from "next/link";
import { authOptions } from "@/lib/auth";
import { tripService } from "@/server/services/trip.service";
import { formatRupiah, formatDateRange } from "@/lib/utils";
import { trustService } from "@/server/services/trust.service";
import { formatRupiah } from "@/lib/utils";
import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates";
import { JoinTripButton } from "@/features/trip/components/join-trip-button";
import { OrganizerJoinRequests } from "@/features/trip/components/organizer-join-requests";
import { OrganizerTrustPanel } from "@/features/trip/components/organizer-trust-panel";
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 {
@@ -27,10 +33,21 @@ export default async function TripDetailPage({
notFound();
}
const organizerTrust = await trustService.getOrganizerTrust(
trip.organizerId
);
const activeParticipants = trip.participants.filter(
(p) => p.status !== "CANCELLED"
);
const confirmedParticipants = activeParticipants.filter(
(p) => p.status === "CONFIRMED"
);
const pendingParticipants = activeParticipants.filter(
(p) => p.status === "PENDING"
);
const participantCount = activeParticipants.length;
const confirmedCount = confirmedParticipants.length;
const spotsLeft = trip.maxParticipants - participantCount;
const fillPercent = Math.min(
(participantCount / trip.maxParticipants) * 100,
@@ -63,6 +80,10 @@ export default async function TripDetailPage({
) / 10
: null;
const paymentPendingParticipants = activeParticipants.filter(
(p) => p.markedPaidAt && !p.paymentConfirmedAt
);
return (
<div className="mx-auto max-w-3xl px-4 py-4 sm:py-8">
{/* Breadcrumb */}
@@ -123,7 +144,7 @@ export default async function TripDetailPage({
<div className="min-w-0">
<p className="text-[10px] font-medium text-neutral-400 sm:text-xs">Tanggal</p>
<p className="truncate text-xs font-semibold text-neutral-800 sm:text-sm">
{formatDateRange(trip.date, trip.endDate)}
{formatTripCalendarDateRangeLong(trip.date, trip.endDate)}
</p>
</div>
</div>
@@ -153,6 +174,12 @@ export default async function TripDetailPage({
</div>
</div>
<OrganizerTrustPanel
name={trip.organizer.name}
image={trip.organizer.image}
trust={organizerTrust}
/>
{/* Participant Progress */}
<div className="rounded-xl border border-neutral-200 p-3 sm:p-4">
<div className="mb-2 flex items-center justify-between">
@@ -179,12 +206,30 @@ export default async function TripDetailPage({
/>
</div>
<p className="mt-1.5 text-[11px] text-neutral-500 sm:text-xs">
Maksimal {trip.maxParticipants} orang. Saat ini {participantCount}{" "}
mendaftar, {confirmedCount} sudah disetujui organizer.
</p>
<p className="mt-1 text-[11px] text-neutral-500 sm:text-xs">
{spotsLeft > 0
? `${spotsLeft} slot tersisa — yuk gabung!`
? `Masih ada ${spotsLeft} tempat — yuk gabung!`
: "Trip sudah penuh"}
{confirmedCount < participantCount && (
<>
{" "}
· {participantCount - confirmedCount} menunggu persetujuan
organizer
</>
)}
</p>
</div>
<TripProgramBlock
meetingPoint={trip.meetingPoint}
itinerary={trip.itinerary}
whatsIncluded={trip.whatsIncluded}
whatsExcluded={trip.whatsExcluded}
/>
{/* Description */}
{trip.description && (
<div>
@@ -197,12 +242,50 @@ export default async function TripDetailPage({
</div>
)}
{isOrganizer && pendingParticipants.length > 0 && (
<OrganizerJoinRequests
tripId={trip.id}
pending={pendingParticipants.map((p) => ({
id: p.id,
user: p.user,
markedPaidAt: p.markedPaidAt,
}))}
/>
)}
{isOrganizer && paymentPendingParticipants.length > 0 && (
<OrganizerPaymentQueue
tripId={trip.id}
items={paymentPendingParticipants.map((p) => ({
id: p.id,
user: p.user,
joinStatus:
p.status === "PENDING" ? ("PENDING" as const) : ("CONFIRMED" as const),
}))}
/>
)}
{/* Action */}
<JoinTripButton
tripId={trip.id}
isLoggedIn={!!session?.user}
isOrganizer={isOrganizer}
isJoined={!!currentParticipation}
participationStatus={
currentParticipation?.status === "PENDING" ||
currentParticipation?.status === "CONFIRMED"
? currentParticipation.status
: null
}
participantPayment={
currentParticipation
? {
markedPaidAt: currentParticipation.markedPaidAt,
paymentConfirmedAt:
currentParticipation.paymentConfirmedAt,
}
: null
}
isFull={spotsLeft <= 0}
tripStatus={trip.status}
isDeparturePast={isDeparturePast}
@@ -226,18 +309,21 @@ export default async function TripDetailPage({
}
/>
{/* Participants List */}
{/* Peserta yang sudah disetujui organizer (publik) */}
<div>
<h2 className="mb-3 text-xs font-bold text-neutral-700 sm:text-sm">
Peserta ({participantCount})
Peserta terkonfirmasi ({confirmedCount})
</h2>
{participantCount === 0 ? (
{confirmedCount === 0 ? (
<p className="text-xs text-neutral-400 sm:text-sm">
Belum ada peserta. Jadilah yang pertama! 🎒
Belum ada peserta yang dikonfirmasi.{" "}
{pendingParticipants.length > 0
? "Cek permintaan join di atas untuk menyetujui peserta."
: "Jadilah yang pertama mendaftar! 🎒"}
</p>
) : (
<div className="flex flex-wrap gap-1.5 sm:gap-2">
{activeParticipants.map((p) => (
{confirmedParticipants.map((p) => (
<div
key={p.id}
className="flex items-center gap-1.5 rounded-full bg-neutral-100 px-2.5 py-1 sm:gap-2 sm:px-3 sm:py-1.5"