"use server"; import { getServerSession } from "next-auth"; import { authOptions } from "@/lib/auth"; import { createTripSchema, tripImageUrlsSchema } from "./schemas"; import { tripService } from "@/server/services/trip.service"; import { revalidatePath } from "next/cache"; import { tripStoredInstantFromYmd } from "@/lib/trip-dates"; export async function createTripAction(formData: FormData) { const session = await getServerSession(authOptions); if (!session?.user) { return { error: "Kamu harus login terlebih dahulu" }; } const raw = { title: formData.get("title") as string, description: formData.get("description") as string, mountain: formData.get("mountain") as string, location: formData.get("location") as string, date: formData.get("date") as string, endDate: (formData.get("endDate") as string) || undefined, maxParticipants: formData.get("maxParticipants") as string, price: formData.get("price") as string, }; const result = createTripSchema.safeParse(raw); if (!result.success) { return { error: result.error.issues[0].message }; } const imageUrlsRaw = formData .getAll("imageUrls") .map((v) => (v as string).trim()) .filter(Boolean); const imagesParsed = tripImageUrlsSchema.safeParse(imageUrlsRaw); if (!imagesParsed.success) { return { error: imagesParsed.error.issues[0].message }; } const imageUrls = imagesParsed.data; const date = tripStoredInstantFromYmd(result.data.date); let endDate = result.data.endDate ? tripStoredInstantFromYmd(result.data.endDate) : undefined; if (endDate && endDate.getTime() === date.getTime()) { endDate = undefined; } try { const trip = await tripService.createTrip({ ...result.data, date, endDate, organizerId: session.user.id, imageUrls: imageUrls.length > 0 ? imageUrls : undefined, }); revalidatePath("/trips"); revalidatePath("/"); revalidatePath("/profile"); return { success: true, tripId: trip.id }; } catch (err) { return { error: (err as Error).message }; } } export async function joinTripAction(tripId: string) { const session = await getServerSession(authOptions); if (!session?.user) { return { error: "Kamu harus login terlebih dahulu" }; } try { await tripService.joinTrip(tripId, session.user.id); revalidatePath(`/trips/${tripId}`); revalidatePath("/trips"); revalidatePath("/"); revalidatePath("/profile"); return { success: true }; } catch (err) { return { error: (err as Error).message }; } } export async function cancelJoinAction(tripId: string) { const session = await getServerSession(authOptions); if (!session?.user) { return { error: "Kamu harus login terlebih dahulu" }; } try { await tripService.cancelJoin(tripId, session.user.id); revalidatePath(`/trips/${tripId}`); revalidatePath("/trips"); revalidatePath("/"); revalidatePath("/profile"); return { success: true }; } catch (err) { return { error: (err as Error).message }; } }