Roadmap¶
Esta página lista o que o SDK ainda não oferece + o que já foi entregue. Ordenado por impacto, não por ordem de implementação — a release atual é puxada pela pressão de negócio, não pela posição na lista.
O que o SDK já cobre
Auth completa (JWT/bearer/role/permission/X-Token + bundled signup/activate/login/reset via UserAuthService + make_auth_router), OAuth2/OIDC (Google/GitHub + genérico), CSRF middleware, DB (AsyncDatabaseManager + BaseRepository + bulk ops + AlembicHelper + BaseModel + BaseUserModel + BaseUserTokenModel + mixins de auditoria/soft-delete + Alembic hook que reordena colunas base), exceções padronizadas, logging estruturado + arquivos por nível + endpoint /logs, métricas (CPU/RAM/GPU/Disco + Prometheus /metrics + PrometheusMiddleware), rate limiting, idempotência (IdempotencyMiddleware + memory/Redis stores), body-size limit, paginação (offset + cursor), settings por mixin com title/description/examples, SSE, throttle, upload/download local + storage pluggável (LocalUploadStorage + MinIOUploadStorage), MinIO/S3 (AsyncMinIOClient), WebPush, assinatura de webhook, validadores BR (CPF/CNPJ/CEP/telefone), painel admin (Jinja + HTMX), email (SMTP + Jinja2 templates), cache Redis, fila FastStream, tarefas TaskIQ, hardened static files, runner de servidor, health, tool-spec router, request-id middleware, CORS, HTTP client typed (HTTPClient httpx wrapper com retry/backoff/circuit-breaker), CLI completo (tempest new, tempest generate --docker, tempest db <subcommand>, tempest user <subcommand>, quality gates).
Tier S — toda API séria precisa¶
| Feature | Status | Onde |
|---|---|---|
IdempotencyMiddleware + tabela idempotency_keys |
✅ v0.24.0 | tempest_fastapi_sdk.api.middlewares.idempotency |
UploadUtils com backends pluggáveis (LocalUploadStorage, MinIOUploadStorage) |
✅ v0.24.0 | tempest_fastapi_sdk.utils.storage_backends |
HTTPClient (wrapper typed do httpx) com retry/backoff/circuit-breaker |
✅ v0.28.0 | tempest_fastapi_sdk.utils.http_client |
OpenTelemetry tracing — setup_tracing(app, otlp_endpoint=…) |
❌ pendente | — |
Outbox pattern — BaseRepository.save_with_outbox(model, event) |
❌ pendente | — |
Tier A — comuns em backend SaaS¶
| Feature | Status | Onde |
|---|---|---|
EmailUtils.render_template(path, ctx) com Jinja2 |
✅ v0.24.0 | EmailUtils.render_template + templates bundled |
OAuth2 / OIDC providers (GoogleOAuthClient, GitHubOAuthClient, OIDCProvider) |
✅ v0.29.0 | tempest_fastapi_sdk.api.oauth |
CSRFMiddleware + make_csrf_token_dependency |
✅ v0.29.0 | tempest_fastapi_sdk.api.middlewares.csrf |
BodySizeLimitMiddleware |
✅ v0.28.0 | tempest_fastapi_sdk.api.middlewares.body_size |
BaseRepository.bulk_create_values / bulk_upsert |
✅ v0.28.0 | BaseRepository |
Endpoint Prometheus /metrics |
✅ v0.28.0 | tempest_fastapi_sdk.api.routers.metrics |
| Bundled signup / activate / login / password-reset | ✅ v0.31.0 | tempest_fastapi_sdk.auth |
tempest db + tempest user CLI |
✅ v0.30.0 | tempest_fastapi_sdk.cli.db / cli.user |
BaseRepository.bulk_update (filters + values) |
✅ pré-existente | BaseRepository.bulk_update |
Tier B — quando o serviço crescer¶
| Feature | Status |
|---|---|
2FA / TOTP (pyotp wrapper + AdminModel.totp_secret) |
❌ pendente |
Escopo multi-tenant — TenantScopedRepository(tenant_id) auto-injetando WHERE tenant_id = … |
❌ pendente |
SlowQueryLogger — evento SQLAlchemy logando query > N ms com EXPLAIN |
❌ pendente |
AlembicHelper.safe_upgrade() — bloqueia migrations destrutivas sem --force |
❌ pendente |
Graceful shutdown — drenar requisições in-flight no SIGTERM |
❌ pendente |
make_websocket_router — auth bearer, heartbeat, broadcast |
❌ pendente |
CLI: tempest db seed, tempest secrets rotate |
❌ pendente |
Tudo que já entregamos¶
✅ v0.23.0 — Storage MinIO/S3¶
AsyncMinIOClient via extra [minio] — bucket lifecycle, object I/O, streaming download, presigned URLs.
✅ v0.24.0 — Uploads pluggáveis + idempotência + email templates¶
UploadStorageprotocol +LocalUploadStorage+MinIOUploadStorageIdempotencyMiddleware+MemoryIdempotencyStore+RedisIdempotencyStoreEmailUtils.render_template(template, ctx)com Jinja2 + autoescape
✅ v0.25.0 — CLI docker-compose generator¶
tempest new emite docker-compose.yaml baseado nos extras escolhidos. Postgres sempre, [cache]→Redis, [queue]/[tasks]→RabbitMQ, [minio]→MinIO + bootstrap, [email]→MailHog. Tags fixadas. .env.example recebe addendum.
✅ v0.26.0 — tempest generate --docker + image bumps¶
Regera compose num projeto existente. Postgres 18 / Redis 8 / RabbitMQ 4. Pydantic schemas + settings com title/description/examples.
✅ v0.28.0 — Observabilidade + retries¶
- Endpoint Prometheus
/metrics+PrometheusMiddleware HTTPClient(wrapper typed do httpx) com retry/backoff/circuit-breaker/X-Request-IDpropagationBodySizeLimitMiddlewareBaseRepository.bulk_create_values+bulk_upsert
✅ v0.29.0 — Security middlewares + OAuth providers¶
CSRFMiddleware+make_csrf_token_dependency- OAuth2/OIDC:
GoogleOAuthClient,GitHubOAuthClient,OIDCProvider - Fix Postgres 18 mount path no docker-compose
✅ v0.29.1 — Scaffold com UserModel + admin wiring¶
tempest new agora gera UserModel concreto + monta admin out of the box. Default extras auth,admin.
✅ v0.30.0 — CLI db + user¶
tempest db init/revision/upgrade/downgrade/current/historytempest user create [--admin]+tempest user list [--admin]- Resolução
DATABASE_URLvia flag → env → settings → ini
✅ v0.30.1 — Alembic reorder hook¶
reorder_base_columns_first hook emite id, is_active, created_at, updated_at primeiro em todo op.create_table autogerado.
✅ v0.30.2 — sqlalchemy.url vazio no alembic.ini¶
Credenciais não entram mais no VCS. env.py resolve URL em runtime.
✅ v0.30.3 — Post-write hooks silenciosos¶
ruff_format antes de ruff_fix + --quiet em ambos — sem ruído no stdout durante tempest db revision.
✅ v0.31.0 — Bundled auth flow¶
UserAuthService— signup / activate / login / request_password_reset / confirm_password_resetmake_auth_router— 5 endpoints prontos pra mountBaseUserTokenModel+UserTokenPurpose(activation/password_reset/email_verification)AuthSettingsmixin —AUTH_AUTO_ACTIVATE,AUTH_RETURN_TOKEN_IN_RESPONSE, TTLs, URL templates- Templates Jinja2 bundled (override colocando arquivo de mesmo nome no
template_dir)
✅ v0.31.1 — BaseSchema em tokens + docstrings completas¶
ActivationToken / PasswordResetToken rewritten como BaseSchema (não mais dataclass). Toda DTO de auth com docstring detalhada.
✅ v0.31.2 — session: AsyncSession em UserAuthService¶
Any removido — todas as 7 assinaturas do service tipam AsyncSession.
Próximos passos¶
| Release | Conteúdo |
|---|---|
| v0.32.0+ | OpenTelemetry tracing (setup_tracing(app, otlp_endpoint=…)) com auto-instrumentação FastAPI/SQLAlchemy/httpx |
| v0.33.0+ | Outbox pattern (BaseRepository.save_with_outbox(model, event)) drenado por AsyncBrokerManager |
O roadmap é honesto, não aspiracional
Itens fora dos próximos cuts só vão pro changelog quando a pressão de negócio puxar. Esta página é atualizada a cada release — se algo deveria estar aqui e não está, abra uma issue.
Como pedir uma feature¶
Abra issue em https://github.com/mauriciobenjamin700/tempest-fastapi-sdk/issues descrevendo:
- O caso de uso real (não a solução).
- O que você faz hoje como workaround.
- Por que o workaround dói (perf, segurança, ergonomia, manutenção).
Issues com caso de uso concreto sobem na fila — abstrações sem demanda não entram, mesmo quando "fariam sentido".