/burger-server

Burger Sale - Server Side

Primary LanguageJava

burger-server

Burger Sale - Server Side

Este repositório contém somente a aplicação server(back-end) para ter a aplicação rodando completamente é necessário subir a aplicação cliente(front-end) em paralelo conforme instruções.

Aplicação client https://github.com/danielsmanioto/burger-client

Aplicação server https://github.com/danielsmanioto/burger-server

Aplicação de testes (funcionais) https://github.com/danielsmanioto/burger-test

Swagger - Documentação da API http://localhost:80/swagger-ui.html

API rodando no Heroku https://ds-burger-server.herokuapp.com/swagger-ui.html

Overview Projeto

Server/API - Arquitetura e Design

Class Diagram

Instruções de como executar com Docker

cd devops execute o arquivo build.sh (exemplo no linux-> ./build.sh)
execute o arquivo run.sh
Verificar se API está no ar -> http://localhost:80

Agora siga os passos na aplicação client

Instruções de como executar sem Docker

Subir aplicação

mvn clean install && mvn spring-boot:run

Executar os testes e verificar cobertura de testes

mvn clean test

Verificar cobertura de testes:

./target/site/jacoco/index.html

Justificativa design da aplicação

Clean code:​ métodos intuitivos e sem comentários desnecessários;

SOLID:​ Usado os princípios de SOLID para mapeamento e implementação de todas as classes com objetivo de manter o sistema escalável, desacoplado.

MVC:​ Organização em camadas para desacoplar as regras corretamente

Controller ou Resource: Chamada da regra de negócio e disponibilização em Json para o externo;

Service: Regra de negócio;

Repository ou DAO: Regra e persistência com banco de dados ou qualquer que seja o tipo de persistência;

Model: Java bean.

TDD:​ Uso de testes unitários automatizados para garantir a qualidade do código em pequenos blocos e prática em escrever o código antes da regra. Com objetivo final de reduzir o acoplamento e ter um sistema com alta coesão e escalável.

Padrão de projeto Builder: Separar a logica de criação dos objetetos​

Padrão de projeto Strategy: Para separar a regra de discontos

Injeção de dependência e uso de interface:​ no service para garantir um contrato e obrigatoriedade de implementação das regras fundamentais de cada funcionalidade.

API REST verbos: ​Uso de padrões de API para mapeamento correto e intuitivo dos métodos expostos pela API. Organização do projeto: ​Organização dos pacotes do projeto com objetivo de facilitar o entendimento e auxiliar na evolução do sistema.

Testes

Teste Unitário: Garantir cobertura de regra de negocio

Teste de Integração: Garantir que nossa API esteje sempre funcionando e integrando corretamente com outros sistemas.

Teste Funcional: Criado uma aplicação externa(conforme documentação) para realizar os testes funcionais de ponta a ponta.

Tecnologias do back-end:

  • JDK 1.8+
  • Maven
  • Spring-Boot

Requisitos:

  • JDK 1.8
  • Maven
  • Ter um browser instalado na maquina
  • Ter Docker instalado na maquina
  • É necessário instalar o plugin do lombok em sua IDE de preferência.

CI

TravisCI:

Ambientes

  • application.properties : produção (Docker e banco de dados)
  • applications-dev.properties : dev (Docker e banco de dados)
  • applications-local.properties : local (Local com Banco de dados H2)

#Usando no Heroku

heroku login

heroku auth:token

travis encrypt $(heroku auth:token) --add deploy.api_key

cat ~/.netrc