feat: adiciona Drizzle ORM + Postgres via Hyperdrive - #169
Open
iacapuca wants to merge 1 commit into
Open
Conversation
Base para desenvolver features com banco. Nao altera nenhuma rota, query ou componente existente. - app/lib/db.server.ts: helper withDb(), espelha app/lib/strapi.ts - app/db/schema.ts: modulo de tabelas (vazio, aguarda a primeira) - drizzle.config.ts + scripts db:generate / db:migrate / db:studio - docker-compose.yml: Postgres 18 para dev local - wrangler.jsonc: binding Hyperdrive (prod + staging) e placement smart - tsconfig: worker-configuration.d.ts gerado por `wrangler types` Duas conexoes distintas para o mesmo banco: o Worker usa o binding Hyperdrive em runtime; o drizzle-kit usa DATABASE_URL direto para migrations, porque nao consegue discar um binding do Workers. Os runtime types do Workers tipam Response.json() como unknown em vez do any do DOM, o que expoe 272 erros pre-existentes de .json() sem validacao (282 -> 554 no typecheck, que ja era informativo). Sao latentes, nao regressao — o padrao para paga-los ja existe nas queries com Zod. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NzvzBUT8kw8SbR4bsGab97
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Base para desenvolver features com banco. Não altera nenhuma rota, query ou componente existente — o seam é dentro dos handlers
createServerFnemapp/queries/, então trocar umcmsFetch()por umdb.select()não mexe em rota, query key nem componente.O que entra
app/lib/db.server.tswithDb(), espelhaapp/lib/strapi.tsapp/db/schema.tsdrizzle.config.tsdocker-compose.ymlworker-configuration.d.tswrangler typesScripts:
db:generate,db:migrate,db:studio.Duas conexões para o mesmo banco
É o ponto que costuma quebrar:
DATABASE_URLO drizzle-kit não consegue discar um binding do Workers — daí as duas.
Hyperdrive em vez de conexão direta porque cada invocação do Worker abriria TCP+TLS+auth até o Azure (~7 round-trips), e o Workers limita 6 conexões concorrentes por invocação.
placement: smartacompanha, já que os handlers fazemPromise.allde várias chamadas.O typecheck sobe de 282 para 554
Os runtime types do Workers tipam
Response.json()comounknownem vez doanydo DOM, o que expõe 272 erros pré-existentes de.json()consumido sem validação —PointInfoPopup.tsxconcentra 251.São latentes, não regressão: o typecheck já era informativo e já falhava com 282. O padrão para pagar essa dívida já existe no repo, nas queries migradas pro Strapi com Zod.
db.server.ts,db/schema.tse o build passam limpos.Verificado
db:generate→db:migratecontra Postgres 18.4 real, tabela criada com os tipos certos/var/lib/postgresql/18/docker; o volume monta o pai, senão o banco não persisteNão verificado: o caminho Hyperdrive em runtime, porque depende dos IDs que ainda não existem.
Antes de mergear
Criar os dois Hyperdrive e substituir os
REPLACE_WITH_*_HYPERDRIVE_IDnowrangler.jsonc:E liberar os IPs de egress da Cloudflare no firewall do Azure — o Hyperdrive conecta da rede da Cloudflare, e Allow Azure services não cobre isso.
Vale também considerar
wrangler types --checkna CI, para falhar se alguém mexer nowrangler.jsoncsem regenerar os tipos.🤖 Generated with Claude Code