Skip to content

dantevicenzo/cubos-bank-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 

Repository files navigation

GitHub language count Repository size GitHub last commit License Feito por Dante Vicenzo Stargazers Siga no Twitter

🚧 Cubos Bank 🚧

Status Concluído

SobreFuncionalidadesComo executarTecnologiasContribuidoresAutorLicença

💻 Sobre o projeto

📄 Cubos Bank - é uma API REST de sistema bancário.

Projeto desenvolvido como desafio de código no módulo 2 da [Turma 07] de [ Desenvolvimento de Software | On Demand ] oferecida pela Cubos Academy.


⚙️ Funcionalidades

  • 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

🛣️ Como executar o projeto

💡Este projeto consiste apenas no Backend (pasta server).

Pré-requisitos

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Git, Node.js. Além disto é bom ter um editor para trabalhar com o código como VSCode

🎲 Rodando o Backend (servidor)

# Clone este repositório
$ git clone git@github.com:dantevicenzo/cubos-bank-api.git

# Acesse a pasta do projeto no terminal/cmd
$ cd cubos-bank-api

# Instale as dependências
$ npm install

# Execute a aplicação em modo de desenvolvimento
$ npm run dev

# O servidor inciará na porta:3000 - acesse http://localhost:3000 

Run in Insomnia

🧭 Testando as rotas (endpoints)

Development server base url: http://localhost:3000/

Listar contas bancárias

GET /contas?senha_banco=Cubos123Bank

Esse endpoint deverá listar todas as contas bancárias existentes.

  • Você deverá, OBRIGATORIAMENTE:

    • 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

Exemplo de resposta

// 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!"
}

Criar conta bancária

POST /contas

Esse endpoint deverá criar uma conta bancária, onde será gerado um número único para identificação da conta (número da conta).

  • Você deverá, OBRIGATORIAMENTE:

    • 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
    • email
    • 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.

Exemplo de Requisição

// POST /contas
{
    "nome": "Foo Bar 2",
    "cpf": "00011122234",
    "data_nascimento": "2021-03-15",
    "telefone": "71999998888",
    "email": "foo@bar2.com",
    "senha": "12345"
}

Exemplo de Resposta

// 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!"
}

Atualizar usuário da conta bancária

PUT /contas/:numeroConta/usuario

Esse endpoint deverá atualizar apenas os dados do usuário de uma conta bancária.

  • Você deverá, OBRIGATORIAMENTE:

    • 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
    • email
    • 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.

Exemplo de Requisição

// PUT /contas/:numeroConta/usuario
{
    "nome": "Foo Bar 3",
    "cpf": "99911122234",
    "data_nascimento": "2021-03-15",
    "telefone": "71999998888",
    "email": "foo@bar3.com",
    "senha": "12345"
{

Exemplo de Resposta

// 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!"
}

Excluir Conta

DELETE /contas/:numeroConta

Esse endpoint deve excluir uma conta bancária existente.

  • Você deverá, OBRIGATORIAMENTE:

    • 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.

Exemplo de Resposta

// 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!"
}

Depositar

POST /transacoes/depositar

Esse endpoint deverá somar o valor do depósito ao saldo de uma conta válida e registrar essa transação.

  • Você deverá, OBRIGATORIAMENTE:

    • 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.

Exemplo de Requisição

// POST /transacoes/depositar
{
	"numero_conta": "1",
	"valor": 1900
}

Exemplo de Resposta

// 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!"
}

Exemplo do registro de um depósito

{
    "data": "2021-08-10 23:40:35",
    "numero_conta": "1",
    "valor": 10000
}

Sacar

POST /transacoes/sacar

Esse endpoint deverá realizar o saque de um valor em uma determinada conta bancária e registrar essa transação.

  • Você deverá, OBRIGATORIAMENTE:

    • 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.

Exemplo de Requisição

// POST /transacoes/sacar
{
	"numero_conta": "1",
	"valor": 1900,
    "senha": "123456"
}

Exemplo de Resposta

// 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!"
}

Exemplo do registro de um saque

{
    "data": "2021-08-10 23:40:35",
    "numero_conta": "1",
    "valor": 10000
}

Tranferir

POST /transacoes/transferir

Esse endpoint deverá permitir a transferência de recursos (dinheiro) de uma conta bancária para outra e registrar essa transação.

  • Você deverá, OBRIGATORIAMENTE:

    • 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.

Exemplo de Requisição

// POST /transacoes/transferir
{
	"numero_conta_origem": "1",
	"numero_conta_destino": "2",
	"valor": 200,
	"senha": "123456"
}

Exemplo de Resposta

// HTTP Status 200 / 201 / 204
// Sem conteúdo no corpo (body) da resposta
// HTTP Status 400 / 401 / 403 / 404
{
    "mensagem": "Saldo insuficiente!"
}

Exemplo do registro de uma transferência

{
    "data": "2021-08-10 23:40:35",
    "numero_conta_origem": "1",
    "numero_conta_destino": "2",
    "valor": 10000
}

Saldo

GET /contas/saldo?numero_conta=123&senha=123

Esse endpoint deverá retornar o saldo de uma conta bancária.

  • Você deverá, OBRIGATORIAMENTE:

    • 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

Exemplo de Resposta

// HTTP Status 200 / 201 / 204
{
    "saldo": 13000
}
// HTTP Status 400 / 401 / 403 / 404
{
    "mensagem": "Conta bancária não encontada!"
}

Extrato

GET /contas/extrato?numero_conta=123&senha=123

Esse endpoint deverá listar as transações realizadas de uma conta específica.

  • Você deverá, OBRIGATORIAMENTE:

    • 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

Exemplo de Resposta

// 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!"
}

🛠 Tecnologias

As seguintes ferramentas foram usadas na construção do projeto:

Server (NodeJS + TypeScript)

Veja o arquivo package.json

Utilitários


👨‍💻 Contribuidores

Um praise para os cúbicos que contribuíram neste projeto 👏


Dante Vicenzo

👨‍💻

💪 Como contribuir para o projeto

  1. Faça um fork do projeto.
  2. Crie uma nova branch com as suas alterações: git checkout -b my-feature
  3. Salve as alterações e crie uma mensagem de commit contando o que você fez: git commit -m "feature: My new feature"
  4. Envie as suas alterações: git push origin my-feature

Caso tenha alguma dúvida confira este guia de como contribuir no GitHub


🧙‍♂️ Autor


Dante Vicenzo


📝 Licença

Este projeto esta sobe a licença MIT.

Feito com ❤️ por Dante Vicenzo 👋🏽 Entre em contato!

Releases

No releases published

Packages

No packages published