Este projeto é uma API construÃda com NestJS para gerenciar clientes e produtos favoritos, utilizando PostgreSQL como banco de dados.
- Requisitos
- Tecnologias
- Estrutura do Projeto
- Configuração do Ambiente
- Autenticação JWT
- Rodando o Projeto
- Scripts de Banco de Dados
- Utilizando Docker
- Testes
- Documentação da API
- Node.js >= 18.x
- pnpm >= 8.x
- Docker (opcional, recomendado para banco de dados)
src/customer: Módulo de clientessrc/favorite: Módulo de favoritossrc/shared: Módulos e utilitários compartilhadostest: Scripts e utilitários para configuração e execução dos testes
-
Copie o arquivo
.env.examplepara.enve configure as variáveis de ambiente necessárias. Para configurações JWT, veja na sessão Autenticação JWT -
Instale as dependências:
pnpm installA API utiliza autenticação baseada em JWT (JSON Web Token) com um par de chaves assimétricas (RSA) para maior segurança. É necessário gerar uma chave privada e uma chave pública para assinar e validar os tokens.
Tip
Ao copiar o arquivo .env.example para seu ambiente de testes, ele já vem com chaves prontas para serem usadas apenas em testes. Não use essas chaves em produção.
Execute os comandos abaixo no terminal para criar as chaves:
# Gerar chave privada (private.pem)
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048
# Gerar chave pública (public.pem) a partir da privada
openssl rsa -pubout -in private.pem -out public.pemPara utilizar as chaves como variáveis de ambiente, converta-as para Base64. Para facilitar use serviços da web, como: Base64 Encode
# .env
JWT_PRIVATE_KEY="PRIVATE_TOKEN_BASE64"
JWT_PUBLIC_KEY="PUBLIC_TOKEN_BASE64"Essas variáveis serão utilizadas pela aplicação para assinar e validar os tokens JWT.
Lembre-se de estar com o banco de dados rodando. Veja em: Utilizando Docker
# Rodar as migrations e o projeto em desenvolvimento
pnpm devTodas migrations necessárias serão adicionadas ao banco de dados, e a aplicação estará disponÃvel na porta definida em PORT (padrão: 3000).
O projeto utiliza TypeORM para gerenciamento de migrations.
pnpm customer:db:generatepnpm customer:db:runpnpm favorite:db:generatepnpm favorite:db:runO projeto inclui um arquivo docker-compose.yaml para facilitar o uso do banco PostgreSQL.
docker-compose up -dCertifique-se de que a variável DATABASE_URL no .env está apontando para o banco do Docker.
pnpm test:e2eApós rodar o projeto, acesse a documentação Swagger em:
http://localhost:3000/docs
Gabriel Duarte - Software Developer Backend
jds.gabrielduarte@gmail.com - LinkedIn