API RESTful para gerenciar um restaurante, desenvolvida em Node.js com TypeScript, Prisma e PostgreSQL, estruturada em Arquitetura Limpa/Modular e pronta para execução em containers com Docker.
- Node.js + TypeScript (Express 5)
- Prisma ORM (PostgreSQL)
- Docker & Docker Compose (Multi-stage build)
- Zod (Validação de schemas e sanitização de dados)
- Swagger UI (Documentação interativa)
- Vitest (Testes automatizados)
A aplicação segue uma Arquitetura Limpa / Modular em Camadas, garantindo separação clara de responsabilidades, baixo acoplamento e alta testabilidade:
src/
├── controllers/ # Recebe requisições HTTP, valida entradas (Zod) e retorna respostas.
├── services/ # Contém todas as regras de negócio e lança erros de domínio (AppError).
├── repositories/ # Camada de acesso a dados (Data Access Layer), encapsulando a API do Prisma.
├── routes/ # Definição dos endpoints da API Express.
├── middlewares/ # Tratamento global de erros (AppError e ZodError).
└── utils/ # Funções utilitárias e classes de erro customizadas.
Todo o ambiente de desenvolvimento e produção (API + PostgreSQL + Migrations) pode ser executado com apenas um comando:
- Docker e Docker Compose instalados.
No diretório raiz do projeto, execute:
docker-compose up --build💡 O que acontece automaticamente:
- O banco de dados PostgreSQL é inicializado e configurado com persistência via volume.
- O container da API aguarda o banco de dados estar 100% pronto (via
healthcheck).- O script de entrypoint executa automaticamente as migrations do Prisma (
prisma migrate deploy).- A API é iniciada na porta
3333.
Após subir os containers, acesse a documentação Swagger em: 👉 http://localhost:3333/api-docs
Se preferir rodar localmente sem Docker:
-
Instale as dependências:
npm install
-
Configure o arquivo de ambiente: Crie um arquivo
.envbaseado no.env.examplee ajuste a URL de conexão com seu PostgreSQL local:PORT=3333 DATABASE_URL="postgresql://postgres:postgres@localhost:5432/restaurante_db?schema=public"
-
Gere o cliente e rode as migrations:
npx prisma generate npx prisma migrate dev
-
(Opcional) Popule o banco de dados (Seed):
npx prisma db seed
-
Inicie o servidor:
npm run dev
npm run dev: Inicia o servidor em modo de desenvolvimento com hot-reload.npm run build: Compila o código TypeScript para JavaScript na pastadist.npm start: Executa o código compilado em modo de produção.npm test: Executa a suíte de testes automatizados com Vitest.npm run lint: Analisa o código com ESLint.npm run format: Formata o código com Prettier.
- Observabilidade: Adição de logger estruturado (Pino / Winston) e métricas via OpenTelemetry.
- CI/CD Pipeline: Automação de testes e build de imagens Docker via GitHub Actions.
- Resiliência e Cache: Implementação de cache com Redis em consultas frequentes (como cardápio de produtos).
Isaac Lira
- LinkedIn: https://www.linkedin.com/in/isaaclira42
- GitHub: https://github.com/IsaacLira42