import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { api, supabase } from "@/db/supabase"; import { Database, CheckCircle, AlertTriangle, RefreshCw } from "lucide-react"; import { toast } from "sonner"; export default function DatabaseTest() { const [testing, setTesting] = useState(false); const [results, setResults] = useState(null); const testConnection = async (): Promise => { try { const { data, error } = await supabase .from('profiles') .select('count', { count: 'exact', head: true }); if (error) { console.error('Database connection test failed:', error); return false; } console.log('Database connection successful'); return true; } catch (error) { console.error('Database connection error:', error); return false; } }; const runDatabaseTest = async () => { setTesting(true); const testResults: any = { connection: false, tables: {}, sampleData: {}, errors: [] }; try { // 测试基本连接 console.log('测试数据库连接...'); testResults.connection = await testConnection(); // 测试各个表 const tables = ['profiles', 'projects', 'audit_tasks', 'audit_issues', 'instant_analyses']; for (const table of tables) { try { console.log(`测试表: ${table}`); const { data, error, count } = await supabase .from(table) .select('*', { count: 'exact', head: true }); testResults.tables[table] = { accessible: !error, count: count || 0, error: error?.message }; if (error) { testResults.errors.push(`${table}: ${error.message}`); } } catch (err) { testResults.tables[table] = { accessible: false, count: 0, error: (err as Error).message }; testResults.errors.push(`${table}: ${(err as Error).message}`); } } // 测试示例数据获取 try { console.log('测试项目数据获取...'); const projects = await api.getProjects(); testResults.sampleData.projects = { success: true, count: projects.length, data: projects.slice(0, 2) // 只显示前2个 }; } catch (err) { testResults.sampleData.projects = { success: false, error: (err as Error).message }; testResults.errors.push(`项目数据: ${(err as Error).message}`); } setResults(testResults); if (testResults.connection && testResults.errors.length === 0) { toast.success("数据库测试通过!"); } else { toast.error(`数据库测试发现 ${testResults.errors.length} 个问题`); } } catch (error) { console.error('数据库测试失败:', error); testResults.errors.push(`总体测试失败: ${(error as Error).message}`); setResults(testResults); toast.error("数据库测试失败"); } finally { setTesting(false); } }; return ( 数据库连接测试
{results && ( {results.connection && results.errors.length === 0 ? ( ) : ( )} {results.connection && results.errors.length === 0 ? '连接正常' : '存在问题'} )}
{results && (
{/* 连接状态 */}

基础连接

{results.connection ? ( ) : ( )} {results.connection ? '数据库连接成功' : '数据库连接失败'}
{/* 表状态 */}

数据表状态

{Object.entries(results.tables).map(([tableName, tableInfo]: [string, any]) => (
{tableInfo.accessible ? ( ) : ( )} {tableName}
{tableInfo.count} 条记录
))}
{/* 示例数据 */} {results.sampleData.projects && (

示例数据

{results.sampleData.projects.success ? (

✅ 成功获取 {results.sampleData.projects.count} 个项目

{results.sampleData.projects.data.map((project: any, index: number) => (
{project.name} - {project.description || '无描述'}
))}
) : (

❌ 获取项目数据失败: {results.sampleData.projects.error}

)}
)} {/* 错误信息 */} {results.errors.length > 0 && (

发现的问题

    {results.errors.map((error: string, index: number) => (
  • • {error}
  • ))}
)}
)}
); }