Skip to content

Instantly share code, notes, and snippets.

@alanwillms
Last active December 16, 2019 13:43
Show Gist options
  • Save alanwillms/0e077e5ae13f44f679a2891b4ef5905d to your computer and use it in GitHub Desktop.
Save alanwillms/0e077e5ae13f44f679a2891b4ef5905d to your computer and use it in GitHub Desktop.
Exame Node.js Pleno

Exame de Programador Node.js

Objetivo: desenvolver uma API GraphQL em Node.js simulando um caixa eletrônico.

Nesta simulação considere que não há necessidade de autenticação.

História

SENDO EU um correntista do banco
QUERO poder movimentar a minha conta corrente
PARA poder saldar as minhas dívidas

Cenários

DADO QUE eu consuma a API GraphQL
QUANDO eu chamar a mutation sacar informando o número da conta e um valor válido
ENTÃO o saldo da minha conta no banco de dados aumentará de acordo
E a mutation retornará o saldo atualizado.

DADO QUE eu consuma a API GraphQL
QUANDO eu chamar a mutation sacar informando o número da conta e um valor maior do que o meu saldo
ENTÃO a mutation me retornará um erro do GraphQL informando que eu não tenho saldo suficiente

DADO QUE eu consuma a API GraphQL
QUANDO eu chamar a mutation depositar informando o número da conta e um valor válido
ENTÃO a mutation atualizará o saldo da conta no banco de dados
E a mutation retornará o saldo atualizado.

DADO QUE eu consuma a API GraphQL
QUANDO eu chamar a query saldo informando o número da conta
ENTÃO a query retornará o saldo atualizado.

Exemplo 1

Requisição:

mutation {
  sacar(conta: 54321, valor: 140) {
    conta
    saldo
  }
}

Resposta:

{
  "data": {
    "sacar": {
      "conta": 54321,
      "saldo": 20
    }
  }
}

Exemplo 2

Requisição

mutation {
  sacar(conta: 54321, valor: 30000) {
    conta
    saldo
  }
}

Exemplo de resposta (não precisa ser idêntico):

{
  "errors": [
    {
      "message": "Saldo insuficiente.",
      "extensions": {
        "category": "graphql"
      },
      "locations": [
        {
          "line": 9,
          "column": 5
        }
      ]
    }
  ]
}
}

Exemplo 3

Requisição:

mutation {
  depositar(conta: 54321, valor: 200) {
    conta
    saldo
  }
}

Resposta:

{
  "data": {
    "depositar": {
      "conta": 54321,
      "saldo": 220
    }
  }
}

Exemplo 4

Requisição:

query {
  saldo(conta: 54321)
}

Resposta:

{
  "data": {
    "saldo": 220
  }
}

Requisitos Obrigatórios

  • A API deve ser desenvolvida em Node.js
  • A API deve ser GraphQL.
  • O banco de dados pode ser o de sua preferência
  • O projeto deve ser entregue em um repositório do GitHub
  • O projeto deve ter testes unitários com cobertura de testes >= a 85%

Requisitos Opcionais

  • Scripts do Docker
  • Subir o serviço na nuvem e disponibilizar a URL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment