#API responsável pelo cadastro de cliente
Para subir o banco de dados é usado um docker file que se encontra dentro da estrutura da aplicação. Para subir o postgres, é necessário rodar o comando "docker-compose up" no terminal, dentro do diretório docker. No caminho: cliente/src/main/docker.
Dentro do diretório raiz da aplicação, "builders/cliente" rodar o comando: "mvn spring-boot:run".
Para verificar se a API está no ar, acessar o swagger no link: " http://localhost:8080/swagger-ui/#/ "
Dentro do diretório raiz encontra-se o arquivo " builders-cliente.postman_collection.json " para importar no postman.
Há um diretório "test/resources/exemplo" e dentro uma imagem para teste unitário de cadastro de foto do cliente.
##Descrição simplificada da API
-
Todas as classes de domínio estão no diretório "br.com.cadastro.cliente.domain". A classe "Cliente" é a classe de modelo princial da API, as outras classes de modelo são complementações dos dados do cliente. Nessa classe encontrasse mapeamentos de persistência do framework JPA;
1.1- A validação com a anotação @NotNull na data de nascimento é para garantir o requisito: "cada elemento retornado pela api de clientes informe a idade", assim não deixando um cliente ser cadastrado sem a data de nascimento.
1.2- As enumerations de documentos e genero garantem que o cliente só vai ser cadastrado com os tipos definidos em cada enum.
1.3- No atributo foto da classe cliente é armazenado o caminho do file system onde a foto foi gravada.
1.4- Foi escolhido um mapa de documentos na classe cliente, para garantir a correspondência entre o numero e o tipo.
1.5- O atributo telefone foi mapeado com: um cliente pode ter vários telefones (@OneToMany).
1.6- Já o atributo endereco, foi mapeado como @Embedded, pois um cliente não precisa cadastrar mais de um endereço e assim também não é necessária a criação de uma tabela específica só para o armazenamento do endereço.
-
A classe Endereco foi mapeada apenas com @Embeddable, para indicar que ela é parte (continuação) dos atributos da classe Cliente.
-
A classe Telefone define um mapeamento ManyToOne com cliente. O mapeamento bidirecional evita que seja criada uma tabela de associação e otimiza as consultas no banco de dados.
-
A classe CustomGlobalExceptionHandler faz a interceptação dos erros do controller. Foi criada apenas uma classe de tratamento de exceção específica de "not found" (ResourceNotFoundException), não foi encontrado no requisito da API a necessidade de se criar uma classe genérica para o tratamento de várias exceções ou outras classes específicas.
-
Foi criado um clienteDTO para retornar apenas parte das informações do cliente na busca paginada, não sendo necessario retornar todas as informações, caso necessite das informações completas, fazer a busca pelo id do cliente.
-
A classe SpringFoxConfig configura o SWAGGER_2.
-
Há duas classes para exemplificar os teste, uma testa um método da API e outra um método do serviço.
Algumas outras informações também encontradas no SWAGGER: http://localhost:8080/swagger-ui/#/ .