Objetivo: desenvolver uma API GraphQL em C# + .NET Core simulando um caixa eletrônico.
Nesta simulação considere que não há necessidade de autenticação.
SENDO EU um correntista do banco
QUERO poder movimentar a minha conta corrente
PARA poder saldar as minhas dívidas
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
}
}
- A API deve ser desenvolvida em C# com .NET Core
- 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 cobertura de testes >= a 85%
- Scripts do Docker
- Subir o serviço na nuvem e disponibilizar a URL