Skip to content

jdgabriel/api-product-favorite

Repository files navigation

Gabriel Duarte - Software Developer Backend
[email protected] - LinkedIn

Products Favorites

Este projeto é uma API construída com NestJS para gerenciar clientes e produtos favoritos, utilizando PostgreSQL como banco de dados.

Sumário


Requisitos

  • Node.js >= 18.x
  • pnpm >= 8.x
  • Docker (opcional, recomendado para banco de dados)

Tecnologias

Estrutura do Projeto

  • src/customer: Módulo de clientes
  • src/favorite: Módulo de favoritos
  • src/shared: Módulos e utilitários compartilhados
  • test: Scripts e utilitários para configuração e execução dos testes

Configuração do Ambiente

  1. Copie o arquivo .env.example para .env e configure as variáveis de ambiente necessárias. Para configurações JWT, veja na sessão Autenticação JWT

  2. Instale as dependências:

pnpm install

Autenticação JWT

A 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.

Gerando o par de chaves RSA

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.pem

Convertendo as chaves para Base64

Para 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.

Rodando o Projeto

Desenvolvimento

Lembre-se de estar com o banco de dados rodando. Veja em: Utilizando Docker

# Rodar as migrations e o projeto em desenvolvimento
pnpm dev

Todas 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).

Scripts de Banco de Dados

O projeto utiliza TypeORM para gerenciamento de migrations.

Gerar uma nova migration para clientes

pnpm customer:db:generate

Executar migrations dos clientes

pnpm customer:db:run

Gerar uma nova migration para favoritos

pnpm favorite:db:generate

Executar migrations dos favoritos

pnpm favorite:db:run

Utilizando Docker

O projeto inclui um arquivo docker-compose.yaml para facilitar o uso do banco PostgreSQL.

Subir o banco de dados

docker-compose up -d

Certifique-se de que a variável DATABASE_URL no .env está apontando para o banco do Docker.

Testes

Testes end-to-end

pnpm test:e2e

Documentação da API

Após rodar o projeto, acesse a documentação Swagger em:

http://localhost:3000/docs

Contato

Gabriel Duarte - Software Developer Backend
[email protected] - LinkedIn

About

🆙 Test - API para controle de produdos favoritos

Topics

Resources

Stars

Watchers

Forks