Consiste em uma api para fazer um crud de usuarios.
-
Definição de qual banco utilizar. O PostgreSQL foi escolhido pela praticidade e familiaridade mas também possui outras vantagens como alto desempenho, evita vazamentos de memória e uma alta segurança dos dados.
-
Com a instância do PostgreSQL rodando, em um container na porta 5432. Não é necessário criar schemas no banco, pois o controle de versão do flyway irá criar as tabelas e constraints de acordo com as migrations.
-
O projeto é criado utilizando o Spring Initializr. Nele podemos definir se utilizaremos Maven ou Gradle, além de definir fatores como nome do projeto, versão do JDK e outros. Foi escolhido o Maven para gerenciar o projeto e suas dependências.
-
Ainda com o Spring Initializr, algumas bibliotecas foram escolhidas e adicionadas ao arquivo pom.xml.
-
Nesse ponto, é criado os models das diversas entidades que farão parte do sistema.
-
Foi criado models das entidades e para cada model existe um Repository Controller.
-
Cada Repository extende a classe JpaRepository que torna o acesso a banco muito mais simples pois torna a interface disponivel via injeção de dependência e com métodos pré prontos.
-
A camada de Controller utiliza de mapeamentos do Spring para cada situação. Por exemplo, para obter a lista de usuários é utilizado o verbo GET e a anotação é a @GetMapping.
-
Atual estado da aplicação:
-
A aplicação não está completa ainda. Os endpoints estão funcionais mas as visões de cada usuário ainda está por ser feita. Ainda não está ideal e ela poderá ser melhorada com a utilização do Spring Security.
Foram utilizadas tecnologias atuais de maneira que seja tirado proveito dos avanços alcançados pelo stack do Spring, principalmente do Spring Boot.
Desenvolvido com
- JDK 1.8
- Spring Boot 2.1.3
- Spring MVC 2.1.3
- Spring JPA 2.1.9
- PostgresSQL 12.0
- Docker 18.09.3
- Docker Compose 1.17.1
- Fazer o fork do projeto e em seguida baixá-lo
git clone https://github.com/tarciso-torres/desafio-insight.git
- Navegar até a raiz do projeto e execute via linha de comando, o seguinte:
./gradlew build
para gerar o build da api - Instalar Docker e Docker Compose.
- Navegar até a raiz do projeto e execute via linha de comando, o seguinte:
docker-compose up --build
. Isso fará com que o docker-compose criará um container para o postgreSQL e só depois que o banco estiver operacionavel ele subirá o container da aplicação.
@RestController @RequestMapping(value = "/user") public class UserController {
private UserRepository userRepository;
@Autowired
public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@GetMapping("/all")
Iterable<User> all() {
return userRepository.findAll();
}
}
No exemplo acima, é criado um resource com um método de listar todos os usuários que graças a anotação @GetMapping
, o método estará disponível via GET a /users.
@Repository public interface UserRepository extends JpaRepository<User, UUID> { } É criada uma interface e fazemos ela estender a classe JpaRepository. Esse classe já traz diversos métodos prontos para serem utilizados.