LUIS BOTELHO.

Case study / MVP concluído

Goomer Menu API

API RESTful completa para gerenciamento de cardápio de restaurante: produtos, promoções com horários e endpoint consolidado de menu com promoções ativas em tempo real.

Problema e usuário

Representar produtos, promoções e disponibilidade de um cardápio de restaurante.

Meu papel

Desenvolvimento do backend e documentação da evolução.

Escopo entregue

  • CRUD completo de produtos (name, price, category, visible)
  • CRUD completo de promoções com horários por dia da semana
  • Endpoint GET /menu que retorna apenas produtos visíveis + melhor promoção ativa no momento (LEFT JOIN LATERAL)
  • Validação de schemas com TypeBox
  • Transações PostgreSQL na criação/atualização de promoções
  • Arquitetura em camadas (Routes → Controllers → Services → Repositories)
  • Prisma usado apenas para schema e migrations; queries em SQL puro
  • Testes unitários dos services
  • Docker Compose para o banco
  • Health check

Restrições

  • Recorte de MVP do desafio técnico.
  • Sem autenticação ou autorização nesta versão.
  • Demonstração local, sem deploy em produção.

Arquitetura e fluxo de dados

Fastify organiza o HTTP em camadas (Routes → Controllers → Services → Repositories). O Prisma cuida apenas do schema e das migrations; as queries de produtos, promoções e menu são escritas em SQL puro sobre o pool do PostgreSQL.

Decisões e trade-offs

Separo o Prisma (schema e migrations) do SQL puro nas queries para ter controle total e performance. O LEFT JOIN LATERAL seleciona a melhor promoção ativa em uma única query. Transações manuais com pg garantem atomicidade entre a promoção e seus horários. A validação acontece em duas camadas: TypeBox no schema e regras de negócio no service (intervalo mínimo de 15 min, fim após o início).

Testes e validações

Testes unitários dos services (produtos, promoções e menu) com Vitest e revisão do código e da documentação pública em 22/09/2026. A execução deste projeto não faz parte da validação do portfólio.

O que existe hoje

MVP concluído com CRUD completo de produtos e promoções, endpoint /menu com promoções ativas em tempo real e testes unitários dos services.

Limitações conhecidas

  • Sem autenticação ou autorização nesta versão.
  • Sem paginação nos list endpoints.
  • Ambiente de demonstração local (não está deployado em produção).

Próximas etapas

  • Autenticação
  • Paginação e filtros
  • Deploy + CI

Formação relacionada

Stack

  • TypeScript
  • Fastify
  • Node.js
  • PostgreSQL 16
  • Prisma (migrations)
  • SQL puro (queries)
  • TypeBox
  • Vitest
  • Docker + Docker Compose

Carregando documentação do repositório…