GithubHelp home page GithubHelp logo

dantevicenzo / cubos-bank-api Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 104 KB

API RESTful de sistema bancário.

Home Page: https://cubos-bank-api.onrender.com/contas?senha_banco=Cubos123Bank

JavaScript 100.00%

cubos-bank-api's Introduction

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 [email protected]: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": "[email protected]",
            "senha": "1234"
        }
    },
    {
        "numero": "2",
        "saldo": 1000,
        "usuario": {
            "nome": "Foo Bar 2",
            "cpf": "00011122234",
            "data_nascimento": "2021-03-15",
            "telefone": "71999998888",
            "email": "[email protected]",
            "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": "[email protected]",
    "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": "[email protected]",
    "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!

cubos-bank-api's People

Contributors

dantevicenzo avatar gabrielmm182 avatar vtorres96 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.