feat(MED-131): route sometimes redirects back to login instead

This commit is contained in:
2025-08-05 10:07:59 +03:00
parent 4617c483fa
commit e375f22b57
2 changed files with 26 additions and 10 deletions

View File

@@ -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');
}
}

View File

@@ -1 +0,0 @@
export { GET } from "./[montonioId]/route";