wiredia

Levantamento de Requisitos - Wiredia API

Voltar para README


1. Visão Geral

A Wiredia API é uma API RESTful desenvolvida em Node.js/Express que fornece serviços utilitários para processamento de dados, conversões, validações e integrações com serviços externos. O sistema inclui autenticação baseada em JWT, gerenciamento de API keys, painel administrativo e sistema completo de logging.

URL Base: https://api.wiredia.dev
Porta: 3000
Ambiente: Produção (Ubuntu Server)


Índice


2. Requisitos Funcionais

2.1 Autenticação e Autorização

Registro de Usuário

Login de Usuário

Verificação de Sessão

Controle de Acesso Admin

2.2 Gerenciamento de API Keys

Geração de API Keys

Visualização de API Keys

Validação de API Key

2.3 Endpoints da API

Hash de Texto

Comparação de Hash

Codificação/Decodificação Base64

Validação e Formatação de CPF

Validação de CEP

Codificação/Decodificação Hexadecimal

Conversão de Timestamp

Integração Last.fm

Conversão de Moedas

2.4 Interface do Usuário

Página de Registro (/registrar)

Página de Login (/login)

Painel do Usuário (/panel)

Painel Administrativo (/admin)

Redirecionamento de Raiz

2.5 Logging e Monitoramento

Sistema de Logging

Estatísticas de Uso

Visualização de Logs (Admin)

Visualização de Usuários (Admin)

2.6 Segurança

Rate Limiting

Validação de Entrada

Criptografia de Senhas

Proteção de Rotas Admin


3. Requisitos Não Funcionais

Performance

Segurança

Confiabilidade

Manutenibilidade

Usabilidade


4. Arquitetura e Tecnologias

Stack Tecnológico

Backend:

Frontend:

Ferramentas:

Estrutura de Diretórios

wiredia/
├── main.ts              # Servidor Express principal
├── auth.ts              # Rotas de autenticação
├── apikey.ts            # Gerenciamento de API keys
├── database.ts          # Configuração do SQLite
├── package.json
├── tsconfig.json
├── .env                 # Variáveis de ambiente
├── .env.example
├── utils/               # Utilitários
│   ├── hash.ts
│   ├── compare.ts
│   ├── base64.ts
│   ├── hex.ts
│   ├── cpf.ts
│   ├── cep.ts
│   ├── time.ts
│   ├── valor.ts
│   └── lastfm.ts
├── public/              # Arquivos estáticos
│   ├── login.html
│   ├── register.html
│   ├── panel.html
│   └── admin.html
├── logs/                # Logs diários
├── dist/                # Código compilado
└── app.db               # Banco de dados SQLite

Fluxo de Requisição

  1. Requisição HTTP → Express
  2. Middleware de Logging → Registra requisição
  3. Middleware de Rate Limiting → Verifica limite por IP
  4. Roteamento:
    • Rotas públicas → Processamento direto
    • Rotas protegidas → Verificação JWT
    • Rotas da API → Verificação API Key
  5. Processamento → Utilitários específicos
  6. Resposta JSON → Cliente

4.5 Banco de Dados

Tecnologia e Configuração

Diagrama Entidade Relacionamento

erDiagram
    USERS {
        INTEGER id PK "Chave Primária - Identificador único"
        TEXT email UK "Email único - Usado para login"
        TEXT password "Senha criptografada com bcrypt"
        TEXT ip_registro "IP de origem do registro"
    }
    
    API_KEYS {
        INTEGER id PK "Chave Primária - Identificador único"
        INTEGER user_id FK "Chave Estrangeira -> users.id"
        TEXT key UK "Chave de API única (48 caracteres hex)"
        INTEGER created_at "Timestamp Unix da criação"
    }
    
    USAGE {
        INTEGER id PK "Chave Primária - Identificador único"
        INTEGER user_id FK "Chave Estrangeira -> users.id"
        INTEGER count "Contador de requisições (padrão: 0)"
    }
    
    USERS ||--o{ API_KEYS : "Um usuário pode ter várias API keys"
    USERS ||--o| USAGE : "Um usuário tem um contador de uso"

Estrutura das Tabelas

Tabela users Armazena informações dos usuários cadastrados no sistema.

Tabela api_keys Armazena as chaves de API geradas pelos usuários.

Tabela usage Armazena o contador de requisições por usuário.

Relacionamentos


5. Variáveis de Ambiente

Arquivo .env na raiz do projeto:

JWT_SECRET=<chave_aleatória_forte>
LASTFM_API_KEY=<sua_chave_lastfm>
ADMIN_EMAILS=seuemaildeadmin@wiredia.dev

6. Endpoints da API

Rotas Públicas (Sem Autenticação)

Rotas Protegidas (JWT)

Rotas da API (API Key)

Todas as rotas da API requerem header x-api-key.


7. Segurança Implementada


8. Deploy e Produção

Compilação

npm run build

Execução

npm run build  # Compila TypeScript
npm start      # Executa em produção

PM2

pm2 start dist/main.js --name wiredia-api ## em realidade de producao eu to rodando isso com uma screen, o pm2 so funciona quando quer
pm2 logs wiredia-api
pm2 restart wiredia-api