/builder-cliente-api

Projeto apresentado à builders

Primary LanguageJava

API - CLIENTE

Trabalho apresentado à builders - MVP de uma API para cadastro de clientes

Nesta API é possível criar, editar, listar e atualizar os dados por completo e também de forma granular de um cliente

Requisitos:

  • Permita criação de novos clientes;

  • Permita a atualização de clientes existentes;

  • Permita que seja possível listar os clientes de forma paginada;

  • Permita que buscas por atributos cadastrais do cliente;

  • É necessário também que cada elemento retornado pela api de clientes informe a idade;

Observações:

O projeto foi empacotado com Docker e orquestrado com o docker-compose;

O banco de dados utilizado foi o MySQL em sua versão 8. Dentro deste é carregado automaticamente uma massa de dados com 10 (dez) clientes ao inicializar o sistema através do flyway.

O projeto está hospedado no hub.docker.com e poderá ser utilizado conforme instruções abaixo em COMO EXECUTAR.

Como executar:

O sistema poderá ser recompilado e executado através de seu código fonte aqui no GitHub ou baixado automaticamente atráves do repositório docker (hub.docker.com) do docker pelo docker-compose presente no diretório principal deste projeto

Em caso de optar-se executar a API por intermédio do STS, deve-se executar primeiro: docker container run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes --name cliente-mysql mysql:8.0

Caso, direto pelo repositório, execute: docker container run --rm -p 8080:8080 -e DB_HOST=cliente-mysql --network cliente-network carnegiejunior/cliente-api para inicializar a aplicação através do docker compose. O parâmetro "--rm" deverá garantir que o container seja excluído após o término de seu uso

Após a execução do comando acima, deverá ser possível acessar os endpoints através do postman.

O arquivo com os endpoints já preparados estão no diretório raiz do projeto sob o nome postman.json, o qual poderá ser importado pelo respectivo aplicativo.

Observações gerais:

A API fora constituída da melhor forma dentro do DDD.


Comentários não foram incluídos dentro do fonte do sistema visto não haver nada de difícil entendimento como expressões regulares ou corolários como preceitua Robert C. Martin em seu livro Código Limpo. Qualquer um que souber ler JAVA poderá entender o código perfeitamente de forma fluída.


Algumas validações não foram observadas. Apenas aquelas mais imporntantes como campos em branco, nulos ou inválidos como o caso do CPF.


O campo CPF foi desenvolvido para que fosse armazenado e consultado com sua formação. Ou seja, incluindo pontos e hífen.


Outros pontos não foram observados por não constar requisitos mais específicos. Sendo assim, optou-se por realizar sempre o mais simples para que, caso necessário, possa implementar-se de forma gradual e refatorada.


Ressalto que as datas e horas foram mantidas no padrão UTC sem TIMEZONE

Observações finais:


Por motivos de saúde familiares graves, não foi possível concluir o desabio como eu gostaria.
Costumo usar o Restassure para realizar testes de API, o JUnit para testes unitários e integração.
A documentação normalmente utilizo o Swagger
Para Entrega contínua, o Jenkins e companhia.