Skip to content

Back-end de API de radares do projeto B2VN utilizando Java 11, Spring Boot, Spring Security, OAuth2.0, Spring Cloud OpenFeign, QueryDSL e PostgreSQL 11.

License

Notifications You must be signed in to change notification settings

vhnegrisoli/b2vn-radar-api

Repository files navigation

b2vn-radar-api

Back-end de autenticação do projeto B2VN utilizando Java 11, Spring Boot, Spring Security, OAuth2.0, Spring Cloud OpenFeign, QueryDSL e PostgreSQL 11.

Exigências

Para o desenvolvimento, você precisará apenas do JAVA instalado em seu ambiente de trabalho.

Java

O Java é realmente fácil de instalar. Você poderá executar o seguinte comando após o procedimento de instalação abaixo.

$ java -version
java version "11.0.5"

Instalação (Local)

$ git clone https://github.com/vhnegrisoli/b2vn-radar-api.git
$ cd b2vn-radar-api

Build no projeto localmente

$ mvn clean install

Rodando o projeto localmente

Na raiz da aplicação:

$ mvn spring-boot:run

ou

$ cd /target
$ java -jar b2vn-radar-api.jar

Instalação (Docker)

Para começar, como são microsserviços, é necessário ter todos os projetos.

$ git clone https://github.com/vhnegrisoli/b2vn-auth-api.git
$ git clone https://github.com/vhnegrisoli/b2vn-radar-api.git
$ git clone https://github.com/Noninus/b2vn-front.git

Criar network b2vn

$ docker network create b2vn

Build dos projetos

$ docker image build -t b2vn-auth-api .
$ docker image build -t b2vn-radar-api .
$ docker image build -t b2vn-front .

Criar o container com o parametro --name para especificar o network

$ docker container run --network b2vn --name auth -p 8080:8080 -d b2vn-auth-api
$ docker container run --network b2vn --name radar -p 8081:8081 -d b2vn-radar-api
$ docker container run --network b2vn --name front -p 3000:80 b2vn-front

Criar base de dados PostgreSQL para B2VN Auth API

$ docker pull postgres

$ docker pull dpage/pgadmin4

$ docker run --name b2vn-db --network b2vn -e "POSTGRES_PASSWORD=b2vn-auth" -p 5432:5432 -v C:\db -d postgres

$ docker run --name pgadmin4 --network b2vn -p 15432:80 -e "PGADMIN_DEFAULT_EMAIL=victorhugonegrisoli.ccs@gmail.com" -e "PGADMIN_DEFAULT_PASSWORD=b2vn-auth" -d dpage/pgadmin4]

Acesso à base de dados

Acesso em: localhost:15432

host: b2vn-db
port: 5432
db: postgres
username: postgres
password: b2vn-auth

Script de criação da base de dados e inserção dos dados iniciais

CREATE DATABASE b2vn
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    LC_COLLATE = 'en_US.utf8'
    LC_CTYPE = 'en_US.utf8'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1;

CREATE TABLE public.log (
    id int4 NOT NULL,
    usuario_id int4 NOT NULL,
    usuario_nome varchar(120) NOT NULL,
    usuario_email varchar(120) NOT NULL,
    usuario_permissao varchar(120) NOT NULL,
    usuario_descricao varchar(120) NOT NULL,
    tipo_operacao varchar(15) NOT NULL,
    data_acesso timestamp NOT NULL,
    metodo varchar(10) NOT NULL,
    url_acessada varchar(255) NOT NULL,
    servico_nome varchar(20) NOT NULL,
    servico_descricao varchar(20) NOT NULL,
    CONSTRAINT log_pkey PRIMARY KEY (id)
);

CREATE TABLE public.permissao (
    id int4 NOT NULL,
    descricao varchar(255) NOT NULL,
    codigo varchar(10) NULL,
    rate_limit int4 NULL,
    CONSTRAINT permissao_pkey PRIMARY KEY (id)
);

CREATE TABLE public.usuario (
    id int4 NOT NULL,
    cpf varchar(14) NULL,
    data_cadastro timestamp NOT NULL,
    email varchar(255) NOT NULL,
    nome varchar(120) NOT NULL,
    senha varchar(255) NOT NULL,
    ultimo_acesso timestamp NOT NULL,
    fk_permissao int4 NOT NULL,
    CONSTRAINT usuario_pkey PRIMARY KEY (id),
    CONSTRAINT fkqa04ym7nxtsl5oyyw205c4l2q FOREIGN KEY (fk_permissao) REFERENCES permissao(id)
);

INSERT INTO public.permissao (id,descricao,codigo,rate_limit) VALUES 
(1,'Administrador','ADMIN',5)
,(2,'Usuário','USER',2)
;

INSERT INTO public.usuario (id,cpf,data_cadastro,email,nome,senha,ultimo_acesso,fk_permissao) VALUES 
(1,'103.324.589-54','2019-09-19 00:00:00.000','admin@admin.com','Usuário Administrador','$2a$10$NL.sPHyZeR/4Iu8hgbbWSej6qe89F96vwXLnagIDROvS8OShM5ase','2019-11-17 21:21:26.928',1);

CREATE SEQUENCE public.hibernate_sequence
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    START 10038
    CACHE 1
    NO CYCLE;

Funcionalidades

  • Paginação nas consultas para melhoras a eficiência
  • Token de segurança (Oauth2)
  • Log para controle de acesso dos usuários
  • Sistema RBAC (Usuários, administradores, configurações de acesso, permissões)
  • Rate Limiting configurável e baseado no RBAC
  • API baseada em microsserviços: Autenticação, Radares, Trajetos e Controles
  • Saídas em JSON e XML
  • Exportação para CSV
  • Visualização dos radares por lote no Mapa
  • Visualização das consultas em formato de tabelas paginadas

Arquitetura

A arquitetura utilizada é a REST, um protocolo utilizado na integração de Web Services, e estes, são soluções utilizadas para integração e comunicação entre sistemas. Como uma abstração da arquitetura HTTP

RESTful example

Microsserviços

Microsserviços são uma abordagem de arquitetura para a criação de aplicações. O que diferencia a arquitetura de microsserviços das abordagens monolíticas tradicionais é como ela decompõe a aplicação por funções básicas. Cada função é denominada um serviço e pode ser criada e implantada de maneira independente. Isso significa que cada serviço individual pode funcionar ou falhar sem comprometer os demais.

microservices

Portanto, um microsserviço é uma função essencial de uma aplicação e é executado independentemente dos outros serviços. Nós escolhemos sua utilização pois torna o projeto mais seguro e eficaz na questão da escalabilidade do mesmo.

Documentos da API

Diagrama de caso de uso

O Diagrama de Caso de Uso descreve as funcionalidades propostas pelo PhiloPDV e é uma excelente ferramenta para o levantamento dos requisitos funcionais do sistema.interações com elementos externos e entre si.

Caso de Uso - B2VN

Diagrama de implantação

O Diagrama de Implantação descreve a implementação física de informações geradas pelo programa de software em componentes de hardware.

Implantação - B2VN

Documentação (Swagger)

Documentação da autenticação

http://localhost:8080/swagger-ui.html

Documentação dos radares

http://localhost:8081/swagger-ui.html

Teste de Estresse

O JMeter é uma ferramenta desenvolvida totalmente em Java pelo grupo Apache com o objetivo de realizar testes de carga e stress, a seguir faço um roteiro para realização de um teste de stress simples.

1- Primeiramente devemos baixar o JMeter 5.2, para isso clique aqui.

2- Descompactar o conteúdo do arquivo em uma pasta de sua preferência.

3- Inicie a ferramenta executando o jar $pastajmeter/bin/ApacheJMeter.jar.

Stress Test - B2VN

Linguagens & Ferramentas

JAVA

  • Spring Boot é o framework do projeto.
  • Spring Security é uma estrutura que fornece autenticação, autorização e outros recursos de segurança para aplicativos corporativos
  • Oauth2 é o protocolo para autorização.
  • QueryDSL é utilizado para simplificação de consultas ao banco de dados.
  • Spring Data JPA implementa facilmente o JPA.
  • PostgreSQL como banco de dados.
  • OpenFeign para realizar os feign clients.
  • Spring Cloud para ferramentas voltadas a microsserviços.

JavaScript

  • React Map GL é utilizado para visualização do mapa.
  • React é usado para a interface do usuário.
  • axios é utilizado para o client HTTP.
  • sweetalert2 é utilizado para os alertas e mensagens ao usuário.
  • react-table para a visualizações dos dados nas tabelas.
  • react-chartjs-2 utilizado para gerar gráficos dinâmicos.

Apresentação

Telas (site)

Nessa seção é possível visualizar algumas interfaces e algumas funcionalidades já implementadas no site (front-end). Na API é possível executar serviços de comparações, com visualização gráfica, e outras relações.

Tela de Login

login

Tela de Cadastro

cadastro

Tela Inicial

home

Tela do passo a passso para conseguir um Token (Oauth2)

token

Tela do mapa de radares separados por cores

É possível navegar no mapa e escolher um radar para ver mais informações.

mapa

Ao clicar sobre um radar, aparecerá um popup indicando os parâmetros do mesmo.

mapa_clicado

Tela consulta das localizações

localizacoes

Tela consulta da acurácia dos radares

acuracia

Tela consulta das velocidades médias

velocidade_media

Tela consulta da distância entre radares

distancia_radares

Tela para exportação de CSV e PDF

exportacao

Tela para visualização dos usuários do sistema e suas permissões

Nessa tela é possível ver todos os usuários e também conceder a permissão de administrador pelo CPF.

usuarios_list

Telas (swagger)

Nessa seção é possível visualizar algumas URLs desenvovildas do sistema e mostrar, seu retorno e suas exeções.

Tela para visualização dos métodos da API de radares

api_radares

Tela para visualização dos métodos da API de radares

api_radares_2

Autores

Licença de uso

Este projeto está licenciado sob a licença MIT(Instituto de Tecnologia de Massachusetts). Para mais informações consulte nossa LICENSE

About

Back-end de API de radares do projeto B2VN utilizando Java 11, Spring Boot, Spring Security, OAuth2.0, Spring Cloud OpenFeign, QueryDSL e PostgreSQL 11.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published