Code Monkey home page Code Monkey logo

virtuallibraryapi's Introduction

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.

virtuallibraryapi's People

Contributors

danielso2007 avatar dependabot[bot] avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

virtuallibraryapi's Issues

feat: Adicionar sorting nos parâmetros de consulta

Sorting is determined through the use of the ‘sort’ query string parameter. The value of this parameter is a comma-separated list of sort keys. Sort directions can optionally be appended to each sort key, separated by the ‘:’ character.

The supported sort directions are either ‘asc’ for ascending or ‘desc’ for descending.

The caller may (but is not required to) specify a sort direction for each key. If a sort direction is not specified for a key, then a default is set by the server.

For example:

Only sort keys specified:
sort=key1,key2,key3
‘key1’ is the first key, ‘key2’ is the second key, etc.
Sort directions are defaulted by the server
Some sort directions specified:
sort=key1:asc,key2,key3
Any sort key without a corresponding direction is defaulted
‘key1’ is the first key (ascending order), ‘key2’ is the second key (direction defaulted by the server), etc.
Equal number of sort keys and directions specified:
sort=key1:asc,key2:desc,key3:asc
Each key is paired with the corresponding direction
‘key1’ is the first key (ascending order), ‘key2’ is the second key (descending order), etc.
Note that many projects have implemented sorting using repeating ‘sort_key’ and ‘sort_dir’ query string parameters, see [1]. As these projects adopt these guidelines, they should deprecate the older parameters appropriately.

https://specs.openstack.org/openstack/api-wg/guidelines/pagination_filter_sort.html

feat: Spring usando o OpenAPI 3.0

Adicionar o OpenAPI 3.0 no projeto.

A documentação é uma parte essencial da construção de APIs REST. Neste tutorial, veremos o SpringDoc - uma ferramenta que simplifica a geração e manutenção de documentos da API, com base na especificação OpenAPI 3, para aplicativos Spring Boot 1.xe 2.x.

Para que o springdoc-openapi gere automaticamente os documentos de especificação do OpenAPI 3 para nossa API, basta adicionar a dependência do springdoc-openapi-ui ao nosso pom.xml.

O link para exemplo está aqui.

Usar também esse link aqui.

feat: Usar o princípio ISP - Interface Segregation Principle

Usar o ISP nas interfaces:

  • Controllers
  • Serviços
  • Entidades

O Princípio da Segregação de Interface nos alerta quanto à dependência em relação a “interfaces gordas”, forçando que classes concretas implementem métodos desnecessários e causando um acoplamento grande entre todos os clientes.

Ao usarmos interfaces mais específicas, quebramos esse acoplamento entre as classes clientes, além de deixarmos as implementações mais limpas e coesas.

feat: Modificar a arquitetura de controller

Modificar a arquitetura da camada de controller utilizando interfaces e deixar o spring controlar as injeções e dependências.

Será usado para, também, organização do código.

Verificar como será o teste dessas interfaces.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.