Skip to content

Application Programming Interface (API): basic banking operations from a simple web application. Developed in Flask.

Notifications You must be signed in to change notification settings

GabesSeven/Backend-Bloxs-s-Challenge-Full-Stack-Developer

Repository files navigation

Backend - Bloxs s Challenge - Full Stack Developer



Interface de programação de aplicativos (API): operações bancárias básicas a partir de uma simples aplicação web.

  1. BackEnd: https://github.com/GabesSeven/Backend-Bloxs-s-Challenge-Full-Stack-Developer;
  2. FrontEnd: https://github.com/GabesSeven/Frontend-Bloxs-s-Challenge-Full-Stack-Developer.
  3. Banco de Dados MySQL para o Render: https://github.com/GabesSeven/Database-Bloxs-s-Challenge-Full-Stack-Developer.




Execução Local 🏃‍♀️



No Terminal / Console:

  1. Faça um clone do projeto na sua máquina:
    git clone git@github.com:GabesSeven/Backend-Bloxs-s-Challenge-Full-Stack-Developer.git

  2. Entre na pasta raiz do projeto:
    cd Backend-Bloxs-s-Challenge-Full-Stack-Developer/

  3. Em um terminal, inicie o ambiente virtual:
    source .venv/bin/activate

  4. Em um terminal, inicie a aplicação:
    flask run

  5. Acessoa ao Swagger. Em um navegador:
    http://127.0.0.1:5000/swagger-ui




⚠️⚠️⚠️ Observações - O que faltou? ⚠️⚠️⚠️



Segurança


  1. Para facilitar a exeução estou subindo os arquivos das variáveis de ambiente (⚠️⚠️⚠️ISSO É ERRADÍSSIMO⚠️⚠️⚠️) e as bibliotecas;

Acesso Remoto


  1. Subir a aplicação em ambiente cloud, atualmente trabalho com Render para sublir as plataformas (frontend, backend e banco de dados);
  2. A arquitetura ideal seria em um ambiente AWS como na imagem abaixo.

arquitetura AWS
Arquitetura AWS ideal para o projeto.


Banco de Dados

  1. Como só desenvolvi local, deixei o banco padrão Python, SQLite3, como visto na imagem abaixo;
  2. Plataforma Render possui PosgreSQL (gratuito para teste) e MySQL (pago);
  3. Configurei o upload do banco MySQL no Render, mas não passei o cartão de crédito;
  4. Porém domínio em Banco de Dados relacionais, atualmente crio e gerencio o da Statup ao qual trabalho, também sei trabalhar com Normalização, já trabalhei com Oracle, PostgreSQL e MySQL.

Console - banco SQLLite3
Console - SQLite3


Endpoints


  1. Extrato
  2. Saque - ocorre verificação de limite por valores de transações diárias



Rotas 🛣️



Operação em Usuário: Criar Conta

  • URL: /criar-usuario
  • Método: POST
  • Descrição: Cria um novo usuário.
  • Entrada:
json {
  "email": "user@example.com",
  "senha": "string",
  "nome": "string",
  "sobrenome": "string",
  "cpf": "string",
  "data_nascimento": "2023-12-20"
} 
  • Saída (201):
json {
  "cpf": "string",
  "data_criacao": "2023-12-20T13:33:43.877102",
  "data_nascimento": "2023-12-20",
  "email": "user@example.com",
  "id_pessoa": "780c74f0-a253-4903-bcc2-e78f99b31f6b",
  "nome": "string",
  "sobrenome": "string",
  "usuario_ativo": false
}

Autenticação: Login

  • URL: /login
  • Método: POST
  • Descrição: Autenticação de usuário para obter token de acesso.
  • Entrada:
json {
  "email": "user@example.com",
  "senha": "string"
}
  • Saída (200):
json {
  "token_acesso": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6dHJ1ZSwiaWF0IjoxNzAzMDgwMjUwLCJqdGkiOiJiZmVlODE0Mi05OTMzLTQwZDItYTMzNy04ZTUzMjBjMWFhMDQiLCJ0eXBlIjoiYWNjZXNzIiwic3ViIjoiYTBhNGJkYTAtNTg2My00YTY1LTg3YzQtNjUzMjE3YzkxMmI1IiwibmJmIjoxNzAzMDgwMjUwLCJjc3JmIjoiNTIwNTRjNWItNmIyZi00YzI2LTk3Y2UtYWVjNDZjOTkzMjMxIiwiZXhwIjoxNzAzMDgxMTUwfQ.eN06KsVxK90kku2Ik7mKRp7Nd9W3nNNgBuWAjJCZJw0",
  "token_refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTcwMzA4MDI1MCwianRpIjoiYTQ4NWExNDMtNGM4NS00ZGQwLWIyYTItYmI1ZjgxOTQ3ZDJjIiwidHlwZSI6InJlZnJlc2giLCJzdWIiOiJhMGE0YmRhMC01ODYzLTRhNjUtODdjNC02NTMyMTdjOTEyYjUiLCJuYmYiOjE3MDMwODAyNTAsImNzcmYiOiI4NTRjNGJjNi00MjYxLTQ5MDEtYTc2Yy1mMTViMTNkNDUzODgiLCJleHAiOjE3MDU2NzIyNTB9.QYlZsPi-PAs8I0O4ntBHJ9kyU9gs-xxx_5LWchKKkis"
}

Autenticação: Logout

  • URL: /logout
  • Método: POST
  • Descrição: Encerra a sessão de usuário bloqueando o token de acesso do mesmo.
  • Saída (200):
json {
  "mensagem": "Sessão encerrada com sucesso."
}

Autenticação: Atualização de Token

  • URL: /refresh
  • Método: POST
  • Descrição: Atualiza o token de acesso.
  • Saída (200):
json {
  "token_acesso": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6dHJ1ZSwiaWF0IjoxNzAzMDgwMjUwLCJqdGkiOiJiZmVlODE0Mi05OTMzLTQwZDItYTMzNy04ZTUzMjBjMWFhMDQiLCJ0eXBlIjoiYWNjZXNzIiwic3ViIjoiYTBhNGJkYTAtNTg2My00YTY1LTg3YzQtNjUzMjE3YzkxMmI1IiwibmJmIjoxNzAzMDgwMjUwLCJjc3JmIjoiNTIwNTRjNWItNmIyZi00YzI2LTk3Y2UtYWVjNDZjOTkzMjMxIiwiZXhwIjoxNzAzMDgxMTUwfQ.eN06KsVxK90kku2Ik7mKRp7Nd9W3nNNgBuWAjJCZJw0"
}

Operação em Conta: Criar Conta

  • URL: /conta/<id_conta>
  • Método: GET
  • Descrição: Criar uma nova conta.
  • Entrada:
json {
  "id_pessoa": "780c74f0-a253-4903-bcc2-e78f99b31f6b",
  "saldo": 0,
  "limite_saque_diario": 0,
  "tipo_conta": 0
}
  • Saída (201):
{
  "saldo": 0,
  "limite_saque_diario": 0,
  "tipo_conta": 0,
  "id_conta": "780c74f0-a253-4903-bcc2-e78f99b31f6b",
  "flag_ativo": true,
  "data_criacao": "2023-12-20"
}

Operação em Conta: Consultar Saldo de Conta

  • URL: /conta/<id_conta>
  • Método: GET
  • Descrição: Obtém o saldo de uma conta por ID.
  • Saída (200):
json {
  "saldo": float
}

Operação em Conta: Depósito em Conta

  • URL: /operacao
  • Método: PUT
  • Descrição: Realiza um depósito em uma conta.
  • Entrada:
json {
  "id_conta": "780c74f0-a253-4903-bcc2-e78f99b31f6b",
  "valor": 0
}
  • Saída (200):
json {
  "id_conta": "780c74f0-a253-4903-bcc2-e78f99b31f6b",
  "valor": 0
}

⚠️NÃO FINALIZADO: Operação em Conta: Saque em Conta ⚠️

  • URL: /operacao/
  • Método: POST
  • Descrição: Realiza saque em uma conta.

⚠️NÃO FINALIZADO: Operação em Conta: Extrato em Conta ⚠️

  • URL: /operacao/<id_conta>
  • Método: GET (para extrato)
  • Descrição: Realiza um depósito.



Banco de Dados 🎲

    +-----------------+          +---------------------+
    |    PessoaModel  |1        N|   ContaModel        |
    +-----------------+<-------->|---------------------+
    | id_pessoa [PK]  |          | id_conta [PK]       |
    | email           |          | id_pessoa [FK]      |
    | senha           |          | saldo               |
    | nome            |          | limite_saque_diario |
    | sobrenome       |          | flag_ativo          |
    | cpf             |          | tipo_conta          |
    | data_nascimento |          | data_criacao        |
    | data_criacao    |          +---------------------+
    | usuario_ativo   |                1 |
    +-----------------+                  |
                                         |
                                         |
                                       N |
                                 +-------------------+
                                 |  TransacaoModel   |
                                 +-------------------+
                                 | id_transacao [PK] |
                                 | id_conta [FK]     |
                                 | valor             |
                                 | data_transacao    |
                                 +-------------------+



Developer 🧑‍💻




Gabriel Ferreira

About

Application Programming Interface (API): basic banking operations from a simple web application. Developed in Flask.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published