Biblioteca do model de Heróis com banco de dados.
Project description
ps_hero_fastapi_lib
Lib de Cadastro de Equipes e Heróis desenvolvida com SQLModel. Aplicação de Cadastro de Equipes e Heróis desenvolvida com FastAPI e a lib implementada.
Explicando o código
API de exemplo para gerenciar Heróis usando FastAPI, SQLModel (SQLAlchemy + Pydantic), e o padrão MVC com Repository:
- Controller (Router) → recebe HTTP
- Service → regras de negócio
- Repository → acesso ao banco
- Model (SQLModel) → entidades e DTOs
- Database → criação do engine e sessão
✨ Principais recursos
- Estrutura limpa em camadas (Controller → Service → Repository → DB)
- SQLModel (tipagem forte + ORM)
- Injeção de dependência com
Depends - Tratamento de erros HTTP padronizado
- Pronto para trocar SQLite por PostgreSQL
📂 Estrutura do projeto
.
├── LICENSE
├── Makefile
├── README.md
├── app
│ ├── controller # Controller (Router)
│ │ ├── __init__.py
│ │ ├── generic.py
│ │ ├── hero.py
│ │ └── team.py
│ ├── main.py # inicialização da app e rotas
│ └── test
│ ├── __init__.py
│ └── test_controller.py
├── ps_hero_fastapi_lib
│ ├── __init__.py
│ ├── model # SQLModel: entidades e schemas (Create/Update/Public)
│ │ ├── __init__.py
│ │ ├── dto.py
│ │ └── models.py
│ ├── repository
│ │ ├── __init__.py
│ │ └── base.py # Acesso ao banco (CRUD)
│ ├── service
│ │ ├── __init__.py
│ │ └── base.py # Regras de negócio
│ ├── test
│ │ ├── __init__.py
│ │ └── test_models.py
│ └── util
│ ├── __init__.py
│ └── database.py # Engine, sessão e inicialização do schema
├── requirements.txt
└── setup.py
🧰 Stack & Requisitos
- Python 3.10+
- FastAPI
- SQLModel
- Uvicorn
requirements.txt:
fastapi==0.114.2
uvicorn[standard]==0.30.6
SQLModel==0.0.22
Para PostgreSQL, adicione também:
psycopg[binary]==3.*
⚙️ Configuração & Execução
- Crie o ambiente e instale dependências:
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
- (Opcional) Defina o banco via variável de ambiente:
-
SQLite (padrão) – já funciona sem configurar nada.
-
PostgreSQL:
export DATABASE_URL="postgresql+psycopg://app:app@localhost:5432/appdb"
- Rode a aplicação:
uvicorn app.main:app --reload
- Acesse:
- Healthcheck: http://127.0.0.1:8000/
- Docs (Swagger): http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
🧱 Modelos (resumo)
Hero(tabela):id,name,secret_name?,age?HeroCreate(entrada POST)HeroUpdate(entrada PATCH, campos opcionais)HeroPublic(saída nas respostas)
🔌 Endpoints (Heroes)
Base path: /heroes
| Método | Rota | Body | Resposta | Descrição |
|---|---|---|---|---|
| POST | / |
HeroCreate |
HeroPublic |
Cria um herói |
| GET | / |
— | List[HeroPublic] |
Lista heróis (offset/limit) |
| GET | /{hero_id} |
— | HeroPublic |
Busca por ID |
| PATCH | /{hero_id} |
HeroUpdate |
HeroPublic |
Atualiza campos parciais |
| DELETE | /{hero_id} |
— | 204 No Content |
Remove herói |
🧪 Exemplos (cURL)
Criar:
curl -X POST http://127.0.0.1:8000/heroes/ \
-H "Content-Type: application/json" \
-d '{"name":"Ada","secret_name":"The Enchantress","age":28}'
Listar:
curl "http://127.0.0.1:8000/heroes/?offset=0&limit=100"
Buscar por ID:
curl http://127.0.0.1:8000/heroes/1
Atualizar (parcial):
curl -X PATCH http://127.0.0.1:8000/heroes/1 \
-H "Content-Type: application/json" \
-d '{"name":"Ada Lovelace"}'
Remover:
curl -X DELETE http://127.0.0.1:8000/heroes/1 -i
🧠 Como as camadas se conectam
HTTP (FastAPI)
↓
Controller (app/controllers/heroes.py)
↓
Service (app/services/hero_service.py)
↓
Repository (app/repositories/hero_repository.py)
↓
DB Session (app/database.py) + SQLModel (app/models.py)
- Controller: lida com requisições/respostas e validações de query/path; injeta dependências com
Depends. - Service: regras de negócio (ex.: checar nome duplicado).
- Repository: SQL puro via SQLModel/SQLAlchemy (CRUD).
- Database: engine, sessão e criação de schema.
Reference:
Documento Fast API : Documentação do FAST API.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ps_hero_fastapi_lib-0.1.0.tar.gz.
File metadata
- Download URL: ps_hero_fastapi_lib-0.1.0.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dab1ef9138de8e97e5e58d4f3bd9cffb6579fedaf3e7efad6741fb1c4ad5dfe4
|
|
| MD5 |
dbda911c34fd2306a0d9b35cf14c24e1
|
|
| BLAKE2b-256 |
a1619d554814abd66a07fb2e54bb03634d354375746eebd93e86e0d8b0b71772
|
File details
Details for the file ps_hero_fastapi_lib-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ps_hero_fastapi_lib-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d50575357073d4a205ac3d22e4b5ec3510d49c969497e69e5bc2dac273add84b
|
|
| MD5 |
fe8cf2699ac3ef560aa13a846fe53b5f
|
|
| BLAKE2b-256 |
2a5a81d032c142d06427999ba6300938bb9513cf1faa6fb5fb0add36f26cbab0
|