← Voltar para projetos
Estudo de caso — Backend

Busca Tudo API

Backend REST em Node.js e TypeScript para o app Busca Tudo — com autenticação JWT, upload de imagens, e-mails transacionais e documentação via Swagger. Quase todas as rotas são cobertas por testes automatizados E2E, rodados a cada push via CI/CD no GitHub Actions.

Busca Tudo — Backend

$ cat package.json

> name: busca_tudo_backend

> version: 1.1.0

> engines: node >=24.17.0 <25.0.0

> scripts: dev · build · test (jest -i)

$ npm run dev

✓ servidor rodando em modo development

Stack técnica

Núcleo

  • Node.js
  • Express
  • TypeScript
  • MongoDB + Mongoose

Autenticação & Segurança

  • JWT
  • bcrypt
  • express-rate-limit
  • CORS

Validação

  • Joi
  • Zod

Comunicação & Mídia

  • Cloudinary
  • Nodemailer
  • Axios

Documentação & DX

  • Swagger UI
  • swagger-autogen
  • ESLint + Prettier

Testes & Qualidade

  • Jest
  • Supertest
  • mongodb-memory-server
  • Faker

Testes E2E & CI/CD

Cada rota nova entra acompanhada de um teste. O pipeline abaixo roda automaticamente a cada push — sem etapa manual entre o código e o deploy.

  1. 1

    Push ou Pull Request

    Qualquer alteração na branch main dispara o workflow do GitHub Actions automaticamente.

  2. 2

    Instala dependências e roda o lint

    npm ci garante instalação determinística; o ESLint valida o padrão de código antes de qualquer teste.

  3. 3

    Testes E2E com banco em memória

    mongodb-memory-server sobe um MongoDB isolado para os testes de Jest + Supertest cobrirem quase todas as rotas da API de ponta a ponta.

  4. 4

    Build de produção

    tsc compila o projeto TypeScript, garantindo que nenhum erro de tipo chegue ao deploy.

  5. 5

    Deploy

    Só acontece se todas as etapas anteriores passarem — sem intervenção manual.

.github/workflows/ci.yml
name: CI

on:
  push:
    branches: ["main", "homolog"]
  pull_request:
    branches: ["main", "homolog"]

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [24.x]

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - name: Create .env file
        run: |
          touch .env
          echo ... >> .env
          echo ... >> .env
          echo ... >> .env
          ...

      - run: npm ci
      - run: npm run lint
      - run: npm run test
      - run: npm run build

Anatomia do projeto

package.json
Imagem das configurações do package.json da minha aplicação mobile de pesquisa de produtos Busca Tudo.