Nesse projeto tive que criar uma API para todas as funcionalidades de um banco.
- Criar conta bancária
- Listar contas bancárias
- Atualizar os dados do usuário da conta bancária
- Excluir uma conta bancária
- Depósitar em uma conta bancária
- Sacar de uma conta bancária
- Transferir valores entre contas bancárias
- Consultar saldo da conta bancária
- Emitir extrato bancário
# Clone o repositorio
$ git clone https://github.com/theotrin/api-de-banco.git
# Instale as dependencias com
$ npm install
// HTTP Status 200 / 201 / 204
// 2 contas encontradas
[
{
"numero": "1",
"saldo": 0,
"usuario": {
"nome": "Foo Bar",
"cpf": "00011122233",
"data_nascimento": "2021-03-15",
"telefone": "71999998888",
"email": "foo@bar.com",
"senha": "1234"
}
},
{
"numero": "2",
"saldo": 1000,
"usuario": {
"nome": "Foo Bar 2",
"cpf": "00011122234",
"data_nascimento": "2021-03-15",
"telefone": "71999998888",
"email": "foo@bar2.com",
"senha": "12345"
}
}
]
// nenhuma conta encontrada
[]
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "A senha do banco informada é inválida!"
}
-
Resposta
Em caso de sucesso, nada é retornando no conteúdo no corpo (body) da resposta.
Em caso de falha na validação, a resposta deverá possuir o status code 400, e em seu corpo (body) é retornado o motivo da falha.
// POST /contas
{
"nome": "Foo Bar 2",
"cpf": "00011122234",
"data_nascimento": "2021-03-15",
"telefone": "71999998888",
"email": "foo@bar2.com",
"senha": "12345"
}
// HTTP Status 200 / 201 / 204
// Sem conteúdo no corpo (body) da resposta
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "Já existe uma conta com o cpf ou e-mail informado!"
}
Esse endpoint deverá atualizar apenas os dados do usuário de uma conta bancária.
-
Verificações desse endpoint
- Verificar se foi passado todos os campos no body da requisição
- Verificar se o numero da conta passado como parametro na URL é válida
- Se o CPF for informado, verificar se já existe outro registro com o mesmo CPF
- Se o E-mail for informado, verificar se já existe outro registro com o mesmo E-mail
- Atualizar os dados do usuário de uma conta bancária
-
Requisição - O corpo (body) deverá possuir um objeto com todas as seguintes propriedades (respeitando estes nomes):
- nome
- cpf
- data_nascimento
- telefone
- senha
// PUT /contas/:numeroConta/usuario
{
"nome": "Foo Bar 3",
"cpf": "99911122234",
"data_nascimento": "2021-03-15",
"telefone": "71999998888",
"email": "foo@bar3.com",
"senha": "12345"
{
// HTTP Status 200 / 201 / 204
// Sem conteúdo no corpo (body) da resposta
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "O CPF informado já existe cadastrado!"
}
Esse endpoint exclui uma conta bancária existente.
-
Logica do endpoin
- Verificação se o numero da conta passado como parametro na URL é válido
- Permitir excluir uma conta bancária apenas se o saldo for 0 (zero)
- Remover a conta do objeto de persistência de dados.
-
Requisição
- Numero da conta bancária (passado como parâmetro na rota)
// HTTP Status 200 / 201 / 204
// Sem conteúdo no corpo (body) da resposta
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "A conta só pode ser removida se o saldo for zero!"
}
Esse endpoint soma o valor do depósito ao saldo de uma conta válida e registrar essa transação.
-
Logicas do endpoint:
- Verificar se o numero da conta e o valor do deposito foram informados no body
- Verificar se a conta bancária informada existe
- Não permitir depósitos com valores negativos ou zerados
- Somar o valor de depósito ao saldo da conta encontrada
-
Requisição - O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- numero_conta
- valor
-
Resposta
Em caso de sucesso, apenas o status code é retornado.
Em caso de falha na validação, a resposta deverá possuir status code 400, e em seu corpo (body) e um objeto com uma propriedade mensagem com o motivo da falha.
// POST /transacoes/depositar
{
"numero_conta": "1",
"valor": 1900
}
// HTTP Status 200 / 201 / 204
// Sem conteúdo no corpo (body) da resposta
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "O número da conta e o valor são obrigatórios!"
}
{
"data": "2021-08-10 23:40:35",
"numero_conta": "1",
"valor": 10000
}
Esse endpoint realizar o saque de um valor em uma determinada conta bancária e registrar essa transação.
-
Logica aplicada:
- Verificar se o numero da conta, o valor do saque e a senha foram informados no body
- Verificar se a conta bancária informada existe
- Verificar se a senha informada é uma senha válida para a conta informada
- Verificar se há saldo disponível para saque
- Subtrair o valor sacado do saldo da conta encontrada
-
Resposta
- Em caso de **sucesso**, apenas o status code é retornado.
- Em caso de **falha na validação**, a resposta deverá possuir ***status code*** 400, e em seu corpo (body) e um objeto com uma propriedade **mensagem** com o motivo da falha.
// POST /transacoes/sacar
{
"numero_conta": "1",
"valor": 1900,
"senha": "123456"
}
// HTTP Status 200 / 201 / 204
// Sem conteúdo no corpo (body) da resposta
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "O valor não pode ser menor que zero!"
}
{
"data": "2021-08-10 23:40:35",
"numero_conta": "1",
"valor": 10000
}
Esse endpoint permiti a transferência de recursos (dinheiro) de uma conta bancária para outra e registrar essa transação.
-
Logicas e validações:
- Verificar se o número da conta de origem, de destino, senha da conta de origem e valor da transferência foram informados no body
- Verificar se a conta bancária de origem informada existe
- Verificar se a conta bancária de destino informada existe
- Verificar se a senha informada é uma senha válida para a conta de origem informada
- Verificar se há saldo disponível na conta de origem para a transferência
- Subtrair o valor da transfência do saldo na conta de origem
- Somar o valor da transferência no saldo da conta de destino
-
Requisição - O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- numero_conta_origem
- numero_conta_destino
- valor
- senha
-
**Resposta**
Em caso de sucesso, apenas o status code é retornado.
Em caso de falha na validação, a resposta deverá possuir status code 400, e em seu corpo (body) e um objeto com uma propriedade mensagem como o motivo da falha.
// POST /transacoes/transferir
{
"numero_conta_origem": "1",
"numero_conta_destino": "2",
"valor": 200,
"senha": "123456"
}
// HTTP Status 200 / 201 / 204
// Sem conteúdo no corpo (body) da resposta
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "Saldo insuficiente!"
}
{
"data": "2021-08-10 23:40:35",
"numero_conta_origem": "1",
"numero_conta_destino": "2",
"valor": 10000
}
Esse endpoint retorna o saldo de uma conta bancária.
-
Lógica e validações:
- Verificar se o numero da conta e a senha foram informadas (passado como query params na url)
- Verificar se a conta bancária informada existe
- Verificar se a senha informada é uma senha válida
- Exibir o saldo da conta bancária em questão
-
Requisição - query params
- numero_conta
- senha
-
Resposta
- Saldo da conta
// HTTP Status 200 / 201 / 204
{
"saldo": 13000
}
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "Conta bancária não encontada!"
}
Esse endpoint lista as transações realizadas de uma conta específica.
-
Logica e validações:
- Verificar se o numero da conta e a senha foram informadas (passado como query params na url)
- Verificar se a conta bancária informada existe
- Verificar se a senha informada é uma senha válida
- Retornar a lista de transferências, depósitos e saques da conta em questão.
-
Requisição - query params
- numero_conta
- senha
-
Resposta
- Relatório da conta
// HTTP Status 200 / 201 / 204
{
"depositos": [
{
"data": "2021-08-18 20:46:03",
"numero_conta": "1",
"valor": 10000
},
{
"data": "2021-08-18 20:46:06",
"numero_conta": "1",
"valor": 10000
}
],
"saques": [
{
"data": "2021-08-18 20:46:18",
"numero_conta": "1",
"valor": 1000
}
],
"transferenciasEnviadas": [
{
"data": "2021-08-18 20:47:10",
"numero_conta_origem": "1",
"numero_conta_destino": "2",
"valor": 5000
}
],
"transferenciasRecebidas": [
{
"data": "2021-08-18 20:47:24",
"numero_conta_origem": "2",
"numero_conta_destino": "1",
"valor": 2000
},
{
"data": "2021-08-18 20:47:26",
"numero_conta_origem": "2",
"numero_conta_destino": "1",
"valor": 2000
}
]
}
// HTTP Status 400 / 401 / 403 / 404
{
"mensagem": "Conta bancária não encontada!"
}