diff --git a/src/lib/components/TripCard.svelte b/src/lib/components/TripCard.svelte index fa7c652..2c291e2 100644 --- a/src/lib/components/TripCard.svelte +++ b/src/lib/components/TripCard.svelte @@ -58,6 +58,10 @@ > + diff --git a/src/routes/api/trip/+server.ts b/src/routes/api/trip/+server.ts new file mode 100644 index 0000000..3073abd --- /dev/null +++ b/src/routes/api/trip/+server.ts @@ -0,0 +1,51 @@ +import { db } from "$lib/db/db.server"; +import { adventureTable, userPlannedTrips } from "$lib/db/schema"; +import type { Adventure, Trip } from "$lib/utils/types"; +import { json, type RequestEvent, type RequestHandler } from "@sveltejs/kit"; +import { and, eq } from "drizzle-orm"; + +/** + * Handles the GET request for retrieving a trip. + * @param {Request} request - The request object. + * @param {Response} response - The response object. + * @returns {Promise} - A promise that resolves when the request is handled. + */ +export const GET: RequestHandler = async ({ url, locals }) => { + const id = url.searchParams.get("id"); + const user = locals.user; + + if (!user) { + return json({ error: "Unauthorized" }, { status: 401 }); + } + + if (!id) { + return json({ error: "Missing adventure ID" }, { status: 400 }); + } + + const trip = await db + .select() + .from(userPlannedTrips) + .where( + and( + eq(userPlannedTrips.id, Number(id)), // Convert id to number + eq(userPlannedTrips.userId, user.id) + ) + ) + .limit(1) + .execute(); + + if (trip.length === 0) { + return json({ error: "Trip not found" }, { status: 404 }); + } + + JSON.stringify( + trip.map((r) => { + const adventure: Trip = r as Trip; + }) + ); + + // console.log("GET /api/adventure?id=", id); + // console.log("User:", user); + + return json({ trip }, { status: 200 }); +}; diff --git a/src/routes/trip/[id]/+page.server.ts b/src/routes/trip/[id]/+page.server.ts new file mode 100644 index 0000000..d0ebb4d --- /dev/null +++ b/src/routes/trip/[id]/+page.server.ts @@ -0,0 +1,32 @@ +import { redirect } from "@sveltejs/kit"; +import type { PageServerLoad } from "./$types"; +import { db } from "$lib/db/db.server"; +import { and, eq } from "drizzle-orm"; +import { adventureTable, userPlannedTrips } from "$lib/db/schema"; + +export const load: PageServerLoad = (async (event) => { + if (!event.locals.user) { + return redirect(302, "/login"); + } + + let adventureUserId: any[] = await db + .select({ userId: userPlannedTrips.userId }) + .from(userPlannedTrips) + .where(eq(userPlannedTrips.id, Number(event.params.id))) + .limit(1) + .execute(); + + console.log(adventureUserId); + + if ( + adventureUserId && + adventureUserId[0]?.userId !== event.locals.user.id && + adventureUserId !== null + ) { + return redirect(302, "/log"); + } + + let trip = await event.fetch(`/api/trip?id=${event.params.id}`); + + return { trip: await trip.json() }; +}) satisfies PageServerLoad; diff --git a/src/routes/trip/[id]/+page.svelte b/src/routes/trip/[id]/+page.svelte new file mode 100644 index 0000000..758cf1e --- /dev/null +++ b/src/routes/trip/[id]/+page.svelte @@ -0,0 +1,27 @@ + + +
+ {#if trip} +

{trip.name}

+

{trip.description}

+

{trip.startDate}

+

{trip.endDate}

+ {/if} +