Virtual library API. This project is used to study REST Spring Boot projects.
Este projeto usa o Commons REST API para dependência para as chamadas e padrões REST. Esse projeto foi feito por mim para abstrair todas a chamadas e retornos padrões do princípio RESTFull. Será necessário instalar o projeto localmente ou usar o package do github.
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
Utilizar o ambiente linux e ter o mavem e o java 11 para a compilação e execução do projeto. Este projeto utiliza o MongoDb como base de dados, para ter um banco de dados para esse projeto, siga o projeto dockerMongoDB usando o Docker.
Recomendado instalar o sdkman que é uma ferramenta para gerenciar versões paralelas de vários kits de desenvolvimento de software na maioria dos sistemas baseados em Unix.
Com o sdkman, instale o java:
sdk list java
sdk install java 11.0.5.j9-adpt
Instalando o Maven:
sdk install maven
O projeto está configurado para não executar os testes quando construído para desenvolvimento. Para executar os testes, execute o comando abaixo:
mvn clean test -Ptest
Os testes são executados normalmente quando construído para produção e na criação da imagem Docker. Há no arquivo do pom.xml
essa configuração, que pode ser modificada a qualquer momento do desenvolvimento. Inicialmente, para o desenvolvimento, o desenvolvedor pode executar seus testes ao seguir o padrão TDD pela própria IDE.
É utilizado o EclEmma Jacoco para verificação de cobertura de código. Para executar a cobertura:
mvn clean test verify -Ptest jacoco:report
Na pasta target, é gerado um "site" mostrando toda a cobertura de código. Este projeto utiliza o Action para os testes e build da aplicação. Ao final do teste, é enviado para codecov.io todo o relatório. Para verificar a cobertura de teste deste código, acesse codecov.io/gh/danielso2007.
Há um perfil no pom.xml
para a criação da imagem do projeto. Ao executar mvn clean package -Pdocker
, será realizado o teste e criado o arquivo Dockerfile
na pasta target
, criando a imagem virtualLibraryAPI:<project.version>
.
Para ver a imagem criada, digite no terminal o comando docker images
.
Para "rodar" a imagem, execute:
docker run -p 8080:8080 --name swapi virtualLibraryAPI:<project.version>
O sonar é usado para analisar a qualidade do código. Você pode iniciar um servidor Sonar local (acessível em http: // localhost: 9001) com:
docker-compose -f src/main/docker/sonar.yml up -d
Você pode executar uma análise do Sonar usando o scanner de sonar ou usando o plugin maven.
Em seguida, execute uma análise do sonar:
mvn -Ptest clean verify jacoco:report sonar:sonar
Se você precisar executar novamente a fase do Sonar, especifique pelo menos a fase de inicialização, já que as propriedades do Sonar são carregadas do arquivo sonar-project.properties.
mvn clean test verify -Ptest jacoco:report
mvn initialize sonar:sonar
A aplicação usa o swagger para a exibição da documentação da API. Para verificar, acesse os links swagger-ui e api-docs. Documentação swagger.io e springdoc.org.
Mais exemplos: documenting-spring-boot-rest-api-springdoc-openapi-3
Ou adicione o caminho abaixo:
http://localhost:8080/swagger-ui.html
http://localhost:8080/api-docs
http://localhost:8080/api/v1/books
http://localhost:8080/api/v1/ratings
Inicialmente só é criada a imagem da API. Posteriormente mostrarei como executar o docker-compose
criado no build, para a execução completa da api com o banco de dados MongoDb.
Ao executar o maven mvn clean package -Pdocker
, é gerado o Dockerfile
e também o docker-compose.yml
. Com o docker-compose é possível inicar a aplicação já com um container docker com Mongo. Inicialmente esse banco estará vazio.
Execute esse comando dentro da pasta target
:
docker-compose up -d
Será iniciado os containers da api e do mongo. Acessando o endereço http://localhost:8080/api/v1/books
, será retornado uma lista vazia.
Para parar os containers, execute:
docker-compose stop
Pelo pom.xml
é possível configurar a criação do arquivo docker-compose
. Inicialmente a porta do container mongo está exposta, mas é só modificar o arquivo docker-compose
e remover, pois a comunicação entre a api e o banco é via network
interno entre os containers.
Dentro da pasta do projeto, execute:
mvn clean package install
Após compilar o projeto, dentro da pasta target
, inicie o projeto (x.x.x é a versão atual do projeto):
cd target
nohup java -jar virtuallibraryapi-x.x.x.jar & tail -f nohup.out
Para encerrar o projeto, execute o comando abaixo:
ps -ef | grep virtuallibraryapi
O comando acima exibirá o id do processo, após ver o id do processo, execute:
kill -9 <id_processo>
Dentro da pasta target
é criado os arquivos start.sh
e stop.sh
. Esses arquivos não são executáveis e precisam ser modificados:
cd target
chmod a+x start.sh stop.sh
Para iniciar o projeto, execute (dentro da pasta target
):
./start.sh
Para encerrar o projeto, execute (dentro da pasta target
):
./stop.sh
Nada será necessário, o projeto é executado como Fat jar
. Mas para produção e homologação, é possível usar as imagens geradas pelo comando: mvn clean package -Pdocker
. Muito importante para o uso do CI.
O projeto usa o mongo para banco de dados. Recomendo que utilize o projeto danielso2007/dockerMongoDB para executar o mongo em docker. Há dois arquivos book.js
e rating.js
que podem ser usados para importar dados no banco.
Segue a configuração padrão do banco, mas cada profile do POM
tem seu database.
- host: localhost
- port: 27017
- database: virtuallibraryapi
- username: root
- password: 112358
Execute o arquivo ./mongoimport.sh
e informe:
- Importando arquivo para o MongoDB...
- Infome o nome do banco de dados:
virtuallibraryapi
- Infome collection:
book
- Infome o nome do arquivo JSON:
book.json
Depois para o rating
:
- Importando arquivo para o MongoDB...
- Infome o nome do banco de dados:
virtuallibraryapi
- Infome collection:
rating
- Infome o nome do arquivo JSON:
rating.json
- Java
- Spring Boot
- Maven
- Undertow - Servidor Web
- Modelmapper - Simple, Intelligent, Object Mapping
- Project Lombok
- QueryDsl - type-safe SQL-like queries - fluent API
- Swagger
- Standard-version
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
Usamos SemVer para versionar. Para as versões disponíveis, consulte as tags neste repositório.
- Daniel Oliveira - Initial work - danielso2007
See also the list of contributors who participated in this project.