import React, { useState, useEffect } from 'react'; import dynamic from 'next/dynamic'; import { stockApi } from '@/lib/api'; import { List, Database as DBIcon, Layers, Calendar } from 'lucide-react'; import Layout from '@/components/Layout'; const DatabaseStats = dynamic(() => import('@/components/DatabaseStats'), { ssr: false, loading: () => (
), }); const DatabasePage: React.FC = () => { const [tab, setTab] = useState<'stats' | 'etf' | 'financial'>('stats'); const [etf, setEtf] = useState<{loading:boolean; items:any[]; total:number}>({loading:false, items:[], total:0}); const [fin, setFin] = useState<{loading:boolean; items:any[]; total:number}>({loading:false, items:[], total:0}); const loadEtf = async () => { setEtf(s => ({...s, loading:true})); try { const res = await stockApi.getEtfSnapshots({ limit: 25 }); setEtf({loading:false, items:res.results, total:res.count}); } catch { setEtf({loading:false, items:[], total:0}); } }; const loadFin = async () => { setFin(s => ({...s, loading:true})); try { const res = await stockApi.getFinancialRecords({ limit: 50 }); setFin({loading:false, items:res.results, total:res.count}); } catch { setFin({loading:false, items:[], total:0}); } }; useEffect(() => { if (tab === 'etf') loadEtf(); if (tab === 'financial') loadFin(); }, [tab]); return (
{tab==='stats' && } {tab==='etf' && (

저장된 ETF 스냅샷

{etf.loading ? (

로딩 중...

) : etf.items.length===0 ? (

저장된 스냅샷이 없습니다.

) : (
{etf.items.map((s:any) => ( ))}
Snapshot ID Ticker Date Source Holdings
{s.id} {s.ticker} {new Date(s.snapshot_date).toLocaleDateString('ko-KR')} {s.source || '-'} {s.holdings_count}
)}
)} {tab==='financial' && (

저장된 재무 레코드

{fin.loading ? (

로딩 중...

) : fin.items.length===0 ? (

레코드가 없습니다.

) : (
{fin.items.map((r:any) => ( ))}
Ticker Period Type Revenue Net Income Source
{r.ticker} {new Date(r.period_date).toLocaleDateString('ko-KR')} {r.period_type} {r.revenue?.toLocaleString() ?? '-'} {r.net_income?.toLocaleString() ?? '-'} {r.data_source}
)}
)}
); }; export default DatabasePage;