chore: enhance error handling and optimize database queries in user credit functions
This commit is contained in:
parent
d86f89e3de
commit
7c0e6a5131
@ -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> {
|
||||||
|
try {
|
||||||
const db = await getDb();
|
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
|
const record = await db
|
||||||
.select()
|
.select({ currentCredits: userCredit.currentCredits })
|
||||||
.from(userCredit)
|
.from(userCredit)
|
||||||
.where(eq(userCredit.userId, userId))
|
.where(eq(userCredit.userId, userId))
|
||||||
.limit(1);
|
.limit(1);
|
||||||
|
|
||||||
return record[0]?.currentCredits || 0;
|
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) {
|
||||||
|
try {
|
||||||
const db = await getDb();
|
const db = await getDb();
|
||||||
await db
|
await db
|
||||||
.update(userCredit)
|
.update(userCredit)
|
||||||
.set({ currentCredits: credits, updatedAt: new Date() })
|
.set({ currentCredits: credits, updatedAt: new Date() })
|
||||||
.where(eq(userCredit.userId, userId));
|
.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) {
|
||||||
|
try {
|
||||||
const db = await getDb();
|
const db = await getDb();
|
||||||
await db
|
await db
|
||||||
.update(userCredit)
|
.update(userCredit)
|
||||||
.set({ lastRefreshAt: date, updatedAt: new Date() })
|
.set({ lastRefreshAt: date, updatedAt: new Date() })
|
||||||
.where(eq(userCredit.userId, userId));
|
.where(eq(userCredit.userId, userId));
|
||||||
|
} catch (error) {
|
||||||
|
console.error('updateUserLastRefreshAt, error:', error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user