Coder Social home page Coder Social logo

tastytap's Introduction

java spring docker [mysql] [kubernetes]


Tastytap

Sobre o Projeto

Projeto atualizado para a segunda entrega da pós graduação em Software Architecture da FIAP.

Link do miro: https://miro.com/app/board/uXjVKTJ4mvk=/?share_link_id=556895060297

Link do desenho da arquitetura: https://drive.google.com/file/d/186D8N2BxR907FRHDmWTzllt5tJ4GfxJi/view?usp=drive_link

Começando

Para executar o projeto em sua máquina siga os seguintes passos.

Pré-requisitos

  • Docker com compose Veja a documentação para instalar o docker no seu sistema se ainda não tiver instalado.

Instalação

A instalação é bem simples, siga as seguintes etapas:

  1. Clone o repositório
    git clone https://github.com/gabrielronei/tastytap.git
  2. Entre na pasta do projeto
    cd tastytap
  3. Agora execute o projeto usando o docker compose
    docker compose up
  4. Para acessar a documentação no swagger, acesse em seu navegador.
    http://localhost:8080/
    

Kubernetes

Da para rodar localmente nossa arquitetura usando o minikube, siga os seguintes passos:

  1. Inicie o minikube
    minikube start
  2. Entre na pasta do kubernetes dentro do nosso projeto
    cd kubernetes/
  3. Agora execute o script
    bash configure.sh
  4. Só acessar a url com ip do cluster que foi mostrado na execução do script
    http://IP_DO_CLUSTER:30000/

Exemplos de requests

Temos o arquivo tastytap-fiap.postman_collection.json que pode ser importado no Postman ou em seu API Client de preferência(insomnia, testfully e etc), já estão estruturadas na ordem correta, ou caso prefira, pode seguir os exemplos abaixo:

1. Criar usuário (opcionalmente):
// GET /user
{
"name": "Saul Hudson",
"email": "[email protected]",
"cpf": "285.977.970-10"
}
2. Buscar usuário por CPF (opcionalmente):
// GET /user/285.977.970-10
3. Criar produto de tipo lanche:
// POST /product
{
"name": "Universitario",
"description": "Pão de brioche selado na manteiga, hambúrguer artesanal 160g, queijo cheddar, alface, tomate e molho john's",
"imageURL": "https://assets.unileversolutions.com/recipes-v2/106684.jpg",
"category": "SANDWICH",
"price": 33.90
}
4. Criar produto de tipo lanche para atualizar e deletar:
// POST /product
{
"name": "Produto para deletar e atualizar",
"description": "XPTOPTOPTO",
"imageURL": "https://assets.unileversolutions.com/recipes-v2/106684.jpg",
"category": "SIDE_DISH",
"price": 10
}
5. Criar produto de tipo bebida:
// POST /product
{
"name": "Coca-Cola Original 350ml",
"description": "Lata 350ml",
"imageURL": "https://hiperideal.vtexassets.com/arquivos/ids/197362/55723-4.jpg",
"category": "DRINK",
"price": 7.90
}
6. Criar produto de tipo sobremesa:
// POST /product
{
"name": "Pudim cremoso individual",
"description": "Pudim cremoso e sem furinho",
"imageURL": "https://revistamenu.com.br/wp-content/uploads/sites/24/2020/05/diadopudim-1.jpg",
"category": "DESSERT",
"price": 13.90
}
7. Atualizar produto:
// PUT /product
{
"id": 2,
"description": "descricão novissima",
"imageURL": "https://assets.unileversolutions.com/recipes-v2/106684.jpg",
"price": 1
}
8. Buscar por categoria:
// GET /product/SIDE_DISH
9. Deletar por id:
// DELETE /product/2
10. Criar um pedido(com usuario):
// POST /order

{
"cpf": "285.977.970-10",
"items": [
  {
    "productId": 1,
    "quantity": 2
  },
  {
    "productId": 3,
    "quantity": 2
  }
]
}
11. Criar um pedido(sem usuario):
// POST /order

{
"items": [
  {
    "productId": 1,
    "quantity": 2
  }
]
}
12. Busca todos os pedidos:
// GET /order
13. Chama webhook que seria chamado pelo gateway:
// POST /payment/provider/webhook
{
"transactionId": "{{TRANSACTION_ID}}",
"status": "APPROVED"
}
14. Checa status pelo numero do pedido:
// GET /order/{{ORDER_NUMBER}}/status
15. Atualiza status do pedido:
// GET /order/{{ORDER_NUMBER}}/status

Por dentro de nossa arquitetura

Nós fizemos os componentes da nossa aplicação bem desacoplados, protegendo nosso nucleo do sistema ao máximo, seguindo a ideia da clean architecture.

Basicamente a nossa divisão dos pacotes funciona da seguinte maneira:

  • Domain: este é o core da nossa aplicação, lá se encontram nossos objetos de negócio que encapsulam as regras centrais de nosso sistema.
  • Application: aqui é onde se encontram nossos casos de uso, que definem as logicas especificas de nosso negócio, essa camada orquestra o fluxo de dados entre as entidades e outras camadas externas.
  • Utils: é onde se encontram alguns recursos uteis para aplicação no geral, ele consegue centralizar algumas lógicas/validações/formatações, para que mantenham-se as assinaturas independente da implementação.
  • Infraestructure: aqui estão nossas pontes com a camada de aplicação em conjunto com o framework, é onde eles se juntam.
  • Presentation: Onde ficam nossos endpoints, a comunicação com nossa camada mais externa, que no caso desse projeto, é somente web.

Arquitetura da infraestrutura

Temos nossa infraestrutura com um LoadBalancer na aplicação principal(tastytap), para suportar grande volume de requisições simultaneas, onde o minimo são 2 máquinas e podendo escalar até 6. image

(Voltar para o topo)

tastytap's People

Contributors

gabrielronei avatar thaisandre avatar

Stargazers

Thiago S Adriano avatar Vinícius Louzada avatar

Watchers

 avatar  avatar

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.