From 3eebb7485d33ef9f4052b7864fa18f202b88b5a9 Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 7 Feb 2025 17:41:42 +0000 Subject: [PATCH] feat: reintroduce drizzle connection --- packages/api/src/trpc.ts | 21 ++++++++++++++++++--- packages/db/package.json | 1 + packages/db/src/client.ts | 18 ++++++++++++------ pnpm-lock.yaml | 21 ++++++++++++++++----- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/packages/api/src/trpc.ts b/packages/api/src/trpc.ts index bbc41fbe..71325561 100644 --- a/packages/api/src/trpc.ts +++ b/packages/api/src/trpc.ts @@ -1,5 +1,7 @@ +import type { Pool } from "@neondatabase/serverless"; import type { FetchCreateContextFnOptions } from "@trpc/server/adapters/fetch"; import type { CreateNextContextOptions } from "@trpc/server/adapters/next"; +import type { NeonDatabase as DrizzleClient } from "drizzle-orm/neon-serverless"; import type { OpenApiMeta } from "trpc-to-openapi"; import { initTRPC, TRPCError } from "@trpc/server"; import superjson from "superjson"; @@ -7,6 +9,7 @@ import { ZodError } from "zod"; import type { Database } from "@kan/db/types/database.types"; import type { SupabaseClient } from "@kan/supabase"; +// import { createDrizzleClient } from "@kan/db/client"; import { createNextApiClient, createTRPCAdminClient, @@ -21,6 +24,13 @@ interface CreateContextOptions { user: User | null; db: SupabaseClient; adminDb: SupabaseClient; + drizzleDb: + | (DrizzleClient< + typeof import("/Users/henryball/kan/packages/db/dist/schema") + > & { + $client: Pool; + }) + | null; } export const createInnerTRPCContext = (opts: CreateContextOptions) => { @@ -28,6 +38,7 @@ export const createInnerTRPCContext = (opts: CreateContextOptions) => { user: opts.user, db: opts.db, adminDb: opts.adminDb, + drizzleDb: opts.drizzleDb, }; }; @@ -42,7 +53,9 @@ export const createTRPCContext = async ({ data: { user }, } = await db.auth.getUser(); - return createInnerTRPCContext({ db, adminDb, user }); + // const drizzleDb = createDrizzleClient(); + + return createInnerTRPCContext({ db, adminDb, user, drizzleDb: null }); }; export const createRESTContext = async ({ req }: CreateNextContextOptions) => { @@ -55,14 +68,16 @@ export const createRESTContext = async ({ req }: CreateNextContextOptions) => { : null; if (!accessToken) { - return createInnerTRPCContext({ db, adminDb, user: null }); + return createInnerTRPCContext({ db, adminDb, user: null, drizzleDb: null }); } const { data: { user }, } = await db.auth.getUser(accessToken); - return createInnerTRPCContext({ db, adminDb, user }); + // const drizzleDb = createDrizzleClient(); + + return createInnerTRPCContext({ db, adminDb, user, drizzleDb: null }); }; const t = initTRPC diff --git a/packages/db/package.json b/packages/db/package.json index b9d9e1f4..0fd170cd 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -39,6 +39,7 @@ }, "dependencies": { "@kan/shared": "workspace:^", + "@neondatabase/serverless": "^0.10.4", "@vercel/postgres": "^0.10.0", "drizzle-orm": "^0.36.4", "drizzle-zod": "^0.5.1", diff --git a/packages/db/src/client.ts b/packages/db/src/client.ts index 3e2e5675..f1089afe 100644 --- a/packages/db/src/client.ts +++ b/packages/db/src/client.ts @@ -1,9 +1,15 @@ -import { sql } from "@vercel/postgres"; -import { drizzle } from "drizzle-orm/vercel-postgres"; +import { Pool } from "@neondatabase/serverless"; +import { drizzle } from "drizzle-orm/neon-serverless"; import * as schema from "./schema"; -export const db = drizzle({ - client: sql, - schema, -}); \ No newline at end of file +export const createDrizzleClient = () => { + const pool = new Pool({ + connectionString: process.env.POSTGRES_URL, + }); + + return drizzle({ + client: pool, + schema, + }); +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fc47c9c..061dde7b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -257,15 +257,18 @@ importers: '@kan/shared': specifier: workspace:^ version: link:../shared + '@neondatabase/serverless': + specifier: ^0.10.4 + version: 0.10.4 '@vercel/postgres': specifier: ^0.10.0 version: 0.10.0(utf-8-validate@6.0.3) drizzle-orm: specifier: ^0.36.4 - version: 0.36.4(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1) + version: 0.36.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1) drizzle-zod: specifier: ^0.5.1 - version: 0.5.1(drizzle-orm@0.36.4(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1))(zod@3.24.0) + version: 0.5.1(drizzle-orm@0.36.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1))(zod@3.24.0) zod: specifier: 'catalog:' version: 3.24.0 @@ -1300,6 +1303,9 @@ packages: '@mintlify/models': 0.0.25 openapi-types: 12.x + '@neondatabase/serverless@0.10.4': + resolution: {integrity: sha512-2nZuh3VUO9voBauuh+IGYRhGU/MskWHt1IuZvHcJw6GLjDgtqj/KViKo7SIrLdGLdot7vFbiRRw+BgEy3wT9HA==} + '@neondatabase/serverless@0.9.5': resolution: {integrity: sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==} @@ -5912,6 +5918,10 @@ snapshots: zod: 3.24.0 zod-to-json-schema: 3.24.1(zod@3.24.0) + '@neondatabase/serverless@0.10.4': + dependencies: + '@types/pg': 8.11.6 + '@neondatabase/serverless@0.9.5': dependencies: '@types/pg': 8.11.6 @@ -7221,8 +7231,9 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.36.4(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1): + drizzle-orm@0.36.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1): optionalDependencies: + '@neondatabase/serverless': 0.10.4 '@types/pg': 8.11.6 '@types/react': 18.3.15 '@vercel/postgres': 0.10.0(utf-8-validate@6.0.3) @@ -7230,9 +7241,9 @@ snapshots: postgres: 3.4.5 react: 18.3.1 - drizzle-zod@0.5.1(drizzle-orm@0.36.4(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1))(zod@3.24.0): + drizzle-zod@0.5.1(drizzle-orm@0.36.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1))(zod@3.24.0): dependencies: - drizzle-orm: 0.36.4(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1) + drizzle-orm: 0.36.4(@neondatabase/serverless@0.10.4)(@types/pg@8.11.6)(@types/react@18.3.15)(@vercel/postgres@0.10.0(utf-8-validate@6.0.3))(pg@8.13.1)(postgres@3.4.5)(react@18.3.1) zod: 3.24.0 dunder-proto@1.0.0: