From 312027b9edb35dddccbb2668b44eac788929405a Mon Sep 17 00:00:00 2001 From: Karli Date: Wed, 10 Sep 2025 00:12:57 +0300 Subject: [PATCH] avoid too many duplicate `requireUserInServerComponent` requests for each page+layout --- .../update-account/_lib/server/update-account.ts | 1 - app/auth/update-account/page.tsx | 7 +------ .../(dashboard)/analysis-results/[id]/page.tsx | 13 +++++++++---- .../(dashboard)/cart/montonio-callback/actions.ts | 2 +- app/home/(user)/(dashboard)/order-analysis/page.tsx | 2 +- app/home/(user)/(dashboard)/page.tsx | 2 +- app/home/(user)/_components/orders/actions.ts | 2 +- .../(user)/_lib/server/load-analysis-packages.ts | 2 +- app/home/(user)/_lib/server/load-user-account.ts | 9 ++++++--- app/home/(user)/settings/page.tsx | 2 +- app/home/(user)/settings/preferences/page.tsx | 7 +------ app/home/layout.tsx | 4 +--- lib/services/medusaCart.service.ts | 12 ++++-------- 13 files changed, 28 insertions(+), 37 deletions(-) diff --git a/app/auth/update-account/_lib/server/update-account.ts b/app/auth/update-account/_lib/server/update-account.ts index ff9a80d..ebead4c 100644 --- a/app/auth/update-account/_lib/server/update-account.ts +++ b/app/auth/update-account/_lib/server/update-account.ts @@ -10,7 +10,6 @@ import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { pathsConfig } from '@kit/shared/config'; - import { UpdateAccountSchema } from '../schemas/update-account.schema'; export const onUpdateAccount = enhanceAction( diff --git a/app/auth/update-account/page.tsx b/app/auth/update-account/page.tsx index a40b13e..6c1030f 100644 --- a/app/auth/update-account/page.tsx +++ b/app/auth/update-account/page.tsx @@ -1,7 +1,6 @@ import { redirect } from 'next/navigation'; import { signOutAction } from '@/lib/actions/sign-out'; -import { getSupabaseServerClient } from '@/packages/supabase/src/clients/server-client'; import { BackButton } from '@kit/shared/components/back-button'; import { MedReportLogo } from '@kit/shared/components/med-report-logo'; @@ -15,12 +14,8 @@ import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user- import { toTitleCase } from '~/lib/utils'; async function UpdateAccount() { - const client = getSupabaseServerClient(); - const account = await loadCurrentUserAccount(); + const { account, user } = await loadCurrentUserAccount(); - const { - data: { user }, - } = await client.auth.getUser(); const isKeycloakUser = user?.app_metadata?.provider === 'keycloak'; if (!user) { diff --git a/app/home/(user)/(dashboard)/analysis-results/[id]/page.tsx b/app/home/(user)/(dashboard)/analysis-results/[id]/page.tsx index 9ce91e8..7422d32 100644 --- a/app/home/(user)/(dashboard)/analysis-results/[id]/page.tsx +++ b/app/home/(user)/(dashboard)/analysis-results/[id]/page.tsx @@ -22,13 +22,14 @@ export default async function AnalysisResultsPage({ id: string; }>; }) { - const account = await loadCurrentUserAccount(); - const { id: analysisOrderId } = await params; - const analysisResponse = await loadUserAnalysis(Number(analysisOrderId)); + const [{ account }, analysisResponse] = await Promise.all([ + loadCurrentUserAccount(), + loadUserAnalysis(Number(analysisOrderId)), + ]); - if (!account?.id || !analysisResponse) { + if (!account?.id) { return null; } @@ -37,6 +38,10 @@ export default async function AnalysisResultsPage({ action: PageViewAction.VIEW_ANALYSIS_RESULTS, }); + if (!analysisResponse) { + return null; + } + return ( <> diff --git a/app/home/(user)/(dashboard)/cart/montonio-callback/actions.ts b/app/home/(user)/(dashboard)/cart/montonio-callback/actions.ts index 6ee8e5d..f705399 100644 --- a/app/home/(user)/(dashboard)/cart/montonio-callback/actions.ts +++ b/app/home/(user)/(dashboard)/cart/montonio-callback/actions.ts @@ -168,7 +168,7 @@ async function sendAnalysisPackageOrderEmail({ } export async function processMontonioCallback(orderToken: string) { - const account = await loadCurrentUserAccount(); + const { account } = await loadCurrentUserAccount(); if (!account) { throw new Error("Account not found in context"); } diff --git a/app/home/(user)/(dashboard)/order-analysis/page.tsx b/app/home/(user)/(dashboard)/order-analysis/page.tsx index 1736dc9..1269bde 100644 --- a/app/home/(user)/(dashboard)/order-analysis/page.tsx +++ b/app/home/(user)/(dashboard)/order-analysis/page.tsx @@ -18,7 +18,7 @@ export const generateMetadata = async () => { }; async function OrderAnalysisPage() { - const account = await loadCurrentUserAccount(); + const { account } = await loadCurrentUserAccount(); if (!account) { throw new Error('Account not found'); } diff --git a/app/home/(user)/(dashboard)/page.tsx b/app/home/(user)/(dashboard)/page.tsx index dc52fc1..ca9fc22 100644 --- a/app/home/(user)/(dashboard)/page.tsx +++ b/app/home/(user)/(dashboard)/page.tsx @@ -26,7 +26,7 @@ export const generateMetadata = async () => { async function UserHomePage() { const client = getSupabaseServerClient(); - const account = await loadCurrentUserAccount(); + const { account } = await loadCurrentUserAccount(); const api = createAccountsApi(client); const bmiThresholds = await api.fetchBmiThresholds(); diff --git a/app/home/(user)/_components/orders/actions.ts b/app/home/(user)/_components/orders/actions.ts index d201507..07bdfbc 100644 --- a/app/home/(user)/_components/orders/actions.ts +++ b/app/home/(user)/_components/orders/actions.ts @@ -4,7 +4,7 @@ import { createPageViewLog, PageViewAction } from "~/lib/services/audit/pageView import { loadCurrentUserAccount } from "../../_lib/server/load-user-account"; export async function logAnalysisResultsNavigateAction(analysisOrderId: string) { - const account = await loadCurrentUserAccount(); + const { account } = await loadCurrentUserAccount(); if (!account) { throw new Error('Account not found'); } diff --git a/app/home/(user)/_lib/server/load-analysis-packages.ts b/app/home/(user)/_lib/server/load-analysis-packages.ts index 597b95f..c4c1a12 100644 --- a/app/home/(user)/_lib/server/load-analysis-packages.ts +++ b/app/home/(user)/_lib/server/load-analysis-packages.ts @@ -140,7 +140,7 @@ async function analysisPackagesWithVariantLoader({ } async function analysisPackagesLoader() { - const account = await loadCurrentUserAccount(); + const { account } = await loadCurrentUserAccount(); if (!account) { throw new Error('Account not found'); } diff --git a/app/home/(user)/_lib/server/load-user-account.ts b/app/home/(user)/_lib/server/load-user-account.ts index 1b324ea..a16108a 100644 --- a/app/home/(user)/_lib/server/load-user-account.ts +++ b/app/home/(user)/_lib/server/load-user-account.ts @@ -16,9 +16,12 @@ export const loadUserAccount = cache(accountLoader); export async function loadCurrentUserAccount() { const user = await requireUserInServerComponent(); - return user?.id - ? await loadUserAccount(user.id) - : null; + const userId = user?.id; + if (!userId) { + return { account: null, user: null }; + } + const account = await loadUserAccount(userId); + return { account, user }; } async function accountLoader(userId: string) { diff --git a/app/home/(user)/settings/page.tsx b/app/home/(user)/settings/page.tsx index c1e81e1..bf65423 100644 --- a/app/home/(user)/settings/page.tsx +++ b/app/home/(user)/settings/page.tsx @@ -17,7 +17,7 @@ export const generateMetadata = async () => { }; async function PersonalAccountSettingsPage() { - const account = await loadCurrentUserAccount(); + const { account } = await loadCurrentUserAccount(); return (
diff --git a/app/home/(user)/settings/preferences/page.tsx b/app/home/(user)/settings/preferences/page.tsx index ec55fd6..4c0faeb 100644 --- a/app/home/(user)/settings/preferences/page.tsx +++ b/app/home/(user)/settings/preferences/page.tsx @@ -1,13 +1,9 @@ -import { CardTitle } from '@kit/ui/card'; -import { LanguageSelector } from '@kit/ui/language-selector'; -import { Trans } from '@kit/ui/trans'; - import { loadCurrentUserAccount } from '../../_lib/server/load-user-account'; import AccountPreferencesForm from '../_components/account-preferences-form'; import SettingsSectionHeader from '../_components/settings-section-header'; export default async function PreferencesPage() { - const account = await loadCurrentUserAccount(); + const { account } = await loadCurrentUserAccount(); return (
@@ -16,7 +12,6 @@ export default async function PreferencesPage() { titleKey="account:preferencesTabLabel" descriptionKey="account:preferencesTabDescription" /> -
diff --git a/app/home/layout.tsx b/app/home/layout.tsx index c483aec..088a68c 100644 --- a/app/home/layout.tsx +++ b/app/home/layout.tsx @@ -1,4 +1,3 @@ -import { requireUserInServerComponent } from '@/lib/server/require-user-in-server-component'; import { createAccountsApi } from '@/packages/features/accounts/src/server/api'; import { getSupabaseServerClient } from '@/packages/supabase/src/clients/server-client'; @@ -12,8 +11,7 @@ export default async function HomeLayout({ }) { const client = getSupabaseServerClient(); - const user = await requireUserInServerComponent(); - const account = await loadCurrentUserAccount(); + const { account, user } = await loadCurrentUserAccount(); const api = createAccountsApi(client); const hasAccountTeamMembership = await api.hasAccountTeamMembership( diff --git a/lib/services/medusaCart.service.ts b/lib/services/medusaCart.service.ts index a416e04..c33ed0d 100644 --- a/lib/services/medusaCart.service.ts +++ b/lib/services/medusaCart.service.ts @@ -38,8 +38,7 @@ export async function handleAddToCart({ countryCode: string; }) { const supabase = getSupabaseServerClient(); - const user = await requireUserInServerComponent(); - const account = await loadCurrentUserAccount(); + const { account, user } = await loadCurrentUserAccount(); if (!account) { throw new Error('Account not found'); } @@ -70,8 +69,7 @@ export async function handleDeleteCartItem({ lineId }: { lineId: string }) { const supabase = getSupabaseServerClient(); const cartId = await getCartId(); - const user = await requireUserInServerComponent(); - const account = await loadCurrentUserAccount(); + const { account, user } = await loadCurrentUserAccount(); if (!account) { throw new Error('Account not found'); } @@ -96,8 +94,7 @@ export async function handleNavigateToPayment({ paymentSessionId: string; }) { const supabase = getSupabaseServerClient(); - const user = await requireUserInServerComponent(); - const account = await loadCurrentUserAccount(); + const { account, user } = await loadCurrentUserAccount(); if (!account) { throw new Error('Account not found'); } @@ -137,8 +134,7 @@ export async function handleLineItemTimeout({ lineItem: StoreCartLineItem; }) { const supabase = getSupabaseServerClient(); - const user = await requireUserInServerComponent(); - const account = await loadCurrentUserAccount(); + const { account, user } = await loadCurrentUserAccount(); if (!account) { throw new Error('Account not found'); }