From 69143ace471421bc3fd65e24968226b6e71a8566 Mon Sep 17 00:00:00 2001 From: javayhu Date: Sun, 24 Aug 2025 19:55:53 +0800 Subject: [PATCH] feat: implement error handling in getCreditBalanceAction and add CreditsTest component for credit consumption testing --- src/actions/get-credit-balance.ts | 17 ++++++++++++++--- .../[locale]/(marketing)/(pages)/about/page.tsx | 8 -------- .../[locale]/(marketing)/(pages)/test/page.tsx | 13 +++++++++++++ src/components/{dev => test}/credits-test.tsx | 0 src/hooks/use-credits.ts | 4 +++- 5 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 src/app/[locale]/(marketing)/(pages)/test/page.tsx rename src/components/{dev => test}/credits-test.tsx (100%) diff --git a/src/actions/get-credit-balance.ts b/src/actions/get-credit-balance.ts index c2137bd..cbc33dc 100644 --- a/src/actions/get-credit-balance.ts +++ b/src/actions/get-credit-balance.ts @@ -9,8 +9,19 @@ import { userActionClient } from '@/lib/safe-action'; */ export const getCreditBalanceAction = userActionClient.action( async ({ ctx }) => { - const currentUser = (ctx as { user: User }).user; - const credits = await getUserCredits(currentUser.id); - return { success: true, credits }; + try { + const currentUser = (ctx as { user: User }).user; + const credits = await getUserCredits(currentUser.id); + return { success: true, credits }; + } catch (error) { + console.error('get credit balance error:', error); + return { + success: false, + error: + error instanceof Error + ? error.message + : 'Failed to fetch credit balance', + }; + } } ); diff --git a/src/app/[locale]/(marketing)/(pages)/about/page.tsx b/src/app/[locale]/(marketing)/(pages)/about/page.tsx index 3c3d7f6..df3ff7b 100644 --- a/src/app/[locale]/(marketing)/(pages)/about/page.tsx +++ b/src/app/[locale]/(marketing)/(pages)/about/page.tsx @@ -1,6 +1,4 @@ -import { CreditsTest } from '@/components/dev/credits-test'; import Container from '@/components/layout/container'; -import { BlurFadeDemo } from '@/components/magicui/example/blur-fade-example'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { Button, buttonVariants } from '@/components/ui/button'; import { websiteConfig } from '@/config/website'; @@ -99,12 +97,6 @@ export default async function AboutPage() { - - {/* image section */} - {/* */} - - {/* credits test */} - {/* */} ); diff --git a/src/app/[locale]/(marketing)/(pages)/test/page.tsx b/src/app/[locale]/(marketing)/(pages)/test/page.tsx new file mode 100644 index 0000000..8d5a2a6 --- /dev/null +++ b/src/app/[locale]/(marketing)/(pages)/test/page.tsx @@ -0,0 +1,13 @@ +import Container from '@/components/layout/container'; +import { CreditsTest } from '@/components/test/credits-test'; + +export default async function TestPage() { + return ( + +
+ {/* credits test */} + +
+
+ ); +} diff --git a/src/components/dev/credits-test.tsx b/src/components/test/credits-test.tsx similarity index 100% rename from src/components/dev/credits-test.tsx rename to src/components/test/credits-test.tsx diff --git a/src/hooks/use-credits.ts b/src/hooks/use-credits.ts index 136972f..2ccae9e 100644 --- a/src/hooks/use-credits.ts +++ b/src/hooks/use-credits.ts @@ -31,7 +31,9 @@ export function useCreditBalance() { console.log('Fetching credit balance...'); const result = await getCreditBalanceAction(); if (!result?.data?.success) { - throw new Error('Failed to fetch credit balance'); + throw new Error( + result?.data?.error || 'Failed to fetch credit balance' + ); } console.log('Credit balance fetched:', result.data.credits); return result.data.credits || 0;