{"id":13713874,"url":"https://github.com/alefcarlos/calculator-echo","last_synced_at":"2025-08-19T08:35:40.162Z","repository":{"id":86065203,"uuid":"126923220","full_name":"alefcarlos/calculator-echo","owner":"alefcarlos","description":"Uma cálculadora de modelos utilizando o framework Echo para estudos","archived":false,"fork":false,"pushed_at":"2018-04-01T17:34:05.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-08-03T23:28:48.169Z","etag":null,"topics":["api","calculator","echo","echo-server","go","golang","learning","learning-by-doing","web"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alefcarlos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-27T03:25:02.000Z","updated_at":"2023-04-11T15:22:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"fa3afe93-e36c-4d0d-8058-7d647b2211ff","html_url":"https://github.com/alefcarlos/calculator-echo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alefcarlos%2Fcalculator-echo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alefcarlos%2Fcalculator-echo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alefcarlos%2Fcalculator-echo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alefcarlos%2Fcalculator-echo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alefcarlos","download_url":"https://codeload.github.com/alefcarlos/calculator-echo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224547004,"owners_count":17329413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","calculator","echo","echo-server","go","golang","learning","learning-by-doing","web"],"created_at":"2024-08-02T23:01:46.583Z","updated_at":"2024-11-14T00:31:43.470Z","avatar_url":"https://github.com/alefcarlos.png","language":"Go","funding_links":[],"categories":["Repositories"],"sub_categories":[],"readme":"# Calculadora de modelos em GO\n\n## Apredizado\n\nProjeto criado utilizando o framework Echo penasndo no aprendizado.\n\n## Dependêncas\n\nUtilizo o `dep` como gerenciador de pacotes.\n\n\u003e[Baixe](https://github.com/golang/dep/releases) o binário para seu SO no seu $GOROOT/bin\n\n## Rodar local\n\n### Rodar usando go run webapi\n```\ndep ensure\ngo run src/cmd/webapi/main.go\n```\n\n##  Rodar usando docker\n\n### Clear compose cache(caso necessário)\n```cmd\ndocker-compose rm\n```\n\n### Builder docker-compose\n```cmd\ndocker-compose up --build\n```\n\n\u003eAs vezes dá uns paus, então rodar por partes:\n\n```cmd\ndocker-compose build --no-cache\ndocker-compose up\n```\n\n\n# Como usar\n\n## Cadastrar fórmulas\n\n\u003e Fórmula é a maneira de cálculo de uma determinada requisição\n\nEncontramos 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.\n\n`POST /recipes` passando o seguinte JSON:\n\n```json\n{\n \"name\": \"Formula Ganhe Online\",\n \"displayText\": \"DZ 5 por 1 R$\",\n \"findFormula\": \"(sponsor == '4334343' \u0026\u0026 date \u003e '2018-02-01' \u0026\u0026 date \u003c '2018-02-28 23:59:59')\",\n \"formula\":\"purchaseValue * 5\",\n \"priority\": 1,\n \"isExtra\": false,\n \"usedMaterials\": {\"sponsorId\": \"4334343\"}\n}\n``` \n\n## Testar fórmulas\n\n\u003e Obtemos as variáveis da requisição a partir do mapeamento da mesma\n\n`POST /calculate/preview` passando o seguinte JSON:\n\n```json\n{\n  \"sourceCode\": \"v1/pos/purchases\",\n  \"body\": {\n    \"locator\": \"10\",\n    \"storeCode\": \"MATRIZ\",\n    \"deviceCode\": \"41\",\n    \"purchaseDate\": \"2018-02-09T19:39:43.564Z\",\n    \"shopperIdentification\": \"43574989881\",\n    \"employeeIdentification\": \"43574989881\",\n    \"calculatePoints\": false,\n    \"offerCode\": \"GDkqlEVZREMw0pj\",\n    \"points\": 10,\n    \"items\": [\n      {\n        \"sku\": \"132312312\",\n        \"ean\": \"0768421222301\",\n        \"quantity\": 2,\n        \"unitPrice\": 8.0,\n        \"itemPrice\": 16.0,\n        \"supplierIdentification\": \"43824418000126\",\n        \"name\": \"ARROZ INTEGRAL\",\n        \"discount\": 0.0,\n        \"offerCode\": \"GDkqlEVZREMw0pj\",\n        \"points\": 1\n      }\n    ],\n    \"purchaseValue\": 560,\n    \"payments\": [\n      {\n        \"paymentType\": 1,\n        \"bin\": \"\",\n        \"amount\": 16.00\n      }\n    ]\n  },\n  \"extraValues\": [\n    {\n      \"key\": \"sponsor\",\n      \"value\": \"4334343\"\n    }\n  ]\n}\n```\n\n# Modelos de cálculos\n\n\u003e São os modelos mapeados com a maneira de como extrair variáveis\n\nTodos os modelos de cálculos devem ser criados na pasta `src/internal/calculationModels` e devem implementar a interface `interfaces.Calculator`\n\n```golang\nGetMaterials(extraValues []viewModels.CalculateExtraValue) map[string]interface{}\nGetExtraItemsMaterials(bodyMaterials map[string]interface{}) []*viewModels.ExtraItem\n```\n\n\u003e `GetMaterials` retorna todas as variáveis contidas no modelo\n\n\u003e `GetExtraItemsMaterials` retorna todas as variáeis contidas nos itens extras de uma requisição\n\n\u003e **Devemos também criar uma cosntante contendo a identificação do modelo(SourceCod) em `src/internal/viewModels/calculate.go`**\n\n## Modelos existentes\n\n* v1/pos/purchase\n\n## v1/pos/purchase\n\nJSON representando a requisição\n\n```json\n{\n    \"locator\": \"10\",\n    \"storeCode\": \"MATRIZ\",\n    \"deviceCode\": \"41\",\n    \"purchaseDate\": \"2018-02-09T19:39:43.564Z\",\n    \"shopperIdentification\": \"43574989881\",\n    \"employeeIdentification\": \"43574989881\",\n    \"calculatePoints\": false,\n    \"offerCode\": \"GDkqlEVZREMw0pj\",\n    \"points\": 10,\n    \"items\": [\n      {\n        \"sku\": \"132312312\",\n        \"ean\": \"0768421222301\",\n        \"quantity\": 2,\n        \"unitPrice\": 8.0,\n        \"itemPrice\": 16.0,\n        \"supplierIdentification\": \"43824418000126\",\n        \"name\": \"ARROZ INTEGRAL\",\n        \"discount\": 0.0,\n        \"offerCode\": \"GDkqlEVZREMw0pj\",\n        \"points\": 1\n      }\n    ],\n    \"purchaseValue\": 560,\n    \"payments\": [\n      {\n        \"paymentType\": 1,\n        \"bin\": \"\",\n        \"amount\": 16.00\n      }\n    ]\n  }\n```\n\n## Variáveis\n\nAs variáveis disponíveis para uso são:\n\n### Base\n\n* date - Data da compra\n* purchaseValue - Valor total da compra\n* storeCode - Identificação da Loja\n* deviceCode - Identificação PDV\n\n### Itens extra\n\n\u003e Retorna uma lista com os campos abaixo, cada item terá essas informações\n\n* sku - Identificação do item\n* unitPrice - Valor unitário do item\n* quantity - Quantidade comprada\n* totalItemPrice - quantity * unitPrice\n\n# Fórmulas\n\nUm JSON representando uma entidade de fórmula\n\n```json\n{\n    \"name\": \"Formula Por loja\",\n    \"displayText\": \"DZ 15 por 1 R$(storeCode)\",\n    \"findFormula\": \"(sponsor == '4334343' \u0026\u0026 storeCode in ('MATRIZ') \u0026\u0026 date \u003e '2018-02-01' \u0026\u0026 date \u003c '2018-02-29 23:59:59')\",\n    \"formula\":\"purchaseValue * 15\",\n    \"priority\": 2,\n    \"isExtra\": false,\n    \"usedMaterials\": {\"sponsorId\": \"4334343\"}\n}\n```\n\n## Explicação dos campos\n\n`name` - Identificação da fórmula\n\n`displayText` - Descrição de como apareceria no extrato do cliente\n\n`findFormula` - Fórmula de match com a requisição utilizando variáveis, o resultado esperado é um boolean\n\n`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\n\n`priority` - Indica prioridade das fórmula, quando encontrada duas através do findFormula, a com maior será a escolhida\n\n`isExtra` - Indica se essa fórmula é específica para Cálculos de Dotz Extras\n\n`usedMaterials` - Indica a lista de variáveis utilizadas na fórmula","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falefcarlos%2Fcalculator-echo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falefcarlos%2Fcalculator-echo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falefcarlos%2Fcalculator-echo/lists"}