File size: 5,565 Bytes
69b897d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/**
 * 测试 API 响应中的账号数据
 */

const redis = require('../src/models/redis')
const claudeAccountService = require('../src/services/claudeAccountService')
const claudeConsoleAccountService = require('../src/services/claudeConsoleAccountService')
const accountGroupService = require('../src/services/accountGroupService')

async function testApiResponse() {
  console.log('🔍 测试 API 响应数据...\n')

  try {
    // 确保 Redis 已连接
    await redis.connect()

    // 1. 测试 Claude OAuth 账号服务
    console.log('📋 测试 Claude OAuth 账号服务...')
    const claudeAccounts = await claudeAccountService.getAllAccounts()
    console.log(`找到 ${claudeAccounts.length} 个 Claude OAuth 账号`)

    // 检查前3个账号的数据结构
    console.log('\n账号数据结构示例:')
    claudeAccounts.slice(0, 3).forEach((acc) => {
      console.log(`\n账号: ${acc.name}`)
      console.log(`  - ID: ${acc.id}`)
      console.log(`  - accountType: ${acc.accountType}`)
      console.log(`  - platform: ${acc.platform}`)
      console.log(`  - status: ${acc.status}`)
      console.log(`  - isActive: ${acc.isActive}`)
    })

    // 统计专属账号
    const claudeDedicated = claudeAccounts.filter((a) => a.accountType === 'dedicated')
    const claudeGroup = claudeAccounts.filter((a) => a.accountType === 'group')

    console.log('\n统计结果:')
    console.log(`  - 专属账号: ${claudeDedicated.length} 个`)
    console.log(`  - 分组账号: ${claudeGroup.length} 个`)

    // 2. 测试 Claude Console 账号服务
    console.log('\n\n📋 测试 Claude Console 账号服务...')
    const consoleAccounts = await claudeConsoleAccountService.getAllAccounts()
    console.log(`找到 ${consoleAccounts.length} 个 Claude Console 账号`)

    // 检查前3个账号的数据结构
    console.log('\n账号数据结构示例:')
    consoleAccounts.slice(0, 3).forEach((acc) => {
      console.log(`\n账号: ${acc.name}`)
      console.log(`  - ID: ${acc.id}`)
      console.log(`  - accountType: ${acc.accountType}`)
      console.log(`  - platform: ${acc.platform}`)
      console.log(`  - status: ${acc.status}`)
      console.log(`  - isActive: ${acc.isActive}`)
    })

    // 统计专属账号
    const consoleDedicated = consoleAccounts.filter((a) => a.accountType === 'dedicated')
    const consoleGroup = consoleAccounts.filter((a) => a.accountType === 'group')

    console.log('\n统计结果:')
    console.log(`  - 专属账号: ${consoleDedicated.length} 个`)
    console.log(`  - 分组账号: ${consoleGroup.length} 个`)

    // 3. 测试账号分组服务
    console.log('\n\n📋 测试账号分组服务...')
    const groups = await accountGroupService.getAllGroups()
    console.log(`找到 ${groups.length} 个账号分组`)

    // 显示分组信息
    groups.forEach((group) => {
      console.log(`\n分组: ${group.name}`)
      console.log(`  - ID: ${group.id}`)
      console.log(`  - platform: ${group.platform}`)
      console.log(`  - memberCount: ${group.memberCount}`)
    })

    // 4. 验证结果
    console.log('\n\n📊 验证结果:')

    // 检查 platform 字段
    const claudeWithPlatform = claudeAccounts.filter((a) => a.platform === 'claude')
    const consoleWithPlatform = consoleAccounts.filter((a) => a.platform === 'claude-console')

    if (claudeWithPlatform.length === claudeAccounts.length) {
      console.log('✅ 所有 Claude OAuth 账号都有正确的 platform 字段')
    } else {
      console.log(
        `⚠️  只有 ${claudeWithPlatform.length}/${claudeAccounts.length} 个 Claude OAuth 账号有正确的 platform 字段`
      )
    }

    if (consoleWithPlatform.length === consoleAccounts.length) {
      console.log('✅ 所有 Claude Console 账号都有正确的 platform 字段')
    } else {
      console.log(
        `⚠️  只有 ${consoleWithPlatform.length}/${consoleAccounts.length} 个 Claude Console 账号有正确的 platform 字段`
      )
    }

    // 总结
    const totalDedicated = claudeDedicated.length + consoleDedicated.length
    const totalGroup = claudeGroup.length + consoleGroup.length
    const totalGroups = groups.filter((g) => g.platform === 'claude').length

    console.log('\n📈 总结:')
    console.log(
      `- 专属账号总数: ${totalDedicated} 个 (Claude OAuth: ${claudeDedicated.length}, Console: ${consoleDedicated.length})`
    )
    console.log(
      `- 分组账号总数: ${totalGroup} 个 (Claude OAuth: ${claudeGroup.length}, Console: ${consoleGroup.length})`
    )
    console.log(`- 账号分组总数: ${totalGroups} 个`)

    if (totalDedicated + totalGroups > 0) {
      console.log('\n✅ 前端下拉框应该能够显示:')
      if (totalGroups > 0) {
        console.log('   - 调度分组')
      }
      if (claudeDedicated.length > 0) {
        console.log('   - Claude OAuth 专属账号 (仅 dedicated 类型)')
      }
      if (consoleDedicated.length > 0) {
        console.log('   - Claude Console 专属账号 (仅 dedicated 类型)')
      }
    } else {
      console.log('\n⚠️  没有找到任何专属账号或分组,请检查账号配置')
    }

    console.log('\n💡 说明:')
    console.log('- 专属账号下拉框只显示 accountType="dedicated" 的账号')
    console.log('- accountType="group" 的账号通过分组调度,不在专属账号中显示')
  } catch (error) {
    console.error('❌ 测试失败:', error)
    console.error(error.stack)
  } finally {
    process.exit(0)
  }
}

testApiResponse()