From 9db52f352b2a51e6295b64b803fe23c9b541f08d Mon Sep 17 00:00:00 2001 From: javayhu Date: Mon, 18 Aug 2025 00:36:42 +0800 Subject: [PATCH 1/4] refactor: adjust spacing in credits page layout and comment out button in credits balance card --- src/components/settings/credits/credits-balance-card.tsx | 6 +++--- src/components/settings/credits/credits-page-client.tsx | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/settings/credits/credits-balance-card.tsx b/src/components/settings/credits/credits-balance-card.tsx index 2373ed5..635c365 100644 --- a/src/components/settings/credits/credits-balance-card.tsx +++ b/src/components/settings/credits/credits-balance-card.tsx @@ -227,12 +227,12 @@ export default function CreditsBalanceCard() { )} - - + */} ); diff --git a/src/components/settings/credits/credits-page-client.tsx b/src/components/settings/credits/credits-page-client.tsx index 3b35756..dc5172f 100644 --- a/src/components/settings/credits/credits-page-client.tsx +++ b/src/components/settings/credits/credits-page-client.tsx @@ -22,7 +22,7 @@ export default function CreditsPageClient() { - + {/* Credits Balance Card */}
@@ -34,7 +34,7 @@ export default function CreditsPageClient() {
- + {/* Credit Transactions */} From 9800b1d8424482f11ce964f5080872b20233e1fe Mon Sep 17 00:00:00 2001 From: javayhu Date: Mon, 18 Aug 2025 00:42:53 +0800 Subject: [PATCH 2/4] refactor: update CardFooter in credits balance card component --- src/components/settings/credits/credits-balance-card.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/settings/credits/credits-balance-card.tsx b/src/components/settings/credits/credits-balance-card.tsx index 635c365..0d3b1b4 100644 --- a/src/components/settings/credits/credits-balance-card.tsx +++ b/src/components/settings/credits/credits-balance-card.tsx @@ -15,7 +15,7 @@ import { websiteConfig } from '@/config/website'; import { useCredits } from '@/hooks/use-credits'; import { useMounted } from '@/hooks/use-mounted'; import { usePayment } from '@/hooks/use-payment'; -import { LocaleLink, useLocaleRouter } from '@/i18n/navigation'; +import { useLocaleRouter } from '@/i18n/navigation'; import { formatDate } from '@/lib/formatter'; import { cn } from '@/lib/utils'; import { Routes } from '@/routes'; @@ -135,9 +135,7 @@ export default function CreditsBalanceCard() { - - - + {/* show nothing */} ); } From d86f89e3defe9972cd6d076629abaf1947b5313b Mon Sep 17 00:00:00 2001 From: javayhu Date: Mon, 18 Aug 2025 00:45:51 +0800 Subject: [PATCH 3/4] fix: update URL routing in credits balance card component after successful payment --- src/components/settings/credits/credits-balance-card.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings/credits/credits-balance-card.tsx b/src/components/settings/credits/credits-balance-card.tsx index 0d3b1b4..c7bc5f0 100644 --- a/src/components/settings/credits/credits-balance-card.tsx +++ b/src/components/settings/credits/credits-balance-card.tsx @@ -104,7 +104,7 @@ export default function CreditsBalanceCard() { // Clean up URL parameters const url = new URL(window.location.href); url.searchParams.delete('credits_session_id'); - localeRouter.replace(Routes.SettingsBilling + url.search); + localeRouter.replace(Routes.SettingsCredits + url.search); } }, [searchParams, localeRouter, fetchCredits, fetchCreditStats, t]); From 7c0e6a51312dda64a0df1ba747c165dd5c4550ef Mon Sep 17 00:00:00 2001 From: javayhu Date: Mon, 18 Aug 2025 00:58:46 +0800 Subject: [PATCH 4/4] chore: enhance error handling and optimize database queries in user credit functions --- src/credits/credits.ts | 52 ++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/src/credits/credits.ts b/src/credits/credits.ts index 7992c6a..d82b0a0 100644 --- a/src/credits/credits.ts +++ b/src/credits/credits.ts @@ -13,13 +13,23 @@ import { CREDIT_TRANSACTION_TYPE } from './types'; * @returns User's current credit balance */ export async function getUserCredits(userId: string): Promise { - const db = await getDb(); - const record = await db - .select() - .from(userCredit) - .where(eq(userCredit.userId, userId)) - .limit(1); - return record[0]?.currentCredits || 0; + try { + const db = await getDb(); + + // Optimized query: only select the needed field + // This can benefit from covering index if we add one later + const record = await db + .select({ currentCredits: userCredit.currentCredits }) + .from(userCredit) + .where(eq(userCredit.userId, userId)) + .limit(1); + + return record[0]?.currentCredits || 0; + } catch (error) { + console.error('getUserCredits, error:', error); + // Return 0 on error to prevent UI from breaking + return 0; + } } /** @@ -28,11 +38,15 @@ export async function getUserCredits(userId: string): Promise { * @param credits - New credit balance */ export async function updateUserCredits(userId: string, credits: number) { - const db = await getDb(); - await db - .update(userCredit) - .set({ currentCredits: credits, updatedAt: new Date() }) - .where(eq(userCredit.userId, userId)); + try { + const db = await getDb(); + await db + .update(userCredit) + .set({ currentCredits: credits, updatedAt: new Date() }) + .where(eq(userCredit.userId, userId)); + } catch (error) { + console.error('updateUserCredits, error:', error); + } } /** @@ -41,11 +55,15 @@ export async function updateUserCredits(userId: string, credits: number) { * @param date - Last refresh time */ export async function updateUserLastRefreshAt(userId: string, date: Date) { - const db = await getDb(); - await db - .update(userCredit) - .set({ lastRefreshAt: date, updatedAt: new Date() }) - .where(eq(userCredit.userId, userId)); + try { + const db = await getDb(); + await db + .update(userCredit) + .set({ lastRefreshAt: date, updatedAt: new Date() }) + .where(eq(userCredit.userId, userId)); + } catch (error) { + console.error('updateUserLastRefreshAt, error:', error); + } } /**