'use client'; import Link from 'next/link'; import { useQuery } from '@tanstack/react-query'; import { apiFetch } from '../../../../lib/api'; import { useSession } from '../../../../components/session-provider'; interface DataSource { id: string; name: string; sourceType: string; description: string | null; status: string; lastSyncAt: string | null; recordCount: number | null; createdAt: string; } const TYPE_ICON: Record = { manual: '✋', api: '🔌', file: '📄', database: '🗄️', integration: '🔗', clickhouse: '🏢', sheet: '📊', }; const SYSTEM_DATASETS = [ { name: 'ClickHouse — manual_ingest.people_data', type: 'clickhouse', records: '147M+', status: 'active', desc: 'Date persoane din ingestie manuală (C3 — restricționat)' }, { name: 'ClickHouse — boardmind schema', type: 'clickhouse', records: 'live', status: 'active', desc: 'Toate tabelele PostgreSQL CEO OS (via MCP)' }, { name: 'AnythingLLM — workspace agents', type: 'integration', records: '10 workspace-uri', status: 'active', desc: 'Agenți date peste ClickHouse la supersrv:3010' }, ]; export default function DataRegistryPage() { const { activeTenant } = useSession(); const tenantId = activeTenant?.tenantId ?? ''; const { data: userSources = [], isLoading } = useQuery({ queryKey: ['data-sources', tenantId], queryFn: () => apiFetch('/v1/data-sources', { tenantId }), enabled: Boolean(tenantId), staleTime: 120_000, }); const totalUserRecords = userSources.reduce((s, ds) => s + (ds.recordCount ?? 0), 0); const activeUser = userSources.filter((ds) => ds.status === 'active').length; return (

Registru Dataset

{isLoading ? 'Se încarcă…' : `${SYSTEM_DATASETS.length} sistem · ${userSources.length} personalizate · ${activeUser} active`}

Gestionează surse →
{/* System datasets */}

Dataset-uri sistem

{SYSTEM_DATASETS.map((ds) => (
{TYPE_ICON[ds.type] ?? '❓'}

{ds.name}

{ds.desc}

{ds.records}

● activ
))}
{/* User-registered datasets */}

Dataset-uri personalizate

{totalUserRecords > 0 && ( {totalUserRecords.toLocaleString('ro-RO')} înregistrări totale )}
{isLoading ? (
Se încarcă…
) : userSources.length === 0 ? (

Niciun dataset personalizat înregistrat.

Adaugă prima sursă de date →
) : (
{userSources.map((ds) => (
{TYPE_ICON[ds.sourceType] ?? '❓'}

{ds.name}

{ds.description &&

{ds.description}

} {ds.lastSyncAt && (

Sync: {new Date(ds.lastSyncAt).toLocaleDateString('ro-RO')}

)}
{ds.recordCount != null ? (

{ds.recordCount.toLocaleString('ro-RO')}

) : (

)} ● {ds.status}
))}
)}
{/* Info note */}

Arhitectură date: CEO OS funcționează cu date din ClickHouse (147M+ rânduri, procesate prin ingestie), date din PostgreSQL (baza CEO OS), și surse externe configurate manual. Agenții AnythingLLM pot interoga ClickHouse prin MCP direct.

); }