From 6c6e7a6847ed3c8a5b098a8cdb30699ca54fa61e Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Wed, 24 Sep 2025 18:45:29 +0300 Subject: [PATCH] fix conflict duplicates --- .../cart/montonio-callback/actions.ts | 72 +++++-------------- .../cart/montonio-callback/error/page.tsx | 7 +- app/home/(user)/(dashboard)/cart/page.tsx | 6 -- app/home/(user)/(dashboard)/order/page.tsx | 6 -- .../_components/booking/booking.provider.tsx | 1 + app/home/(user)/_components/cart/index.tsx | 51 ++----------- lib/services/medusaCart.service.ts | 4 +- .../medusa-storefront/src/lib/data/regions.ts | 2 +- 8 files changed, 29 insertions(+), 120 deletions(-) diff --git a/app/home/(user)/(dashboard)/cart/montonio-callback/actions.ts b/app/home/(user)/(dashboard)/cart/montonio-callback/actions.ts index f8cd535..b1ccb05 100644 --- a/app/home/(user)/(dashboard)/cart/montonio-callback/actions.ts +++ b/app/home/(user)/(dashboard)/cart/montonio-callback/actions.ts @@ -1,10 +1,5 @@ 'use server'; -import { MontonioOrderToken } from '@/app/home/(user)/_components/cart/types'; -import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account'; -import { placeOrder, retrieveCart } from '@lib/data/cart'; -import { listProductTypes } from '@lib/data/products'; -import type { StoreOrder } from '@medusajs/types'; import { MontonioOrderToken } from '@/app/home/(user)/_components/cart/types'; import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account'; import { placeOrder, retrieveCart } from '@lib/data/cart'; @@ -12,37 +7,26 @@ import { listProductTypes } from '@lib/data/products'; import type { StoreOrder } from '@medusajs/types'; import jwt from 'jsonwebtoken'; import { z } from 'zod'; + +import { AccountWithParams } from '@kit/accounts/types/accounts'; import { createNotificationsApi } from '@kit/notifications/api'; import { getSupabaseServerAdminClient } from '@kit/supabase/server-admin-client'; + import { createI18nServerInstance } from '~/lib/i18n/i18n.server'; -import { - bookAppointment, -} from '~/lib/services/connected-online.service'; -import { FailureReason } from '~/lib/types/connected-online'; -import { createAnalysisOrder, getAnalysisOrder } from '~/lib/services/order.service'; +import { bookAppointment } from '~/lib/services/connected-online.service'; import { sendOrderToMedipost } from '~/lib/services/medipost/medipostPrivateMessage.service'; import { getOrderedAnalysisIds } from '~/lib/services/medusaOrder.service'; -import { AccountWithParams } from '@kit/accounts/types/accounts'; +import { + createAnalysisOrder, + getAnalysisOrder, +} from '~/lib/services/order.service'; import { getOrderedTtoServices } from '~/lib/services/reservation.service'; +import { FailureReason } from '~/lib/types/connected-online'; const ANALYSIS_PACKAGES_TYPE_HANDLE = 'analysis-packages'; const ANALYSIS_TYPE_HANDLE = 'synlab-analysis'; const MONTONIO_PAID_STATUS = 'PAID'; -const env = () => - z - .object({ - emailSender: z - .string({ - error: 'EMAIL_SENDER is required', - }) - .min(1), - siteUrl: z - .string({ - error: 'NEXT_PUBLIC_SITE_URL is required', - }) - .min(1), - isEnabledDispatchOnMontonioCallback: z.boolean({ const env = () => z .object({ @@ -66,13 +50,6 @@ const env = () => isEnabledDispatchOnMontonioCallback: process.env.MEDIPOST_ENABLE_DISPATCH_ON_MONTONIO_CALLBACK === 'true', }); - }) - .parse({ - emailSender: process.env.EMAIL_SENDER, - siteUrl: process.env.NEXT_PUBLIC_SITE_URL!, - isEnabledDispatchOnMontonioCallback: - process.env.MEDIPOST_ENABLE_DISPATCH_ON_MONTONIO_CALLBACK === 'true', - }); const sendEmail = async ({ account, @@ -86,17 +63,9 @@ const sendEmail = async ({ analysisPackageName: string; partnerLocationName: string; language: string; - account: Pick; - email: string; - analysisPackageName: string; - partnerLocationName: string; - language: string; }) => { const client = getSupabaseServerAdminClient(); try { - const { renderSynlabAnalysisPackageEmail } = await import( - '@kit/email-templates' - ); const { renderSynlabAnalysisPackageEmail } = await import( '@kit/email-templates' ); @@ -133,7 +102,6 @@ const sendEmail = async ({ throw new Error(`Failed to send email, message=${error}`); } }; -}; async function decodeOrderToken(orderToken: string) { const secretKey = process.env.MONTONIO_SECRET_KEY as string; @@ -144,7 +112,6 @@ async function decodeOrderToken(orderToken: string) { if (decoded.paymentStatus !== MONTONIO_PAID_STATUS) { throw new Error('Payment not successful'); - throw new Error('Payment not successful'); } return decoded; @@ -154,12 +121,10 @@ async function getCartByOrderToken(decoded: MontonioOrderToken) { const [, , cartId] = decoded.merchantReferenceDisplay.split(':'); if (!cartId) { throw new Error('Cart ID not found'); - throw new Error('Cart ID not found'); } const cart = await retrieveCart(cartId); if (!cart) { throw new Error('Cart not found'); - throw new Error('Cart not found'); } return cart; } @@ -206,17 +171,12 @@ async function sendAnalysisPackageOrderEmail({ email, analysisPackageOrder, }: { - account: AccountWithParams; - email: string; account: AccountWithParams; email: string; analysisPackageOrder: { partnerLocationName: string; analysisPackageName: string; }; - partnerLocationName: string; - analysisPackageName: string; - }; }) { const { language } = await createI18nServerInstance(); const { analysisPackageName, partnerLocationName } = analysisPackageOrder; @@ -238,15 +198,18 @@ export async function processMontonioCallback(orderToken: string) { const { account } = await loadCurrentUserAccount(); if (!account) { throw new Error('Account not found in context'); - throw new Error('Account not found in context'); } try { const decoded = await decodeOrderToken(orderToken); const cart = await getCartByOrderToken(decoded); - const medusaOrder = await placeOrder(cart.id, { revalidateCacheTags: false }); - const orderedAnalysisElements = await getOrderedAnalysisIds({ medusaOrder }); + const medusaOrder = await placeOrder(cart.id, { + revalidateCacheTags: false, + }); + const orderedAnalysisElements = await getOrderedAnalysisIds({ + medusaOrder, + }); const orderContainsSynlabItems = !!orderedAnalysisElements?.length; @@ -272,7 +235,8 @@ export async function processMontonioCallback(orderToken: string) { const orderResult = await getOrderResultParameters(medusaOrder); - const { medusaOrderId, email, analysisPackageOrder, analysisItemsOrder } = orderResult; + const { medusaOrderId, email, analysisPackageOrder, analysisItemsOrder } = + orderResult; const orderedTtoServices = await getOrderedTtoServices({ medusaOrder }); let bookServiceResults: { @@ -314,7 +278,6 @@ export async function processMontonioCallback(orderToken: string) { } } else { console.error('Missing email to send order result email', orderResult); - console.error('Missing email to send order result email', orderResult); } if (env().isEnabledDispatchOnMontonioCallback && orderContainsSynlabItems) { @@ -334,7 +297,6 @@ export async function processMontonioCallback(orderToken: string) { return { success: true, orderId }; } catch (error) { - console.error('Failed to place order', error); console.error('Failed to place order', error); throw new Error(`Failed to place order, message=${error}`); } diff --git a/app/home/(user)/(dashboard)/cart/montonio-callback/error/page.tsx b/app/home/(user)/(dashboard)/cart/montonio-callback/error/page.tsx index 49dd4c6..c84908a 100644 --- a/app/home/(user)/(dashboard)/cart/montonio-callback/error/page.tsx +++ b/app/home/(user)/(dashboard)/cart/montonio-callback/error/page.tsx @@ -2,20 +2,15 @@ import { use } from 'react'; import Link from 'next/link'; -import { createI18nServerInstance } from '@/lib/i18n/i18n.server'; import { createI18nServerInstance } from '@/lib/i18n/i18n.server'; import { PageBody, PageHeader } from '@/packages/ui/src/makerkit/page'; -import { Button } from '@kit/ui/button'; - +import { toArray } from '@kit/shared/utils'; import { Button } from '@kit/ui/button'; import { Alert, AlertDescription } from '@kit/ui/shadcn/alert'; import { AlertTitle } from '@kit/ui/shadcn/alert'; import { Trans } from '@kit/ui/trans'; -import { FailureReason } from '~/lib/types/connected-online'; -import { toArray } from '~/lib/utils'; - export async function generateMetadata() { const { t } = await createI18nServerInstance(); diff --git a/app/home/(user)/(dashboard)/cart/page.tsx b/app/home/(user)/(dashboard)/cart/page.tsx index 1623229..4a2af1f 100644 --- a/app/home/(user)/(dashboard)/cart/page.tsx +++ b/app/home/(user)/(dashboard)/cart/page.tsx @@ -25,7 +25,6 @@ export async function generateMetadata() { async function CartPage() { const cart = await retrieveCart().catch((error) => { - console.error('Failed to retrieve cart', error); console.error('Failed to retrieve cart', error); return notFound(); }); @@ -75,11 +74,6 @@ async function CartPage() { synlabAnalyses={synlabAnalyses} ttoServiceItems={ttoServiceItems} /> - ); } diff --git a/app/home/(user)/(dashboard)/order/page.tsx b/app/home/(user)/(dashboard)/order/page.tsx index f452e4b..2e9fe68 100644 --- a/app/home/(user)/(dashboard)/order/page.tsx +++ b/app/home/(user)/(dashboard)/order/page.tsx @@ -1,16 +1,11 @@ import React from 'react'; -import React from 'react'; - import { redirect } from 'next/navigation'; import { createI18nServerInstance } from '@/lib/i18n/i18n.server'; import { listProductTypes } from '@lib/data/products'; import { Divider } from '@medusajs/ui'; -import { pathsConfig } from '@kit/shared/config'; -import { Divider } from '@medusajs/ui'; - import { pathsConfig } from '@kit/shared/config'; import { PageBody } from '@kit/ui/makerkit/page'; import { Trans } from '@kit/ui/trans'; @@ -92,7 +87,6 @@ async function OrdersPage() { /> ); - ); })} {analysisOrders.length === 0 && (
diff --git a/app/home/(user)/_components/booking/booking.provider.tsx b/app/home/(user)/_components/booking/booking.provider.tsx index 3ae2f1c..b0c21e1 100644 --- a/app/home/(user)/_components/booking/booking.provider.tsx +++ b/app/home/(user)/_components/booking/booking.provider.tsx @@ -45,6 +45,7 @@ export const BookingProvider: React.FC<{ const updateTimeSlots = async (serviceIds: number[]) => { setIsLoadingTimeSlots(true); try { + console.log('serviceIds', serviceIds, selectedLocationId); const response = await getAvailableTimeSlotsForDisplay( serviceIds, selectedLocationId, diff --git a/app/home/(user)/_components/cart/index.tsx b/app/home/(user)/_components/cart/index.tsx index f13b280..81fbdd4 100644 --- a/app/home/(user)/_components/cart/index.tsx +++ b/app/home/(user)/_components/cart/index.tsx @@ -1,14 +1,4 @@ 'use client'; -'use client'; - -import { useState } from 'react'; - -import { handleNavigateToPayment } from '@/lib/services/medusaCart.service'; -import { formatCurrency } from '@/packages/shared/src/utils'; -import { initiatePaymentSession } from '@lib/data/cart'; -import { StoreCart, StoreCartLineItem } from '@medusajs/types'; -import { Loader2 } from 'lucide-react'; -import { useTranslation } from 'react-i18next'; import { useState } from 'react'; @@ -36,7 +26,6 @@ export default function Cart({ synlabAnalyses, ttoServiceItems, }: { - cart: StoreCart | null; cart: StoreCart | null; synlabAnalyses: StoreCartLineItem[]; ttoServiceItems: EnrichedCartItem[]; @@ -44,12 +33,10 @@ export default function Cart({ const { i18n: { language }, } = useTranslation(); - const { - i18n: { language }, - } = useTranslation(); const [isInitiatingSession, setIsInitiatingSession] = useState(false); - const [unavailableLineItemIds, setUnavailableLineItemIds] = useState() + const [unavailableLineItemIds, setUnavailableLineItemIds] = + useState(); const items = cart?.items ?? []; @@ -57,10 +44,6 @@ export default function Cart({ return (
-
{hasCartItems && ( <> -
-
-

@@ -127,7 +110,6 @@ export default function Cart({

-

{formatCurrency({ value: cart.subtotal, @@ -137,9 +119,6 @@ export default function Cart({

-
-
-

@@ -147,7 +126,6 @@ export default function Cart({

-

{formatCurrency({ value: cart.discount_total, @@ -157,9 +135,6 @@ export default function Cart({

-
-
-

@@ -167,7 +142,6 @@ export default function Cart({

-

{formatCurrency({ value: cart.total, @@ -180,10 +154,8 @@ export default function Cart({ )} -

{IS_DISCOUNT_SHOWN && ( -
@@ -197,7 +169,6 @@ export default function Cart({ )} {isLocationsShown && ( -
@@ -219,14 +190,6 @@ export default function Cart({
-