chore: enhance error handling and optimize database queries in user credit functions

This commit is contained in:
javayhu 2025-08-18 00:58:46 +08:00
parent d86f89e3de
commit 7c0e6a5131

View File

@ -13,13 +13,23 @@ import { CREDIT_TRANSACTION_TYPE } from './types';
* @returns User's current credit balance * @returns User's current credit balance
*/ */
export async function getUserCredits(userId: string): Promise<number> { export async function getUserCredits(userId: string): Promise<number> {
const db = await getDb(); try {
const record = await db const db = await getDb();
.select()
.from(userCredit) // Optimized query: only select the needed field
.where(eq(userCredit.userId, userId)) // This can benefit from covering index if we add one later
.limit(1); const record = await db
return record[0]?.currentCredits || 0; .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<number> {
* @param credits - New credit balance * @param credits - New credit balance
*/ */
export async function updateUserCredits(userId: string, credits: number) { export async function updateUserCredits(userId: string, credits: number) {
const db = await getDb(); try {
await db const db = await getDb();
.update(userCredit) await db
.set({ currentCredits: credits, updatedAt: new Date() }) .update(userCredit)
.where(eq(userCredit.userId, userId)); .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 * @param date - Last refresh time
*/ */
export async function updateUserLastRefreshAt(userId: string, date: Date) { export async function updateUserLastRefreshAt(userId: string, date: Date) {
const db = await getDb(); try {
await db const db = await getDb();
.update(userCredit) await db
.set({ lastRefreshAt: date, updatedAt: new Date() }) .update(userCredit)
.where(eq(userCredit.userId, userId)); .set({ lastRefreshAt: date, updatedAt: new Date() })
.where(eq(userCredit.userId, userId));
} catch (error) {
console.error('updateUserLastRefreshAt, error:', error);
}
} }
/** /**