Skip to content

joschonarth/jitterbit-api

Repository files navigation

Jitterbit

🛒 Jitterbit API

API REST para gerenciamento de pedidos.

last-commit repo-top-language repo-language-count ci-tests license

📃 Sobre  •   🛠️ Tecnologias  •   ✨ Funcionalidades  •   🚀 Como rodar  •   📖 Documentação  •   🧪 Testes


📃 Sobre

A Jitterbit API é uma API REST desenvolvida como parte do Desafio Técnico da Jitterbit. O desafio consiste em criar uma API para gerenciamento de pedidos, permitindo criar, listar, buscar, atualizar e deletar pedidos com seus respectivos itens. A API realiza o mapeamento dos campos recebidos no formato português para o formato em inglês persistido no banco de dados. Conta com autenticação via JWT para proteger os endpoints e documentação interativa via Swagger. O backend é construído com Node.js, Fastify e Prisma ORM.

⚠️ O desafio originalmente solicita o uso de JavaScript, porém optei por desenvolver em TypeScript para demonstrar maior domínio da linguagem e garantir mais segurança e qualidade no código com tipagem estática.


🛠️ Tecnologias

  • 🟢 Node.js — Ambiente de execução JavaScript server-side.
  • Fastify — Framework web focado em performance e baixo overhead.
  • 🟦 TypeScript — Tipagem estática e segurança em tempo de desenvolvimento.
  • 🔼 Prisma ORM — ORM moderno e type-safe para TypeScript.
  • 🐘 PostgreSQL — Banco de dados relacional robusto e confiável.
  • 🐳 Docker — Containerização do banco de dados para ambiente reproduzível.
  • 📖 Swagger — Documentação interativa da API via @fastify/swagger.
  • 🔐 JWT — Autenticação stateless via @fastify/jwt.
  • 🧪 Vitest — Framework de testes unitários e de integração.
  • 💎 Zod — Validação e parsing de schemas com inferência de tipos.
  • 🔍 Biome — Linting e formatação de código de alta performance.
  • 🔄 GitHub Actions — Integração contínua e automação do pipeline de testes.
  • ☁️ Render — Plataforma de deploy em nuvem para hospedagem da API.

✨ Funcionalidades

  • 📦 Criar um novo pedido com itens
  • 🔍 Buscar pedido por ID
  • 📋 Listar todos os pedidos com paginação
  • ✏️ Atualizar um pedido existente
  • 🗑️ Deletar um pedido
  • 🔁 Mapeamento automático dos campos (PT → EN)
  • 🔐 Autenticação com JWT
  • 🛡️ Validação de dados com Zod
  • 📖 Documentação interativa da API com Swagger
  • 🧪 Testes automatizados com Vitest
  • 🔄 Pipeline de CI rodando os testes a cada push
  • ☁️ Deploy em produção na Render

🚀 Como rodar

📋 Pré-requisitos

🔧 Instalação

  1. Clone o repositório:
    git clone https://github.com/joschonarth/jitterbit-api.git
  1. Acesse a pasta do projeto:
    cd jitterbit-api
  1. Instale as dependências:
    npm install
  1. Configure as variáveis de ambiente copiando o arquivo de exemplo:
cp .env.example .env
  1. Em seguida, abra o arquivo .env e preencha as variáveis:
    # Node Environment
    NODE_ENV=development

    # Port
    PORT=3333

    # Database
    DATABASE_URL="postgresql://docker:docker@localhost:5432/jitterbit?schema=public"

    # Auth
    JWT_SECRET="your-secret-key"
    API_USERNAME="admin"
    API_PASSWORD="admin"

🐳 Banco de dados

Suba o container do PostgreSQL com Docker:

docker compose up -d

Execute o setup para gerar o Prisma Client e aplicar as migrations:

npm run setup

▶️ Execução

Inicia o servidor em modo de desenvolvimento:

npm run dev

O servidor estará disponível em http://localhost:3333.


🌐 Deploy

A API está disponível em produção na Render:

🔗 https://jitterbit-api.onrender.com

A documentação interativa está disponível em:

🔗 https://jitterbit-api.onrender.com/docs

⚠️ A aplicação está hospedada no plano gratuito da Render, portanto pode haver um delay de até 50 segundos na primeira requisição devido ao cold start.


📖 Documentação da API

Com o servidor rodando, acesse a documentação interativa gerada pelo Swagger:

👉 http://localhost:3333/docs

🔐 Autenticação

Todos os endpoints de pedidos exigem autenticação. Para obter o token, faça uma requisição para o endpoint de autenticação:

curl --location 'http://localhost:3333/auth' \
--header 'Content-Type: application/json' \
--data '{
  "username": "admin",
  "password": "admin"
}'

Utilize o token retornado no header Authorization das requisições:

Authorization: Bearer <token>

📦 Endpoints

Método Rota Descrição
POST /auth Autenticar e obter token JWT
POST /order Criar um novo pedido
GET /order/:orderId Buscar pedido por ID
GET /order/list Listar todos os pedidos
PUT /order/:orderId Atualizar um pedido
DELETE /order/:orderId Deletar um pedido

🧪 Testes

Os testes são escritos com Vitest e cobrem os principais fluxos e regras de negócio da aplicação.

# Roda todos os testes
npm run test

# Roda os testes em watch mode
npm run test:watch

⚙️ CI

O projeto conta com um workflow de Integração Contínua via GitHub Actions. A cada push, o pipeline é acionado automaticamente e executa todos os testes para garantir que nenhuma funcionalidade foi quebrada.

.github/
└── workflows/
    └── ci.yml

📄 Licença

Este projeto está licenciado sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.


Feito com ♥ por João Otávio Schonarth

LinkedIn Gmail

Packages

 
 
 

Contributors