"use server"; import { getServerSession } from "next-auth"; import { authOptions } from "@/lib/auth"; import { createTripSchema } from "./schemas"; import { tripService } from "@/server/services/trip.service"; import { revalidatePath } from "next/cache"; 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, maxParticipants: formData.get("maxParticipants") as string, price: formData.get("price") as string, image: formData.get("image") as string, }; const result = createTripSchema.safeParse(raw); if (!result.success) { return { error: result.error.issues[0].message }; } try { const trip = await tripService.createTrip({ ...result.data, date: new Date(result.data.date), organizerId: session.user.id, }); revalidatePath("/trips"); 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}`); 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}`); return { success: true }; } catch (err) { return { error: (err as Error).message }; } }