diff --git a/src/routes/userRoutes.js b/src/routes/userRoutes.js index 5ec1fdbd..a1478de4 100644 --- a/src/routes/userRoutes.js +++ b/src/routes/userRoutes.js @@ -137,24 +137,43 @@ router.get('/api-keys', authenticateUser, async (req, res) => { try { const apiKeys = await apiKeyService.getUserApiKeys(req.user.id) - // 移除敏感信息 - const safeApiKeys = apiKeys.map((key) => ({ - id: key.id, - name: key.name, - description: key.description, - tokenLimit: key.tokenLimit, - isActive: key.isActive, - createdAt: key.createdAt, - lastUsedAt: key.lastUsedAt, - expiresAt: key.expiresAt, - usage: key.usage, - dailyCost: key.dailyCost, - dailyCostLimit: key.dailyCostLimit, - // 不返回实际的key值,只返回前缀和后几位 - keyPreview: key.key - ? `${key.key.substring(0, 8)}...${key.key.substring(key.key.length - 4)}` - : null - })) + // 移除敏感信息并格式化usage数据 + const safeApiKeys = apiKeys.map((key) => { + // Flatten usage structure for frontend compatibility + let flatUsage = { + requests: 0, + inputTokens: 0, + outputTokens: 0, + totalCost: 0 + } + + if (key.usage && key.usage.total) { + flatUsage = { + requests: key.usage.total.requests || 0, + inputTokens: key.usage.total.inputTokens || 0, + outputTokens: key.usage.total.outputTokens || 0, + totalCost: key.totalCost || 0 + } + } + + return { + id: key.id, + name: key.name, + description: key.description, + tokenLimit: key.tokenLimit, + isActive: key.isActive, + createdAt: key.createdAt, + lastUsedAt: key.lastUsedAt, + expiresAt: key.expiresAt, + usage: flatUsage, + dailyCost: key.dailyCost, + dailyCostLimit: key.dailyCostLimit, + // 不返回实际的key值,只返回前缀和后几位 + keyPreview: key.key + ? `${key.key.substring(0, 8)}...${key.key.substring(key.key.length - 4)}` + : null + } + }) res.json({ success: true, diff --git a/src/services/apiKeyService.js b/src/services/apiKeyService.js index 15b257c4..77751f22 100644 --- a/src/services/apiKeyService.js +++ b/src/services/apiKeyService.js @@ -500,16 +500,6 @@ class ApiKeyService { const dailyCost = (await redis.getDailyCost(key.id)) || 0 const costStats = await redis.getCostStats(key.id) - logger.debug(`🔍 getUserApiKeys: Key ${key.id} (${key.name}) usage:`, { - keyId: key.id, - keyName: key.name, - userId: key.userId, - rawUsage: usage, - dailyCost, - costStats, - lastUsedAt: key.lastUsedAt - }) - userKeysWithUsage.push({ id: key.id, name: key.name, @@ -673,11 +663,12 @@ class ApiKeyService { // 汇总所有API Key的统计数据 for (const keyId of keyIds) { const keyStats = await redis.getUsageStats(keyId) - if (keyStats) { - stats.totalRequests += keyStats.requests || 0 - stats.totalInputTokens += keyStats.inputTokens || 0 - stats.totalOutputTokens += keyStats.outputTokens || 0 - stats.totalCost += keyStats.totalCost || 0 + const costStats = await redis.getCostStats(keyId) + if (keyStats && keyStats.total) { + stats.totalRequests += keyStats.total.requests || 0 + stats.totalInputTokens += keyStats.total.inputTokens || 0 + stats.totalOutputTokens += keyStats.total.outputTokens || 0 + stats.totalCost += costStats?.total || 0 } } diff --git a/src/services/userService.js b/src/services/userService.js index fd971d72..e03761c7 100644 --- a/src/services/userService.js +++ b/src/services/userService.js @@ -150,10 +150,6 @@ class UserService { } for (const apiKey of userApiKeys) { - logger.debug(`🔍 Processing API key ${apiKey.id} (${apiKey.name}) for user ${userId}:`, { - hasUsage: !!apiKey.usage, - usage: apiKey.usage - }) if (apiKey.usage && apiKey.usage.total) { totalUsage.requests += apiKey.usage.total.requests || 0 totalUsage.inputTokens += apiKey.usage.total.inputTokens || 0