Skip to content
This repository has been archived by the owner on Dec 4, 2024. It is now read-only.

Commit

Permalink
Merge pull request #41 from 7SOATSquad30/docs/add-how-to-run
Browse files Browse the repository at this point in the history
docs: add how to run
  • Loading branch information
MuriloKakazu authored Jul 30, 2024
2 parents 970b44b + aeaf49e commit b1c9023
Show file tree
Hide file tree
Showing 4 changed files with 190 additions and 27 deletions.
185 changes: 185 additions & 0 deletions HOW_TO_RUN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
# Como rodar

## Pré-requisitos

- java jdk 21
- gradle
- docker
- docker compose
- ngrok
- minikube
- kubectl

## Subindo a infra

```sh
docker-compose up -d database
```

## Opcional: configurar integração com mercadopago

### Criar tunnel para integração com ngrok
```
ngrok http 8080
```

### Configure a url do ngrok
Na variavel de ambiente `MERCADOPAGO_NOTIFICATIONS_URL` ou no arquivo `src/main/resources/application-dev.properties`
Configure a url do ngrok com a rota `/webhooks/mercadopago`

Exemplo:
```
https://e916-189-29-149-200.ngrok-free.app/webhooks/mercadopago
```

### Prepare o usuário de testes no app do mercado pago
Para essa etapa, consulte um dos membros da equipe para pegar o username e senha do usuário de testes.

## Executando a aplicação

### Build
```sh
./gradlew build
```

### Executar a aplicação
```sh
./gradlew bootRun
```
Para parar a aplicação, basta apertar CTRL+C no terminal (SIGINT)

A aplicação subirá na porta 8080, e a documentação das rotas pode ser acessada via swagger:
http://localhost:8080/swagger-ui/index.html

## Testando as features

Abra o swagger e siga o passo a passo:
http://localhost:8080/swagger-ui/index.html

### Faça o cadastro do cliente
Na rota `/customers`, execute o método `POST` com um payload de exemplo:
```
{
"name": "Murilo",
"cpf": "905.922.410-84",
"email": "[email protected]"
}
```

### Crie um pedido para o cliente
Na rota `/orders`, execute o método `POST` com o cpf do cliente:
```
{
"cpf": "905.922.410-84"
}
```
Guarde o ID do pedido para usar nos próximos passos

### Adicione produtos ao pedido
Na rota `/orders/{orderId}/products`, execute o método `POST` com um produto e a quantidade, exemplo:
```
{
"productId": 10,
"quantity": 3
}
```

Opcionalmente, adicione outros produtos ao pedido.
E também é possível remover produtos na rota `/orders/{orderId}/products/{productId}`, método `DELETE`

### Submeta o pedido e faça o pagamento
Na rota `/order/{orderId}/submit`, execute o método `POST`

Depois disso, faça o pagamento. Existem 2 opções:

#### MercadoPago

OBS: para fazer pagamento via MercadoPago, é necessário ter configurado a integração do MercadoPago. Caso contrário, siga pelo pagamento em dinheiro.

##### Gere o QR Code
Na rota `/payments/{orderId}/qrcode`, execute o método `POST`
Será retornado um payload com atributo `qrCodeData`. Use um serviço tipo https://www.qr-code-generator.com/solutions/text-qr-code/ para gerar a imagem do QR Code a partir desses dados.

##### Faça o pagamento via app MercadoPago
Logue no usuário de teste no app do Mercado Pago (credenciais com membros do time) e escaneie o QR Code e conclua o pagamento.

#### Dinheiro
Na rota `/payments/{orderId}/collect`, execute o método `POST`, passando o valor pago:
```
{
"amount": 123.50
}
```

### Verifique que o pagamento foi efetuado
Na rota `/orders/{orderId}`, execute o método `GET`
Verifique o estado de pagamento no payload de resposta:

```
[...]
"payment": {
"status": "COLLECTED",
"amount": 123.50
}
```

O status `COLLECTED` indica que o pagamento foi efetuado.

### Inicie o preparo do pedido
Na rota `/orders/{orderId}/prepare`, execte o método `POST`

### Consulte o painel de pedidos em andamento
Na rota `/orders/by-status`, execute o método `GET` com o parâmetro `status=PREPARING`

### Finalize o preparo do pedido
Na rota `/orders/{orderId}/ready`, execte o método `POST`

### Consulte o painel de pedidos prontos
Na rota `/orders/by-status`, execute o método `GET` com o parâmetro `status=READY`

### Marque o pedido como entregue
Na rota `/orders/{orderId}/deliver`, execte o método `POST`

### Note que o pedido não está mais no painel
Na rota `/orders`, execute o método `GET`

# Tudo certo! ;)

## Como subir tudo no k8s
OBS: Se você subiu tudo local, derrube a infra e a aplicação antes!

### Prepare o cluster
suba o cluster local com minikube:
```
minikube start
```

### Suba os recursos no cluster
```
# metric server
kubectl apply -f ./k8s/metrics.yaml
# database
kubectl create configmap cm-init --from-file=init.sql
kubectl apply -f ./k8s/configmap.yaml
kubectl apply -f ./k8s/postgres-pv.yaml
kubectl apply -f ./k8s/postgres-pvc.yaml
kubectl apply -f ./k8s/postgres-svc.yaml
kubectl apply -f ./k8s/postgres-deployment.yaml
# application
kubectl apply -f ./k8s/api-svc.yaml
kubectl apply -f ./k8s/api-hpa.yaml
kubectl apply -f ./k8s/api-deployment.yaml
```

### Espere os pods da API subirem no cluster
Rode o comando `kubectl get pods` e espere os pods da API ficarem com estado `READY`
Isso pode levar alguns minutos pois a imagem docker do deployment tem cerca de 1GiB

### Com os pods rodando, crie um encaminhamento de porta para testar local:
```
kubectl port-forward -n default service/api-svc 30007:80
```

Pronto! Agora só executar o mesmo passo a passo descrito acima
28 changes: 3 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,31 +16,9 @@ https://miro.com/app/board/uXjVKWnjhHY=/?share_link_id=867288089876
- Docker & Docker Compose
- Make

## Como executar a aplicação

### Subindo a infraestrutura
```sh
make infrastucture/up
```

### Build
```sh
make build
```

### Executando a aplicação
```sh
make run
```
Para parar a aplicação, basta apertar CTRL+C no terminal (SIGINT)

A aplicação subirá na porta 8080, e a documentação das rotas pode ser acessada via swagger:
http://localhost:8080/swagger-ui/index.html

### Derrubar a infraestrutura
```sh
make down
```
## Como executar, testar, etc?

Leia o passo a passo no arquivo [HOW_TO_RUN.md](HOW_TO_RUN.md)

## Estrutura do banco de dados

Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application-dev.properties
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ integrations.mercadopago.public-key=APP_USR-f597bfbc-e6dd-43db-9061-64652759b605
integrations.mercadopago.access-token=APP_USR-5669469328830836-072119-fbf214281e7130fae8bbf302da74c439-1910105219
integrations.mercadopago.app-user-id=1910105219
integrations.mercadopago.point-of-sale-id=STORE00001POS001
integrations.mercadopago.notifications-url=https://e916-189-29-149-200.ngrok-free.app/webhooks/mercadopago
integrations.mercadopago.notifications-url=${MERCADOPAGO_NOTIFICATIONS_URL:https://e916-189-29-149-200.ngrok-free.app/webhooks/mercadopago}
2 changes: 1 addition & 1 deletion src/main/resources/application-test.properties
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ integrations.mercadopago.public-key=APP_USR-f597bfbc-e6dd-43db-9061-64652759b605
integrations.mercadopago.access-token=APP_USR-5669469328830836-072119-fbf214281e7130fae8bbf302da74c439-1910105219
integrations.mercadopago.app-user-id=1910105219
integrations.mercadopago.point-of-sale-id=STORE00001POS001
integrations.mercadopago.notifications-url=https://e916-189-29-149-200.ngrok-free.app/webhooks/mercadopago
integrations.mercadopago.notifications-url=${MERCADOPAGO_NOTIFICATIONS_URL:https://e916-189-29-149-200.ngrok-free.app/webhooks/mercadopago}

0 comments on commit b1c9023

Please sign in to comment.