API para gerenciar produtos favoritos de clientes.
Arquitetura do projeto foi baseada na Clean Architecture. A nomenclatura utilizada teve como referência o repositório helpdeveloper/java-modular-architecture.
Segue as camadas e diretórios em que o projeto está dividido:
Camada onde são implementadas as regras de negócio.
Diretório que contêm as interfaces que representam as entidades utilizadas pelos casos de uso.
Diretório que contêm as classes que implementam o comportamento das funcionalidades exigidas.
Camada que abstrai a comunicação com o mundo externo como banco de dados, interfaces de API, comunicação com serviços externos e etc.
Diretório que contêm os controllers que processam as solicitações HTTP de entrada e envia resposta de volta ao cliente.
Diretório que contêm os repositórios para acesso a dados da base de dados e serviços externos.
Camada onde são implementadas as configurações para rodar o servidor HTTP utilizando o framework web escolhido.
Diretório que possui as classes utilizadas em comum por mais de uma camada.
Diretório com as configurações das variáveis de ambiente do projeto.
Diretório com a especificação da documentação da API.
- Tenha instalado NodeJS ou Docker na sua máquina.
- Crie um arquivo .env, seguindo o exemplo .env-example, com as seguintes variáveis de ambiente:
PRODUCTS_API_URL
URL da API de produtosNODE_ENV
Ambiente em que será executada a aplicaçãotest|development|production
PORT
Número da porta em que deseja rodar o servidor HTTPLOG_LEVEL
Especifica o nível dos logs a serem exibidosfatal|error|warn|info|debug|trace|silent
LOG_PRETTY_PRINT
Ativa ou desativa formatação dos logstrue|false
MONGO_URL
URL para conexão com uma base de dados mongoDBMONGO_TIMEOUT_MS
Especifica quanto tempo (em milissegundos) esperar pela conexão com o mongoDB antes de lançar uma exceçãoAXIOS_TIMEOUT_MS
Especifica o tempo (em milissegundos) antes que a requisição a um serviço externo seja abortadaCOMPOSE_PROJECT_NAME
Especifica o nome do projeto para o docker composeSWAGGER_UI_PORT
Especifica a porta onde será disponibilizada a documentação de API com o Swagger UI
docker compose up
Neste modo de inicialização um container com o mongoDB será inicializado localmente, não necessitando configurar a base de dados de forma independente.
npm i
npm run build
npm run start
Neste modo de inicialização é necessário definir um valor para a variável de ambiente MONGO_URL
no arquivo .env
correspondente a uma conexão com uma base de dados mongoDB.
- Criar cliente: Cadastra um novo cliente informando os dados:
nome
eemail
; - Obter cliente: Retorna os dados de um cliente informando o seu identificador;
- Deletar cliente: Remove o registro de um cliente informando o seu identificador;
- Adicionar um produto favorito: Adiciona um produto na lista de produtos favoritos de um cliente informando o identificador do cliente e do produto;
- Obter lista de produtos favoritos: Retorna a lista de produtos favoritos de um cliente informando o identificador do cliente.
A documentação da API segue a especificação OpenAPI e está implementada no arquivo openapi.yml. Pode ser acessada por esse link se você inicializou o projeto com o docker compose com as configurações padrões. Senão, configure a porta em que deseja que o Swagger UI irá rodar localmente através da variável de ambiente SWAGGER_UI_PORT
. Também é possível copiar a especificação do arquivo openapi.yml e utilizar o Swagger Editor para visualizar.
Os comandos a seguir podem ser executados em um ambiente com o NodeJS instalado e após instalar as dependências do projeto (npm i
).
Comando | Descrição |
---|---|
npm run start |
Inicializa aplicação |
npm run build |
Executa o build do projeto transpilando o código em TypeScript |
npm run test |
Executa todos os testes do projeto |
npm run test:unit |
Executa os testes unitários |
npm run test:integration |
Executa os testes de integração |
npm run test:coverage |
Executa todos os testes do projeto e gera relatório de coberta de testes |
npm run lint |
Executa validação de lint nos arquivos do projeto |
npm run lint:fix |
Executa validação de lint nos arquivos do projeto com correção automáica |