diff options
| author | Frank <[email protected]> | 2026-01-05 10:16:45 -0500 |
|---|---|---|
| committer | Frank <[email protected]> | 2026-01-05 10:16:47 -0500 |
| commit | 7f870cc9d4d93ca889698ad5780c90a8ab057242 (patch) | |
| tree | 9417ddca1654154c343e55cb13d7b7c514fd2bed | |
| parent | 2cb3b0484ba90cd6b8d434cebff00816f4893963 (diff) | |
| download | opencode-7f870cc9d4d93ca889698ad5780c90a8ab057242.tar.gz opencode-7f870cc9d4d93ca889698ad5780c90a8ab057242.zip | |
wip: zen
| -rw-r--r-- | packages/console/app/src/routes/zen/util/handler.ts | 73 |
1 files changed, 36 insertions, 37 deletions
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index 22f887567..ac487a341 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -561,53 +561,52 @@ export async function handler( if (!authInfo) return const cost = authInfo.isFree || authInfo.provider?.credentials ? 0 : centsToMicroCents(totalCostInCent) - await Database.transaction(async (tx) => { - await tx.insert(UsageTable).values({ - workspaceID: authInfo.workspaceID, - id: Identifier.create("usage"), - model: modelInfo.id, - provider: providerInfo.id, - inputTokens, - outputTokens, - reasoningTokens, - cacheReadTokens, - cacheWrite5mTokens, - cacheWrite1hTokens, - cost, - keyID: authInfo.apiKeyId, - }) - await tx - .update(BillingTable) - .set({ - balance: sql`${BillingTable.balance} - ${cost}`, - monthlyUsage: sql` + await Database.use((db) => + Promise.all([ + db.insert(UsageTable).values({ + workspaceID: authInfo.workspaceID, + id: Identifier.create("usage"), + model: modelInfo.id, + provider: providerInfo.id, + inputTokens, + outputTokens, + reasoningTokens, + cacheReadTokens, + cacheWrite5mTokens, + cacheWrite1hTokens, + cost, + keyID: authInfo.apiKeyId, + }), + db + .update(BillingTable) + .set({ + balance: sql`${BillingTable.balance} - ${cost}`, + monthlyUsage: sql` CASE WHEN MONTH(${BillingTable.timeMonthlyUsageUpdated}) = MONTH(now()) AND YEAR(${BillingTable.timeMonthlyUsageUpdated}) = YEAR(now()) THEN ${BillingTable.monthlyUsage} + ${cost} ELSE ${cost} END `, - timeMonthlyUsageUpdated: sql`now()`, - }) - .where(eq(BillingTable.workspaceID, authInfo.workspaceID)) - await tx - .update(UserTable) - .set({ - monthlyUsage: sql` + timeMonthlyUsageUpdated: sql`now()`, + }) + .where(eq(BillingTable.workspaceID, authInfo.workspaceID)), + db + .update(UserTable) + .set({ + monthlyUsage: sql` CASE WHEN MONTH(${UserTable.timeMonthlyUsageUpdated}) = MONTH(now()) AND YEAR(${UserTable.timeMonthlyUsageUpdated}) = YEAR(now()) THEN ${UserTable.monthlyUsage} + ${cost} ELSE ${cost} END `, - timeMonthlyUsageUpdated: sql`now()`, - }) - .where(and(eq(UserTable.workspaceID, authInfo.workspaceID), eq(UserTable.id, authInfo.user.id))) - }) - - await Database.use((tx) => - tx - .update(KeyTable) - .set({ timeUsed: sql`now()` }) - .where(and(eq(KeyTable.workspaceID, authInfo.workspaceID), eq(KeyTable.id, authInfo.apiKeyId))), + timeMonthlyUsageUpdated: sql`now()`, + }) + .where(and(eq(UserTable.workspaceID, authInfo.workspaceID), eq(UserTable.id, authInfo.user.id))), + db + .update(KeyTable) + .set({ timeUsed: sql`now()` }) + .where(and(eq(KeyTable.workspaceID, authInfo.workspaceID), eq(KeyTable.id, authInfo.apiKeyId))), + ]), ) return { costInMicroCents: cost } |
