O objetivo deste projeto é desenvolver uma RESTful API para um Banco Digital que permita:
- 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
Os dados serão persistidos em memória, no objeto existente dentro do arquivo database.json
. Todas as transações e contas bancárias serão inseridas dentro deste objeto, seguindo a estrutura que já existe.
{
banco: {
nome: "Cubos Bank",
numero: "123",
agencia: "0001",
senha: "Cubos123Bank",
},
contas: [
// array de contas bancárias
],
saques: [
// array de saques
],
depositos: [
// array de depósitos
],
transferencias: [
// array de transferências
],
}
Esse endpoint lista todas as contas bancárias existentes.
-
Requisitos OBRIGATÓRIOS:
- Verificar se a senha do banco foi informada (passado como query params na url)
- Validar se a senha do banco está correta
-
Requisição - query params (respeitando este nome)
- senha_banco
-
Resposta
- listagem de todas as contas bancárias existentes
// 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!"
}
Esse endpoint cria uma conta bancária, onde será gerado um número único para identificação da conta (número da conta).
-
Requisitos OBRIGATÓRIOS:
- Criar uma nova conta cujo número é único
- CPF deve ser um campo único.
- E-mail deve ser um campo único.
- Verificar se todos os campos foram informados (todos são obrigatórios)
- Definir o saldo inicial da conta como 0
-
Requisição - O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- nome
- cpf
- data_nascimento
- telefone
- senha
-
Resposta
Em caso de sucesso, não deveremos enviar conteúdo no corpo (body) da resposta.
Em caso de falha na validação, a resposta deverá possuir status code apropriado, e em seu corpo (body) deverá possuir um objeto com uma propriedade mensagem que deverá possuir como valor um texto explicando 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 atualiza apenas os dados do usuário de uma conta bancária.
-
Requisitos OBRIGATÓRIOS:
- Verificar se todos os campos no body da requisição foram passados
- 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
-
Resposta
Em caso de sucesso, não deveremos enviar conteúdo no corpo (body) da resposta.
Em caso de falha na validação, a resposta deverá possuir status code apropriado, e em seu corpo (body) deverá possuir um objeto com uma propriedade mensagem que deverá possuir como valor um texto explicando o motivo da falha.
// 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.
-
Requisitos, OBRIGATÓRIOS:
- Verificar 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)
-
Resposta
Em caso de sucesso, não deveremos enviar conteúdo no corpo (body) da resposta.
Em caso de falha na validação, a resposta deverá possuir status code apropriado, e em seu corpo (body) deverá possuir um objeto com uma propriedade mensagem que deverá possuir como valor um texto explicando o motivo da falha.
// 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 deverá somar o valor do depósito ao saldo de uma conta válida e registrar essa transação.
-
Requisitos, OBRIGATÓRIOS:
- 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, não deveremos enviar conteúdo no corpo (body) da resposta.
Em caso de falha na validação, a resposta deverá possuir status code apropriado, e em seu corpo (body) deverá possuir um objeto com uma propriedade mensagem que deverá possuir como valor um texto explicando 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": "2023-11-02 23:40:35",
"numero_conta": "1",
"valor": 10000
}
Esse endpoint deverá realizar o saque de um valor em uma determinada conta bancária e registrar essa transação.
-
Requisitos, OBRIGATÓRIOS:
- 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
-
Requisição - O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):
- numero_conta
- valor
- senha
-
Resposta
Em caso de sucesso, não deveremos enviar conteúdo no corpo (body) da resposta.
Em caso de falha na validação, a resposta deverá possuir status code apropriado, e em seu corpo (body) deverá possuir um objeto com uma propriedade mensagem que deverá possuir como valor um texto explicando 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": "2023-11-02 23:40:35",
"numero_conta": "1",
"valor": 10000
}
Esse endpoint deverá permitir a transferência de recursos (dinheiro) de uma conta bancária para outra e registrar essa transação.
-
Requisitos, OBRIGATÓRIOS:
- 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, não deveremos enviar conteúdo no corpo (body) da resposta.
Em caso de falha na validação, a resposta deverá possuir status code apropriado, e em seu corpo (body) deverá possuir um objeto com uma propriedade mensagem que deverá possuir como valor um texto explicando 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": "2023-11-02 23:40:35",
"numero_conta_origem": "1",
"numero_conta_destino": "2",
"valor": 10000
}
Esse endpoint deverá retornar o saldo de uma conta bancária.
-
Requisitos, OBRIGATÓRIOS:
- 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 deverá listar as transações realizadas de uma conta específica.
-
Requisitos, OBRIGATÓRIOS:
- 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!"
}