From c80446ae9855dbda4303156d24a9fdde8bccef28 Mon Sep 17 00:00:00 2001 From: Feng Yue <2525275@gmail.com> Date: Thu, 14 Aug 2025 16:02:11 +0800 Subject: [PATCH] fix: include deletion metadata in user API keys response MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add isDeleted, deletedAt, deletedBy, deletedByType fields to getUserApiKeys service method - Include deletion fields in user routes API keys response - Add debug logging to dashboard component to troubleshoot deleted keys count - Ensure frontend can properly identify and count deleted API keys This fixes the issue where deleted API keys count was always showing 0 instead of the actual number of deleted keys. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/routes/userRoutes.js | 7 ++++++- src/services/apiKeyService.js | 7 ++++++- web/admin-spa/src/views/UserDashboardView.vue | 17 ++++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/routes/userRoutes.js b/src/routes/userRoutes.js index c7379590..58b0c1bc 100644 --- a/src/routes/userRoutes.js +++ b/src/routes/userRoutes.js @@ -167,7 +167,12 @@ router.get('/api-keys', authenticateUser, async (req, res) => { // 不返回实际的key值,只返回前缀和后几位 keyPreview: key.key ? `${key.key.substring(0, 8)}...${key.key.substring(key.key.length - 4)}` - : null + : null, + // Include deletion fields for deleted keys + isDeleted: key.isDeleted, + deletedAt: key.deletedAt, + deletedBy: key.deletedBy, + deletedByType: key.deletedByType } }) diff --git a/src/services/apiKeyService.js b/src/services/apiKeyService.js index feea7f8c..64f1de6a 100644 --- a/src/services/apiKeyService.js +++ b/src/services/apiKeyService.js @@ -550,7 +550,12 @@ class ApiKeyService { dailyCostLimit: parseFloat(key.dailyCostLimit || 0), userId: key.userId, userUsername: key.userUsername, - createdBy: key.createdBy + createdBy: key.createdBy, + // Include deletion fields for deleted keys + isDeleted: key.isDeleted, + deletedAt: key.deletedAt, + deletedBy: key.deletedBy, + deletedByType: key.deletedByType }) } diff --git a/web/admin-spa/src/views/UserDashboardView.vue b/web/admin-spa/src/views/UserDashboardView.vue index 974d3342..0d77ebda 100644 --- a/web/admin-spa/src/views/UserDashboardView.vue +++ b/web/admin-spa/src/views/UserDashboardView.vue @@ -367,14 +367,21 @@ const loadUserProfile = async () => { const loadApiKeysStats = async () => { try { const allApiKeys = await userStore.getUserApiKeys(true) // Include deleted keys - const activeCount = allApiKeys.filter( + console.log('All API Keys received:', allApiKeys) + + const activeKeys = allApiKeys.filter( (key) => !(key.isDeleted === 'true' || key.deletedAt) && key.isActive - ).length - const deletedCount = allApiKeys.filter( + ) + const deletedKeys = allApiKeys.filter( (key) => key.isDeleted === 'true' || key.deletedAt - ).length + ) + + console.log('Active keys:', activeKeys) + console.log('Deleted keys:', deletedKeys) + console.log('Active count:', activeKeys.length) + console.log('Deleted count:', deletedKeys.length) - apiKeysStats.value = { active: activeCount, deleted: deletedCount } + apiKeysStats.value = { active: activeKeys.length, deleted: deletedKeys.length } } catch (error) { console.error('Failed to load API keys stats:', error) apiKeysStats.value = { active: 0, deleted: 0 }