diff --git a/app/home/(user)/(dashboard)/cart/montonio-callback/[montonioId]/route.ts b/app/home/(user)/(dashboard)/cart/montonio-callback/[montonioId]/page.tsx similarity index 84% rename from app/home/(user)/(dashboard)/cart/montonio-callback/[montonioId]/route.ts rename to app/home/(user)/(dashboard)/cart/montonio-callback/[montonioId]/page.tsx index b6e74bc..b443401 100644 --- a/app/home/(user)/(dashboard)/cart/montonio-callback/[montonioId]/route.ts +++ b/app/home/(user)/(dashboard)/cart/montonio-callback/[montonioId]/page.tsx @@ -1,5 +1,6 @@ import jwt from 'jsonwebtoken'; import { z } from "zod"; +import { redirect } from 'next/navigation'; import { MontonioOrderToken } from "@/app/home/(user)/_components/cart/types"; import { loadCurrentUserAccount } from "@/app/home/(user)/_lib/server/load-user-account"; import { listProductTypes } from "@lib/data/products"; @@ -99,27 +100,40 @@ const handleOrderToken = async (orderToken: string) => { } } -export async function GET(request: Request) { +interface PageProps { + params: { + montonioId?: string; + }; + searchParams: { + 'order-token'?: string; + }; +} + +export default async function MontonioCallbackPage({ searchParams }: PageProps) { const { language } = await createI18nServerInstance(); - const baseUrl = new URL(env().siteUrl); + try { - const orderToken = new URL(request.url).searchParams.get('order-token'); + const orderToken = searchParams['order-token']; if (!orderToken) { - throw new Error("Order token is missing"); + console.error("Order token is missing"); + redirect('/home/cart/montonio-callback/error'); } const account = await loadCurrentUserAccount(); if (!account) { - throw new Error("Account not found in context"); + console.error("Account not found in context"); + redirect('/home/cart/montonio-callback/error'); } const orderResult = await handleOrderToken(orderToken); if (!orderResult) { - throw new Error("Order result is missing"); + console.error("Order result is missing"); + redirect('/home/cart/montonio-callback/error'); } const { medusaOrderId, email, partnerLocationName, analysisPackageName, orderedAnalysisElements } = orderResult; const personName = account.name; + if (email && analysisPackageName) { try { await sendEmail({ email, analysisPackageName, personName, partnerLocationName, language }); @@ -130,10 +144,13 @@ export async function GET(request: Request) { // @TODO send email for separate analyses console.error("Missing email or analysisPackageName", orderResult); } - sendOrderToMedipost({ medusaOrderId, orderedAnalysisElements }) - return Response.redirect(new URL('/home/order', baseUrl)) + + // Send order to Medipost (no await to avoid blocking the redirect) + sendOrderToMedipost({ medusaOrderId, orderedAnalysisElements }); + + redirect('/home/order'); } catch (error) { console.error("Failed to place order", error); - return Response.redirect(new URL('/home/cart/montonio-callback/error', baseUrl)); + redirect('/home/cart/montonio-callback/error'); } } diff --git a/app/home/(user)/(dashboard)/cart/montonio-callback/route.ts b/app/home/(user)/(dashboard)/cart/montonio-callback/route.ts deleted file mode 100644 index 907bc74..0000000 --- a/app/home/(user)/(dashboard)/cart/montonio-callback/route.ts +++ /dev/null @@ -1 +0,0 @@ -export { GET } from "./[montonioId]/route";