diff --git a/apps/server/src/api/middlewares/db.ts b/apps/server/src/api/middlewares/db.ts index 01d55ce..6a904a6 100644 --- a/apps/server/src/api/middlewares/db.ts +++ b/apps/server/src/api/middlewares/db.ts @@ -1,29 +1,13 @@ import { os } from '@orpc/server' -import { createDb } from '@/db' +import { getDb } from '@/db' const IS_SERVERLESS = false // TODO: 这里需要优化 -let globalDb: ReturnType | null = null - -function getDb() { - if (IS_SERVERLESS) { - return createDb() - } - - if (!globalDb) { - globalDb = createDb() - } - - return globalDb -} - -export const dbProvider = os.middleware(async ({ context, next }) => { - const db = getDb() - +export const db = os.middleware(async ({ context, next }) => { return next({ context: { ...context, - db, + db: getDb(IS_SERVERLESS), }, }) }) diff --git a/apps/server/src/api/routers/todo.ts b/apps/server/src/api/routers/todo.ts index 9ebe8ab..580b4d5 100644 --- a/apps/server/src/api/routers/todo.ts +++ b/apps/server/src/api/routers/todo.ts @@ -1,20 +1,18 @@ import { ORPCError } from '@orpc/server' import { eq } from 'drizzle-orm' -import { dbProvider } from '@/api/middlewares' +import { db } from '@/api/middlewares' import { os } from '@/api/server' import { todoTable } from '@/db/schema' -export const list = os.todo.list - .use(dbProvider) - .handler(async ({ context }) => { - const todos = await context.db.query.todoTable.findMany({ - orderBy: (todos, { desc }) => [desc(todos.createdAt)], - }) - return todos +export const list = os.todo.list.use(db).handler(async ({ context }) => { + const todos = await context.db.query.todoTable.findMany({ + orderBy: (todos, { desc }) => [desc(todos.createdAt)], }) + return todos +}) export const create = os.todo.create - .use(dbProvider) + .use(db) .handler(async ({ context, input }) => { const [newTodo] = await context.db .insert(todoTable) @@ -29,7 +27,7 @@ export const create = os.todo.create }) export const update = os.todo.update - .use(dbProvider) + .use(db) .handler(async ({ context, input }) => { const [updatedTodo] = await context.db .update(todoTable) @@ -45,7 +43,7 @@ export const update = os.todo.update }) export const remove = os.todo.remove - .use(dbProvider) + .use(db) .handler(async ({ context, input }) => { await context.db.delete(todoTable).where(eq(todoTable.id, input.id)) }) diff --git a/apps/server/src/db/index.ts b/apps/server/src/db/index.ts index 4da3faa..4d5e3c9 100644 --- a/apps/server/src/db/index.ts +++ b/apps/server/src/db/index.ts @@ -11,3 +11,18 @@ export function createDb() { schema, }) } + +export type Db = ReturnType + +export const getDb = (() => { + let db: Db | null = null + + return (serverless: boolean = false) => { + if (serverless) { + return createDb() + } + + db ??= createDb() + return db + } +})()