Skip to content

danielso2007/virtualLibraryAPI

Repository files navigation

Actions Status codecov Quality Gate Status GitHub package version GitHub pull requests GitHub issues GitHub last commit GitHub issue/pull request author GitHub contributors GitHub top language GitHub GitHub All Releases Conventional Commits

Virtual Library API

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.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

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.

Installing

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

Test

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.

Code test coverage

É 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.

Running with docker

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>

Code quality

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

Documentação da API - swagger (OpenAPI 3):

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

Teste o endereço docker (login: admin / password: admin):

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.

Running with docker-compose

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.

Running (No docker)

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

Stopping project

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>

Scripts de execução e encerramento do projeto

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

Deployment

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.

Banco de dados

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

Built With

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Versioning

Usamos SemVer para versionar. Para as versões disponíveis, consulte as tags neste repositório.

Authors

See also the list of contributors who participated in this project.