Skip to content

wellington-tinho/gpon-data-parser

Repository files navigation

GPON Data Parse

Aplicação Serviço Badge e Acesso
Backend API Render Demo API - (backend)
Frontend App Vercel Demo - Page - (frontend)

Se for exibido erro ao obter os dados, aguarde alguns segundos antes de atualizar. Isso acontece porque o backend sleep pausa temporariamente o processamento do servidor depois de 15 minutos de inatividade.

📖 Sumário


📝 Sobre o Projeto

Este repositório contém uma solução full-stack completa para processar, armazenar, servir e visualizar dados de configuração de redes GPON. A aplicação é estruturada como um monorepo, dividido em três componentes principais: um parser de arquivos, uma API backend e uma interface frontend. O repositório possui duas branches principais, cada uma refletindo uma etapa e abordagem técnica diferente:

  • main: Voltada para um ambiente mais direto e performático (oferece maior controle sobre as queries SQL).

    • Backend: usa a biblioteca pg (node-postgres) para comunicação com o banco.
      Essa abordagem oferece maior controle sobre as queries SQL, ideal para otimizações manuais ou cenários onde o desempenho é essencial.
  • developer: Pensada para evolução e escalabilidade do projeto.

    • Backend: utiliza o Prisma ORM, trazendo: Abstração das queries SQL e Sistema de migrações simples e seguro.
    • Frontend: usa o TanStack Router, que mantém o estado dos filtros da tabela diretamente na URL — permitindo compartilhar links com filtros aplicados e uma navegação mais previsível.

🎯 Objetivo

O objetivo principal é unificar e apresentar de forma clara e interativa os dados de equipamentos de rede GPON de diferentes fabricantes (Huawei e ZTE), que originalmente se encontram em arquivos de texto (.txt) com formatos distintos. A solução transforma esses dados brutos em informações estruturadas e acessíveis através de uma aplicação web.

✨ Funcionalidades

  • Parser de Dados: Scripts dedicados para ler arquivos de texto dos fabricantes Huawei e ZTE, extrair as informações relevantes e convertê-las para um formato CSV unificado.
  • Backend API:
    • Serve os dados GPON através de uma API RESTful robusta.
    • Oferece endpoints para listagem, busca com filtro dinâmico e exclusão de registros.
    • Documentação automática da API com Swagger UI.
    • Popula (seeding) o banco de dados automaticamente a partir do arquivo CSV gerado pelo parser.
  • Frontend UI:
    • Apresenta os dados em uma tabela clara e organizada.
    • Permite a filtragem dinâmica dos dados em tempo real.
    • Implementa paginação para lidar com grandes volumes de registros.
    • Design responsivo e moderno utilizando Tailwind CSS.

🌐 Tech Stack

Área Tecnologia
Backend Node.js Fastify TypeScript Prisma PostgreSQL Docker
Frontend React Vite TypeScript Tailwind CSS TanStack Query TanStack Router
Parser Node.js TypeScript

🔄 Fluxo de Trabalho do Projeto

O diagrama abaixo ilustra o fluxo completo de dados, desde os arquivos de entrada até a visualização no navegador.

graph TD
    %% --- Entrada de arquivos ---
    subgraph Input_Arquivos_de_Dados_Brutos["Input: Arquivos de Dados Brutos"]
        direction LR
        F1["OntInfo - Huawei.txt"]
        F2["OntInfo - ZTE - SNs.txt"]
        F3["OntInfo - ZTE - SNs - State.txt"]
    end

    %% --- Parser ---
    subgraph Passo1_Parser["Passo 1: Parser"]
        direction TB
        P["parser scripts<br>(Node.js)"]
    end

    %% --- Saída intermediária ---
    subgraph Output_Intermediario["Output Intermediário"]
        direction TB
        CSV["backend/infra/OntInfo.csv<br>Formato Unificado"]
    end

    %% --- Backend ---
    subgraph Passo2_Backend["Passo 2: Backend - Fastify API"]
        direction TB
        DOCKER["1. npm run services:up<br>Inicia container PostgreSQL"]
        DEV["2. npm run dev<br>Inicia o servidor Fastify"]
        SEED["3. Seeding Automático<br>Popula o DB a partir do CSV"]
        API["4. API Pronta<br>localhost:3333"]
        DOCKER --> DEV --> SEED --> API
    end

    %% --- Frontend ---
    subgraph Passo3_Frontend["Passo 3: Frontend - React App"]
        direction TB
        FE_DEV["npm run dev<br>Servidor Vite em localhost:5173"]
        FETCH["Componentes React (useFetch)<br>Consomem a API do Backend"]
        UI["Interface do Usuário<br>Tabela com filtros"]
        FE_DEV --> FETCH --> UI
    end

    %% --- Fluxo principal ---
    F1 --> P
    F2 --> P
    F3 --> P
    P --> CSV
    CSV --> SEED
    API --> FETCH
Loading

🗄️ Schema do Banco de Dados

Os dados são persistidos em uma única tabela no PostgreSQL, gerenciada pelo Prisma. A estrutura é a seguinte:

Tabela: ont_info

Campo Tipo Descrição
id Int Identificador único (Chave Primária)
slot Int Número do slot no equipamento.
port Int Número da porta no equipamento.
ont_id Int ID da ONT (Optical Network Terminal).
sn String Número de série (Serial Number) da ONT.
state String Estado operacional da ONT (e.g., online, offline).
ont_type String Fabricante do equipamento (huawei ou zte).

🔀 Endpoints da API

A API do backend oferece os seguintes endpoints (a documentação completa e interativa via Swagger está disponível em http://localhost:3333/docs quando o servidor está no ar):

Método Path Descrição Parâmetros de Query Corpo da Requisição (Body)
GET /health Realiza um health check detalhado da API e do banco de dados. - -
GET /healthz Retorna um status "ok" simples, ideal para monitoramento rápido. - -
GET /gpon-data Lista os registros de ONT com paginação. page (número, opcional), limit (número, opcional) -
GET /gpon-data/search Filtra os registros de ONT por um termo de busca em todos os campos. filter (string), page (opcional), limit (opcional) -
DELETE /gpon-data Deleta um ou mais registros de ONT com base em uma lista de IDs. - { "ids": [1, 2, 3] }

🚀 Começando

Siga estas instruções para configurar e executar o projeto em seu ambiente local.

Pré-requisitos

  • Node.js: Versão 20.x ou superior.
  • Docker e Docker Compose: Necessários para executar o banco de dados PostgreSQL.

Instalação e Execução Automática

   git clone https://github.com/wellington-tinho/gpon-data-parser.git
   cd gpon-data-parser
   npm install
   npm run start:all

Espere iniciar o frontend e o backend

Instalação e Execução Manual

Para uma experiência completa, você precisará de 2 terminais abertos, (só execulte o terminal 2 após todos os passos do terminal 1, estiverem concluidos)

  1. Terminal 1: Execultar o script de parse e instalação

    npm run parser
    npm run install:backend
    npm run install:front
    npm run services:up
    npm run dev:backend

    Será criado o arquivo.csv, instalado as dependências do projeto, iniciado o container do postgre e o servidor backend na rota: http://localhost:3333.

  2. Terminal 2: Iniciar o Servidor Frontend

    npm run dev:frontend

    A aplicação React estará disponível em http://localhost:5173.

O frontend espera que a API do backend esteja rodando em http://localhost:3333/. Isso é configurado no arquivo frontend/.env.development. Se você precisar alterar a porta do backend, lembre-se de ajustar este arquivo.

🛠️ Scripts do projeto

Raiz do projeto (/)

  • npm run install:backend: Instala apenas as dependências do backend localizadas em backend/.
  • npm run install:frontend: Instala apenas as dependências do frontend localizadas em frontend/.
  • npm run dev:backend: Executa apenas o servidor backend (Fastify + Prisma).
  • npm run dev:frontend: Executa apenas o servidor frontend (Vite + React).
  • npm run parser: Executa o parser de dados, responsável por gerar o arquivo OntInfo.csv usado pelo backend.
  • npm run services:up: Sobe os containers Docker (PostgreSQL) definidos em backend/infra/compose.yaml.
  • npm run services:down: Encerra e remove os containers Docker e seus volumes associados.
  • npm run services:psql: Acessa o banco PostgreSQL dentro do container via terminal interativo (psql).
  • npm run install:all: Instala as dependências e inicia simultaneamente o backend e o frontend usando concurrently.
  • npm run start:all: Executa todo o fluxo automaticamente:
    • Roda o parser
    • Sobe o banco com Docker
    • Instala e inicia backend e frontend
    • Ao final, todos os serviços estarão rodando.

📂 Estrutura de Pastas

gpon-data-parser
├── backend/                # Contém a API e a lógica de negócio
│   ├── infra/              # Configuração de infraestrutura (Docker, DB client)
│   ├── prisma/             # Schema e migrações do banco de dados
│   ├── src/                # Código-fonte da API
│   │   ├── routes/         # Definição dos endpoints da API
│   │   ├── schemas/        # Schemas de validação (Zod)
│   │   ├── service/        # Lógica de negócio
│   │   ├── startup/        # Scripts de inicialização (seeding)
│   │   └── server.ts       # Ponto de entrada do servidor Fastify
│   └── package.json
├── frontend/               # Contém a aplicação React
│   ├── src/
│   │   ├── components/     # Componentes React reutilizáveis
│   │   ├── hooks/          # Hooks customizados (ex: useFetch)
│   │   ├── routes/         # Configuração de rotas (TanStack Router)
│   │   ├── services/       # Configuração do cliente API (Axios)
│   │   └── App.tsx         # Componente principal da aplicação
│   └── package.json
├── parser/                 # Scripts para parsear os arquivos de dados
│   ├── utils/
│   └── index.ts            # Ponto de entrada do parser
└── README.md               # Este arquivo

🖼 Demonstração

demonstracao.responsiva.mp4

About

Challenge - full stack developer - Virtex

Resources

Stars

Watchers

Forks