Skip to content

Instantly share code, notes, and snippets.

@alanwillms
Last active December 8, 2019 16:35
Show Gist options
  • Save alanwillms/97e2c64b2b051f55d6d92bfad107fe59 to your computer and use it in GitHub Desktop.
Save alanwillms/97e2c64b2b051f55d6d92bfad107fe59 to your computer and use it in GitHub Desktop.
Exame de Programador PHP

Exame de Programador PHP

Objetivo: desenvolver uma API GraphQL em PHP + Laravel 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 diminuirá 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 PHP com Laravel Framework
  • A API deve ser GraphQL
  • O banco de dados pode ser o de sua preferência (SQL ou NoSQL)
  • O projeto deve ser entregue em um repositório do GitHub
  • O projeto deve ter testes unitários com PHPUnit 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