Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alefcarlos/calculator-echo
Uma cálculadora de modelos utilizando o framework Echo para estudos
https://github.com/alefcarlos/calculator-echo
api calculator echo echo-server go golang learning learning-by-doing web
Last synced: about 2 months ago
JSON representation
Uma cálculadora de modelos utilizando o framework Echo para estudos
- Host: GitHub
- URL: https://github.com/alefcarlos/calculator-echo
- Owner: alefcarlos
- License: mit
- Created: 2018-03-27T03:25:02.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-04-01T17:34:05.000Z (almost 7 years ago)
- Last Synced: 2024-08-03T23:28:48.169Z (5 months ago)
- Topics: api, calculator, echo, echo-server, go, golang, learning, learning-by-doing, web
- Language: Go
- Homepage:
- Size: 18.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-golang-repositories - calculator-echo
README
# Calculadora de modelos em GO
## Apredizado
Projeto criado utilizando o framework Echo penasndo no aprendizado.
## Dependêncas
Utilizo o `dep` como gerenciador de pacotes.
>[Baixe](https://github.com/golang/dep/releases) o binário para seu SO no seu $GOROOT/bin
## Rodar local
### Rodar usando go run webapi
```
dep ensure
go run src/cmd/webapi/main.go
```## Rodar usando docker
### Clear compose cache(caso necessário)
```cmd
docker-compose rm
```### Builder docker-compose
```cmd
docker-compose up --build
```>As vezes dá uns paus, então rodar por partes:
```cmd
docker-compose build --no-cache
docker-compose up
```# Como usar
## Cadastrar fórmulas
> Fórmula é a maneira de cálculo de uma determinada requisição
Encontramos a melhor fórmula através da resolução do campo `findFormula`, caso duas ou mais fórmulas sejam encontradas, devemos pegar a com maior prioridade.
`POST /recipes` passando o seguinte JSON:
```json
{
"name": "Formula Ganhe Online",
"displayText": "DZ 5 por 1 R$",
"findFormula": "(sponsor == '4334343' && date > '2018-02-01' && date < '2018-02-28 23:59:59')",
"formula":"purchaseValue * 5",
"priority": 1,
"isExtra": false,
"usedMaterials": {"sponsorId": "4334343"}
}
```## Testar fórmulas
> Obtemos as variáveis da requisição a partir do mapeamento da mesma
`POST /calculate/preview` passando o seguinte JSON:
```json
{
"sourceCode": "v1/pos/purchases",
"body": {
"locator": "10",
"storeCode": "MATRIZ",
"deviceCode": "41",
"purchaseDate": "2018-02-09T19:39:43.564Z",
"shopperIdentification": "43574989881",
"employeeIdentification": "43574989881",
"calculatePoints": false,
"offerCode": "GDkqlEVZREMw0pj",
"points": 10,
"items": [
{
"sku": "132312312",
"ean": "0768421222301",
"quantity": 2,
"unitPrice": 8.0,
"itemPrice": 16.0,
"supplierIdentification": "43824418000126",
"name": "ARROZ INTEGRAL",
"discount": 0.0,
"offerCode": "GDkqlEVZREMw0pj",
"points": 1
}
],
"purchaseValue": 560,
"payments": [
{
"paymentType": 1,
"bin": "",
"amount": 16.00
}
]
},
"extraValues": [
{
"key": "sponsor",
"value": "4334343"
}
]
}
```# Modelos de cálculos
> São os modelos mapeados com a maneira de como extrair variáveis
Todos os modelos de cálculos devem ser criados na pasta `src/internal/calculationModels` e devem implementar a interface `interfaces.Calculator`
```golang
GetMaterials(extraValues []viewModels.CalculateExtraValue) map[string]interface{}
GetExtraItemsMaterials(bodyMaterials map[string]interface{}) []*viewModels.ExtraItem
```> `GetMaterials` retorna todas as variáveis contidas no modelo
> `GetExtraItemsMaterials` retorna todas as variáeis contidas nos itens extras de uma requisição
> **Devemos também criar uma cosntante contendo a identificação do modelo(SourceCod) em `src/internal/viewModels/calculate.go`**
## Modelos existentes
* v1/pos/purchase
## v1/pos/purchase
JSON representando a requisição
```json
{
"locator": "10",
"storeCode": "MATRIZ",
"deviceCode": "41",
"purchaseDate": "2018-02-09T19:39:43.564Z",
"shopperIdentification": "43574989881",
"employeeIdentification": "43574989881",
"calculatePoints": false,
"offerCode": "GDkqlEVZREMw0pj",
"points": 10,
"items": [
{
"sku": "132312312",
"ean": "0768421222301",
"quantity": 2,
"unitPrice": 8.0,
"itemPrice": 16.0,
"supplierIdentification": "43824418000126",
"name": "ARROZ INTEGRAL",
"discount": 0.0,
"offerCode": "GDkqlEVZREMw0pj",
"points": 1
}
],
"purchaseValue": 560,
"payments": [
{
"paymentType": 1,
"bin": "",
"amount": 16.00
}
]
}
```## Variáveis
As variáveis disponíveis para uso são:
### Base
* date - Data da compra
* purchaseValue - Valor total da compra
* storeCode - Identificação da Loja
* deviceCode - Identificação PDV### Itens extra
> Retorna uma lista com os campos abaixo, cada item terá essas informações
* sku - Identificação do item
* unitPrice - Valor unitário do item
* quantity - Quantidade comprada
* totalItemPrice - quantity * unitPrice# Fórmulas
Um JSON representando uma entidade de fórmula
```json
{
"name": "Formula Por loja",
"displayText": "DZ 15 por 1 R$(storeCode)",
"findFormula": "(sponsor == '4334343' && storeCode in ('MATRIZ') && date > '2018-02-01' && date < '2018-02-29 23:59:59')",
"formula":"purchaseValue * 15",
"priority": 2,
"isExtra": false,
"usedMaterials": {"sponsorId": "4334343"}
}
```## Explicação dos campos
`name` - Identificação da fórmula
`displayText` - Descrição de como apareceria no extrato do cliente
`findFormula` - Fórmula de match com a requisição utilizando variáveis, o resultado esperado é um boolean
`formula` - Fórmula de cálculo, pode-se usar variáveis ou somente valor fixo, exemplo: purchaseValue * 5 ou 1500, o resultado esperado é um float64
`priority` - Indica prioridade das fórmula, quando encontrada duas através do findFormula, a com maior será a escolhida
`isExtra` - Indica se essa fórmula é específica para Cálculos de Dotz Extras
`usedMaterials` - Indica a lista de variáveis utilizadas na fórmula