Projeto criado utilizando o framework Echo penasndo no aprendizado.
Utilizo o dep
como gerenciador de pacotes.
Baixe o binário para seu SO no seu $GOROOT/bin
dep ensure
go run src/cmd/webapi/main.go
docker-compose rm
docker-compose up --build
As vezes dá uns paus, então rodar por partes:
docker-compose build --no-cache
docker-compose up
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:
{
"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"}
}
Obtemos as variáveis da requisição a partir do mapeamento da mesma
POST /calculate/preview
passando o seguinte 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"
}
]
}
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
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
- v1/pos/purchase
JSON representando a requisição
{
"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
}
]
}
As variáveis disponíveis para uso são:
- date - Data da compra
- purchaseValue - Valor total da compra
- storeCode - Identificação da Loja
- deviceCode - Identificação PDV
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
Um JSON representando uma entidade de fórmula
{
"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"}
}
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