fix: include deletion metadata in user API keys response

- 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 <noreply@anthropic.com>
This commit is contained in:
Feng Yue
2025-08-14 16:02:11 +08:00
parent 65620a4cde
commit c80446ae98
3 changed files with 24 additions and 7 deletions

View File

@@ -167,7 +167,12 @@ router.get('/api-keys', authenticateUser, async (req, res) => {
// 不返回实际的key值只返回前缀和后几位 // 不返回实际的key值只返回前缀和后几位
keyPreview: key.key keyPreview: key.key
? `${key.key.substring(0, 8)}...${key.key.substring(key.key.length - 4)}` ? `${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
} }
}) })

View File

@@ -550,7 +550,12 @@ class ApiKeyService {
dailyCostLimit: parseFloat(key.dailyCostLimit || 0), dailyCostLimit: parseFloat(key.dailyCostLimit || 0),
userId: key.userId, userId: key.userId,
userUsername: key.userUsername, 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
}) })
} }

View File

@@ -367,14 +367,21 @@ const loadUserProfile = async () => {
const loadApiKeysStats = async () => { const loadApiKeysStats = async () => {
try { try {
const allApiKeys = await userStore.getUserApiKeys(true) // Include deleted keys 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 (key) => !(key.isDeleted === 'true' || key.deletedAt) && key.isActive
).length )
const deletedCount = allApiKeys.filter( const deletedKeys = allApiKeys.filter(
(key) => key.isDeleted === 'true' || key.deletedAt (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) { } catch (error) {
console.error('Failed to load API keys stats:', error) console.error('Failed to load API keys stats:', error)
apiKeysStats.value = { active: 0, deleted: 0 } apiKeysStats.value = { active: 0, deleted: 0 }