Skip to content

LuisHBarros/fastAPI-with-database-example

Repository files navigation

Sistema Bancário - API REST com FastAPI

📋 Descrição

Sistema bancário completo desenvolvido com FastAPI, implementando operações básicas de conta corrente, transferências, pagamento de faturas e análise de crédito.

🏗️ Arquitetura

A aplicação foi desenvolvida seguindo os princípios SOLID e Clean Code:

  • Single Responsibility Principle: Cada serviço tem uma única responsabilidade
  • Open/Closed Principle: Código aberto para extensão, fechado para modificação
  • Liskov Substitution Principle: Abstrações podem ser substituídas por suas implementações
  • Interface Segregation Principle: Interfaces específicas para cada necessidade
  • Dependency Inversion Principle: Dependência de abstrações, não de implementações

📁 Estrutura do Projeto

.
├── main.py                  # Aplicação FastAPI principal
├── domain_models.py         # Modelos de domínio
├── schemas.py               # Schemas Pydantic (DTOs)
├── repository.py            # Camada de acesso a dados
├── conta_service.py         # Serviço de gerenciamento de contas
├── transacao_service.py     # Serviço de transações
├── fatura_service.py        # Serviço de faturas
├── credito_service.py       # Serviço de análise de crédito
├── requirements.txt         # Dependências do projeto
├── README.md                # Este arquivo
└── banco.db                 # Banco de dados SQLite (criado automaticamente)

🚀 Instalação e Execução

1. Instalar as dependências

pip install -r requirements.txt

2. Executar a aplicação

python main.py

Ou usando uvicorn diretamente:

uvicorn main:app --reload --host 0.0.0.0 --port 8000

3. Acessar a documentação

A documentação interativa da API estará disponível em:

🔌 Endpoints Disponíveis

Contas

  • POST /contas - Criar nova conta
  • GET /contas/{numero_conta} - Buscar conta por número
  • GET /contas - Listar todas as contas

Transações

  • POST /transacoes/transferencia - Realizar transferência
  • POST /transacoes/deposito - Realizar depósito
  • POST /transacoes/saque - Realizar saque
  • GET /transacoes/{numero_conta} - Listar transações da conta

Faturas

  • GET /faturas/conta/{conta_id} - Listar faturas da conta
  • POST /faturas/pagamento - Pagar fatura

Crédito

  • POST /credito/analisar - Analisar solicitação de crédito
  • GET /credito/consultar-score/{cpf} - Consultar score (não implementado)

Sistema

  • GET /health - Health check da API

💡 Exemplos de Uso

Criar uma conta

curl -X POST "http://localhost:8000/contas" \
  -H "Content-Type: application/json" \
  -d '{
    "cpf_titular": "12345678901",
    "nome_titular": "João da Silva",
    "tipo_conta": "corrente",
    "saldo_inicial": 1000.00
  }'

Realizar transferência

curl -X POST "http://localhost:8000/transacoes/transferencia" \
  -H "Content-Type: application/json" \
  -d '{
    "conta_origem": "00123-4",
    "conta_destino": "00456-7",
    "valor": 100.00,
    "descricao": "Pagamento de serviço"
  }'

Analisar crédito

curl -X POST "http://localhost:8000/credito/analisar" \
  -H "Content-Type: application/json" \
  -d '{
    "conta_id": 1,
    "valor_solicitado": 5000.00,
    "renda_mensal": 3000.00,
    "tempo_cliente_meses": 12
  }'

🛠️ Tecnologias Utilizadas

  • FastAPI: Framework web moderno e rápido
  • Pydantic: Validação de dados
  • SQLite: Banco de dados leve e eficiente
  • aiosqlite: Driver assíncrono para SQLite
  • Uvicorn: Servidor ASGI de alta performance

🔐 Recursos de Segurança

  • Validação de entrada com Pydantic
  • Tratamento de erros centralizado
  • Validação de CPF
  • Verificação de saldo antes de transações
  • Status de conta para bloqueio/desbloqueio

🧪 Melhorias Futuras

  • Autenticação e autorização (JWT)
  • Integração com bureaus de crédito
  • Testes unitários e de integração
  • Docker e Docker Compose
  • CI/CD pipeline
  • Logging estruturado
  • Rate limiting
  • Cache com Redis
  • Mensageria (RabbitMQ/Kafka)
  • Auditoria de operações

📝 Princípios Aplicados

Clean Code

  • Nomes descritivos e significativos
  • Funções pequenas e focadas
  • Comentários quando necessário
  • Tratamento adequado de erros
  • Código organizado e estruturado

SOLID

  • Single Responsibility: Cada classe/função tem uma única responsabilidade
  • Open/Closed: Extensível sem modificar código existente
  • Liskov Substitution: Subtipos substituíveis por tipos base
  • Interface Segregation: Interfaces específicas e coesas
  • Dependency Inversion: Dependência de abstrações

📄 Licença

Este projeto é de código aberto e está disponível para uso educacional.

👤 Autor

Sistema desenvolvido como exemplo de API bancária com FastAPI.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages