Este repositório contém o backend do Projeto FUTURO NOME DO PROJETO, desenvolvido com NestJS, Prisma e PostgreSQL. O objetivo é fornecer uma API robusta, escalável e de fácil manutenção para aplicações web e mobile.
- Node.js — Ambiente de execução JavaScript
- NestJS — Framework para aplicações Node.js escaláveis
- Prisma ORM — Mapeamento objeto-relacional para banco de dados
- PostgreSQL — Banco de dados relacional
- Vitest — Testes automatizados
- Docker — Containers para ambientes e banco de dados
- BiomeJs — Linter e Formatter do projeto
- Husky + lint-staged + Commitlint — Garantem padrões de código e mensagens de commit
O projeto utiliza diferentes arquivos .env para separar as configurações de cada ambiente:
.env: ambiente de desenvolvimento local (porta, banco, CORS, etc)..env.test: ambiente de testes unitários/integrados (banco e porta isolados para testes)..env.production: ambiente de produção (configurações seguras para deploy).
Esses arquivos permitem rodar a aplicação em diferentes contextos sem alterar o código, apenas mudando as variáveis de ambiente.
Outros arquivos importantes:
docker-compose.dev.ymledocker-compose.prod.yml: orquestram containers para desenvolvimento e produção, garantindo ambientes isolados e reprodutíveis.Dockerfile.deveDockerfile.prod: definem como as imagens são construídas para desenvolvimento e produção.prisma/: contém o schema do banco, seeds e migrations, usados pelo Prisma ORM..husky/: hooks de git para automação de tarefas antes de commits/push.
-
Clone o repositório:
git clone <url-do-repositório> cd backend
-
Configure as variáveis de ambiente:
- Copie
.env.examplee/ou.env.test.examplepara.enve/ou.env.teste ajuste conforme necessário.
- Copie
-
Suba o banco de dados com Docker (ambiente de desenvolvimento):
pnpm docker:dev
Após o docker:dev, a imagem é construída, as dependências são instaladas (no build), o Prisma Client é gerado e a aplicação inicia automaticamente.
Observações para Docker:
-
Por padrão, o
docker-compose.dev.ymlexecutapnpm exec prisma generate && pnpm start:dev. -
Se precisar aplicar migrations ou seeds, execute dentro do container:
docker compose -f docker-compose.dev.yml exec app pnpm prisma:migrate docker compose -f docker-compose.dev.yml exec app pnpm prisma:seed
-
Instale as dependências:
pnpm install
-
Rode as migrations e gere o client Prisma:
pnpm prisma:migrate pnpm prisma:generate
-
Inicie a aplicação:
pnpm start:dev
pnpm start:dev— Inicia o servidor em modo desenvolvimentopnpm build— Compila a aplicação para produção (pastadist/)pnpm start:prod— Inicia o servidor em modo de produção (usadist/main)pnpm test— Executa os testes automatizadospnpm test:watch— Executa os testes automatizados em modo watchpnpm test:coverage— Mostra a cobertura dos testes automatizadospnpm test:e2e— Executa os testes e2epnpm test:coverage:e2e— Mostra a cobertura dos testes e2epnpm lint— Roda o linterpnpm commit— Roda o commitzen para commits semânticospnpm prisma:migrate— Executa as migrations do bancopnpm prisma:generate— Gera o client do Prismapnpm prisma:seed— Popula o banco de dadospnpm docker:dev— Sobe os containers para desenvolvimentopnpm docker:stop:dev— Para os containers de desenvolvimentopnpm docker:prod— Sobe os containers para produção (detached)pnpm docker:stop:prod— Para os containers de produção
O projeto usa Husky, lint-staged e Commitlint para garantir qualidade e padronização:
pre-commit: executa olint-stagedsobre arquivos staged e rodapnpm test:coveragequando arquivossrc/**/*.tsforem commitadoscommit-msg: valida a mensagem de commit com Commitlint (convencional)pre-push: executapnpm test:coverageepnpm test:coverage:e2e
Observações:
- É necessário ter Node (>= 22.15.1) e pnpm instalados
O projeto possui arquivos para facilitar o uso de containers tanto em desenvolvimento quanto produção:
- Desenvolvimento:
docker-compose.dev.yml(scriptpnpm docker:dev) - Produção:
docker-compose.prod.yml(scriptpnpm docker:prod)
- Faça um fork do projeto
- Crie uma branch para sua feature/fix:
git checkout -b minha-feature - Commit suas alterações:
git commit -m 'feat: minha nova feature' - Push para o seu fork:
git push origin minha-feature - Abra um Pull Request