Interface de programação de aplicativos (API): operações bancárias básicas a partir de uma simples aplicação web.
- BackEnd: https://github.com/GabesSeven/Backend-Bloxs-s-Challenge-Full-Stack-Developer;
- FrontEnd: https://github.com/GabesSeven/Frontend-Bloxs-s-Challenge-Full-Stack-Developer.
- Banco de Dados MySQL para o Render: https://github.com/GabesSeven/Database-Bloxs-s-Challenge-Full-Stack-Developer.
No Terminal / Console:
- Faça um clone do projeto na sua máquina:
git clone git@github.com:GabesSeven/Backend-Bloxs-s-Challenge-Full-Stack-Developer.git
- Entre na pasta raiz do projeto:
cd Backend-Bloxs-s-Challenge-Full-Stack-Developer/
- Em um terminal, inicie o ambiente virtual:
source .venv/bin/activate
- Em um terminal, inicie a aplicação:
flask run
- Acessoa ao Swagger. Em um navegador:
http://127.0.0.1:5000/swagger-ui
- Para facilitar a exeução estou subindo os arquivos das variáveis de ambiente (
⚠️ ⚠️ ⚠️ ISSO É ERRADÍSSIMO⚠️ ⚠️ ⚠️ ) e as bibliotecas;
- Subir a aplicação em ambiente cloud, atualmente trabalho com Render para sublir as plataformas (frontend, backend e banco de dados);
- A arquitetura ideal seria em um ambiente AWS como na imagem abaixo.
Arquitetura AWS ideal para o projeto.
- Como só desenvolvi local, deixei o banco padrão Python, SQLite3, como visto na imagem abaixo; Plataforma Render possui PosgreSQL (gratuito para teste) e MySQL (pago);
- Configurei o upload do banco MySQL no Render, mas não passei o cartão de crédito; 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.
- Extrato
- Saque - ocorre verificação de limite por valores de transações diárias
- 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
}
- 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"
}
- 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."
}
- URL:
/refresh
- Método:
POST
- Descrição: Atualiza o token de acesso.
- Saída (200):
json {
"token_acesso": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6dHJ1ZSwiaWF0IjoxNzAzMDgwMjUwLCJqdGkiOiJiZmVlODE0Mi05OTMzLTQwZDItYTMzNy04ZTUzMjBjMWFhMDQiLCJ0eXBlIjoiYWNjZXNzIiwic3ViIjoiYTBhNGJkYTAtNTg2My00YTY1LTg3YzQtNjUzMjE3YzkxMmI1IiwibmJmIjoxNzAzMDgwMjUwLCJjc3JmIjoiNTIwNTRjNWItNmIyZi00YzI2LTk3Y2UtYWVjNDZjOTkzMjMxIiwiZXhwIjoxNzAzMDgxMTUwfQ.eN06KsVxK90kku2Ik7mKRp7Nd9W3nNNgBuWAjJCZJw0"
}
- 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"
}
- URL:
/conta/<id_conta>
- Método:
GET
- Descrição: Obtém o saldo de uma conta por ID.
- Saída (200):
json {
"saldo": float
}
- 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
}
- URL:
/operacao/
- Método:
POST
- Descrição: Realiza saque em uma conta.
- URL:
/operacao/<id_conta>
- Método:
GET
(para extrato) - Descrição: Realiza um depósito.
+-----------------+ +---------------------+
| 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 |
+-------------------+
Gabriel Ferreira |
---|