Giter Club home page Giter Club logo

api-lemon's Introduction

API Lemon

Descrição

Essa é uma API construída em Node.js com a finalidade de verificar a viabilidade/elegibilidade de um pontencial cliente da Lemon. Por meio da análise do histórico de contas de energia, tipo de conexão e a classe do cliente essa análise se torna possível, resultando em um calculo final com o valor de CO2 a ser economizado pelo cliente, caso ele comesse a utilizar energia limpa.

Stack Utilizada

  • Node.js
  • Jest
  • Docker
  • Docker Compose

Funcionalidades

  • Validação dos dados de entrada
  • Validação dos critérios de elegibilidade por cliente
  • Calculo de consumo mínimo por cliente para projeção de economia de CO2

Requisitos para execução do projeto

  • Git (≃v2.34.1)
  • Docker (≃v24.0.5)
  • Docker Compose (≃v2.3.3)
  • Node (≃v18.18.0)
  • npm (v9.8.1)

Execução do projeto localmente

Clonar o repositório:

$ git clone [email protected]:viniciussaturnino/api-lemon.git

Acessar a pasta:

$ cd api-lemon

Rodar o container:

$ docker compose up --build

ou:

$ make build

Testes

Comando para rodar a suíte de testes:

$ npm run test

ou:

$ make test

Comando para rodar a suíte de testes com relatório de coverage:

$ npm run cov

ou:

$ make coverage

Requisições

Healthcheck

Está configurada na API, uma rota de verificação de status da aplicação, chamada de healthcheck que retorna um json no seguinte formato caso a aplicação esteja rodando com sucesso:

{
	"uptime": 3.953783992,
	"message": "OK",
	"timestamp": 1698862001840
}

Em caso de falha na API essa rota retorna um status 503 com a mensagem de erro.

Validate

As requisições para verificar elegibilidade de um cliente são feitas pela rota /customer/validate e é um método POST com o seguinte formato:

{
  "numeroDoDocumento": "05561699130",
  "tipoDeConexao": "bifasico",
  "classeDeConsumo": "comercial",
  "modalidadeTarifaria": "convencional",
  "historicoDeConsumo": [
    3878,
    9760,
    5976,
    2797,
    2481,
    5731,
    7538,
    4392,
    7859,
    4160,
    6941,
    4597
  ]
}

Exemplo de Requisição - Elegível

curl --request POST \
  --url http://localhost:3000/customer/validate \
  --header 'Content-Type: application/json' \
  --data '{
  "numeroDoDocumento": "05561699130",
  "tipoDeConexao": "bifasico",
  "classeDeConsumo": "comercial",
  "modalidadeTarifaria": "convencional",
  "historicoDeConsumo": [
    3878,
    9760,
    5976,
    2797,
    2481,
    5731,
    7538,
    4392,
    7859,
    4160,
    6941,
    4597
  ]
}'

Response Body esperado:

{
  "elegivel": true,
  "economiaAnualDeCO2": 5553.24
}

Exemplo de Requisição - Não Elegível

curl --request POST \
  --url http://localhost:3000/customer/validate \
  --header 'Content-Type: application/json' \
  --data '{
  "numeroDoDocumento": "05561699130",
  "tipoDeConexao": "bifasico",
  "classeDeConsumo": "rural",
  "modalidadeTarifaria": "verde",
  "historicoDeConsumo": [
    3878,
    9760,
    5976,
    2797,
    2481,
    5731,
    7538,
    4392,
    7859,
    4160
  ]
}'

Response Body esperado:

{
  "elegivel": false,
  "razoesDeInelegibilidade": [
    "Classe de consumo não aceita",
    "Modalidade tarifária não aceita"
  ]
}

api-lemon's People

Contributors

viniciussaturnino avatar

Watchers

 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.