Ir para o conteúdo

Arquitetura

Visão técnica dos componentes do Dataforge e como eles se comunicam.

Diagrama geral

flowchart LR
    subgraph Browser["Navegador (React + Vite)"]
        UI[Interface Visual\nApp.tsx]
        SR[SchemaReader]
        SW[SchemaWriter]
        UI --> SR
        UI --> SW
    end

    subgraph Server["Servidor Vite (Node.js)"]
        API_AUTH[POST /api/auth/register\nPOST /api/auth/login]
        API_SCHEMAS[GET /api/schemas\nPOST /api/save-schema]
        API_AI[POST /api/ai-generate\nPOST /api/ai-models]
        API_DB[POST /api/test-db-connection]
        API_CLI[POST /api/run-cli\nPOST /api/stop-cli\nGET /api/run-history]
        API_SCHED[GET /api/schedules\nPOST /api/schedules]
    end

    subgraph Core["Core Python"]
        CLI[dataset-gen CLI\ncli.py]
        GEN[DatasetGenerator\ncore/generator.py]
        REG[FAKER_REGISTRY\ncore/registry.py]
        SCHEMA[DomainSchema / Table / Column\ncore/schema.py]
        LOADER[load_schema\nconfig/loader.py]
        DOMAINS[DOMAIN_REGISTRY\ndomains/]
    end

    subgraph Output["Saída"]
        FILES[Arquivos locais\nCSV / JSON / Parquet / Avro]
        CLOUD[Nuvem\nGCS / S3 / Azure]
        SQL_DB[Banco SQL\nSQLite / PG / MySQL]
    end

    subgraph ExternalAI["APIs de IA"]
        ANTHROPIC[Anthropic]
        OPENAI[OpenAI]
        GOOGLE[Google Gemini]
        GROQ[Groq]
        MISTRAL[Mistral]
        TOGETHER[Together AI]
        OLLAMA[Ollama local]
    end

    UI -- HTTP --> API_AUTH
    UI -- HTTP --> API_SCHEMAS
    UI -- HTTP --> API_AI
    UI -- HTTP --> API_DB
    UI -- HTTP --> API_CLI
    UI -- HTTP --> API_SCHED
    API_AI --> ANTHROPIC
    API_AI --> OPENAI
    API_AI --> GOOGLE
    API_AI --> GROQ
    API_AI --> MISTRAL
    API_AI --> TOGETHER
    API_AI --> OLLAMA
    API_SCHEMAS -- lê/escreve --> SCHEMA_FILES[(src/dataforge/schemas/*.yaml)]
    CLI --> LOADER
    CLI --> DOMAINS
    LOADER --> SCHEMA
    DOMAINS --> SCHEMA
    CLI --> GEN
    GEN --> REG
    GEN --> FILES
    GEN --> CLOUD
    GEN --> SQL_DB

Componentes

Frontend (React + TypeScript)

Arquivo Responsabilidade
App.tsx Componente raiz; gerencia todo o estado da aplicação
types/schema.ts Tipos TypeScript: Column, Table, Schema
services/SchemaReader.ts Converte YAML em estado interno React
services/SchemaWriter.ts Converte estado interno em YAML
components/TableNode.tsx Nó customizado do ReactFlow para renderizar tabelas

Servidor (vite.config.ts)

O servidor de desenvolvimento do Vite expõe endpoints de API via plugin. Os endpoints disponíveis são:

Endpoint Método Descrição
/api/auth/register POST Registra novo usuário
/api/auth/login POST Autentica usuário e retorna JWT
/api/auth/me GET Retorna dados do usuário autenticado
/api/schemas GET Lista schemas disponíveis
/api/save-schema POST Salva schema no servidor
/api/ai-generate POST Gera schema via IA
/api/ai-models POST Lista modelos disponíveis para o provider
/api/test-db-connection POST Testa uma connection string SQL
/api/run-cli POST Executa o CLI com os parâmetros fornecidos
/api/stop-cli POST Para a execução do CLI em andamento
/api/run-history GET Lista o histórico de execuções
/api/schedules GET Lista execuções agendadas
/api/schedules POST Cria uma nova execução agendada
/api/credential-profiles GET/POST Gerencia perfis de credenciais cloud
/api/profile/env-keys GET/POST/DELETE Gerencia chaves de API salvas por usuário
/api/capabilities GET Retorna capacidades disponíveis no servidor
/api/browse-folder GET Navega pelo sistema de arquivos do servidor

Core Python

Módulo Responsabilidade
cli.py Entry point Click; define todos os comandos e flags
core/schema.py Dataclasses: DomainSchema, Table, Column, ForeignKey
core/registry.py FAKER_REGISTRY — mapeamento de dtype para função geradora
core/generator.py DatasetGenerator — geração com ordenação topológica e pool de PKs
config/loader.py Parser YAML com merge de schemas e validação de FKs
domains/ Classes de domínio pré-configuradas (ecommerce, hr, finance)
uploaders/ Implementações de upload para GCS, S3 e Azure
loaders/sql_loader.py Carga de DataFrames em banco via SQLAlchemy
writers/json_writer.py Escrita JSON no modo nested

Integridade referencial

flowchart TD
    A[Schema com FKs] --> B[Ordenação topológica das tabelas]
    B --> C[Gerar tabela pai]
    C --> D[Registrar PKs no pool]
    D --> E[Gerar tabela filha]
    E --> F[Amostrar PKs do pai para colunas FK]
    F --> G{Mais tabelas?}
    G -- Sim --> C
    G -- Não --> H[Datasets prontos]

Tabelas com FK auto-referenciada (ex: employees.manager_id) são preenchidas após a geração da própria tabela, usando o pool de PKs recém-criado.

Stack de tecnologia

Camada Tecnologia
Frontend React 18, TypeScript, Vite, ReactFlow, Dagre
Backend API Plugin Vite (Node.js)
CLI Python 3.12, Click
Geração de dados Faker, Pandas
Formatos PyArrow (Parquet), fastavro (Avro)
Upload nuvem google-cloud-storage, boto3, azure-storage-blob
SQL SQLAlchemy 2.0, psycopg2-binary, pymysql
Build Python poetry-core 2.0
Container Docker multi-stage (python:3.12-slim + Node.js 20 LTS)