import React, { useState, useEffect } from 'react'; import { Database, RefreshCw, BarChart3, TrendingUp, Calendar, AlertCircle } from 'lucide-react'; import { stockApi, DatabaseStats as DatabaseStatsType, formatNumber } from '@/lib/api'; const DatabaseStats: React.FC = () => { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [lastUpdated, setLastUpdated] = useState(null); const fetchStats = async () => { setLoading(true); setError(null); try { const data = await stockApi.getDatabaseStats(); setStats(data); setLastUpdated(new Date()); } catch (err) { setError(err instanceof Error ? err.message : '데이터베이스 통계를 가져오는데 실패했습니다.'); } finally { setLoading(false); } }; useEffect(() => { fetchStats(); }, []); const handleRefresh = () => { fetchStats(); }; if (loading && !stats) { return (

데이터베이스 통계를 로딩 중...

); } if (error) { return (

{error}

); } if (!stats) return null; return (
{/* 헤더 */}

데이터베이스 현황

{lastUpdated && ( 마지막 업데이트: {lastUpdated.toLocaleString('ko-KR')} )}
{/* 요약 카드들 */}
{/* 총 회사 수 */}

등록된 회사

{formatNumber(stats.companies.total)}

재무 데이터: {stats.companies.with_financial_data}개

주가 데이터: {stats.companies.with_price_data}개

{/* 재무 데이터 */}

재무 데이터

{formatNumber(stats.financial_data.total_records)}

실제: {formatNumber(stats.financial_data.real_data)}

추정: {formatNumber(stats.financial_data.estimated_data)}

{/* 주가 데이터 */}

주가 데이터

{formatNumber(stats.price_data.total_records)}

종목 수: {stats.price_data.tickers.length}개

{/* 계산된 지표 */}

계산된 지표

{formatNumber(stats.calculated_metrics.total_records)}

{/* 상세 정보 */}
{/* 재무 데이터 상세 */}

재무 데이터 상세

실제 데이터 {stats.financial_data.real_data} ({((stats.financial_data.real_data / stats.financial_data.total_records) * 100).toFixed(1)}%)
추정 데이터 {stats.financial_data.estimated_data} ({((stats.financial_data.estimated_data / stats.financial_data.total_records) * 100).toFixed(1)}%)

데이터 기간

{new Date(stats.financial_data.date_range.earliest).toLocaleDateString('ko-KR')} ~ {new Date(stats.financial_data.date_range.latest).toLocaleDateString('ko-KR')}

{/* 데이터 소스별 분포 */}

데이터 소스별 분포

{Object.entries(stats.financial_data.by_source).map(([source, count]) => (
{source}
{formatNumber(count)} ({((count / stats.financial_data.total_records) * 100).toFixed(1)}%)
))}
{/* 주가 데이터 종목 목록 */}

주가 데이터 보유 종목

{stats.price_data.tickers.map((ticker) => (
{ticker}
))}

주가 데이터 기간: {new Date(stats.price_data.date_range.earliest).toLocaleDateString('ko-KR')} ~ {new Date(stats.price_data.date_range.latest).toLocaleDateString('ko-KR')}

); }; export default DatabaseStats;