Ir para o conteúdo

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 tracingsetup_tracing(app, otlp_endpoint=…) ❌ pendente
Outbox patternBaseRepository.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

  • UploadStorage protocol + LocalUploadStorage + MinIOUploadStorage
  • IdempotencyMiddleware + MemoryIdempotencyStore + RedisIdempotencyStore
  • EmailUtils.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-ID propagation
  • BodySizeLimitMiddleware
  • BaseRepository.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/history
  • tempest user create [--admin] + tempest user list [--admin]
  • Resolução DATABASE_URL via 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_reset
  • make_auth_router — 5 endpoints prontos pra mount
  • BaseUserTokenModel + UserTokenPurpose (activation/password_reset/email_verification)
  • AuthSettings mixin — 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:

  1. O caso de uso real (não a solução).
  2. O que você faz hoje como workaround.
  3. 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".