From 6092d82f3459d32462d8d1558dd776fec499450d Mon Sep 17 00:00:00 2001 From: imbytecat Date: Sun, 18 Jan 2026 03:44:07 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84ORPC=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=BB=93=E6=9E=84=E4=B8=8E=E8=B7=AF=E7=94=B1=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新导入路径以正确引用合约文件并重构导出结构。 - 使用 os 实例替换手动实现的 ORPC 处理函数,统一通过生成的合约接口调用并集成数据库中间件。 - 使用服务器实例的路由功能替换原有的路由定义。 - 添加ORPC服务器实现,基于合约定义并指定空上下文类型。 - 修正导入路径,将 './contracts' 更新为 './contract' 以匹配实际文件路径。 --- src/orpc/{contracts/index.ts => contract.ts} | 2 +- src/orpc/handlers/todo.ts | 12 ++++++------ src/orpc/router.ts | 5 +++-- src/orpc/server.ts | 7 +++++++ src/orpc/types.ts | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) rename src/orpc/{contracts/index.ts => contract.ts} (51%) create mode 100644 src/orpc/server.ts diff --git a/src/orpc/contracts/index.ts b/src/orpc/contract.ts similarity index 51% rename from src/orpc/contracts/index.ts rename to src/orpc/contract.ts index 0056f6e..19f8b05 100644 --- a/src/orpc/contracts/index.ts +++ b/src/orpc/contract.ts @@ -1,4 +1,4 @@ -import { todoContract } from './todo' +import { todoContract } from './contracts/todo' export const contract = { todo: todoContract, diff --git a/src/orpc/handlers/todo.ts b/src/orpc/handlers/todo.ts index 65702f7..9136e14 100644 --- a/src/orpc/handlers/todo.ts +++ b/src/orpc/handlers/todo.ts @@ -1,10 +1,10 @@ -import { implement, ORPCError } from '@orpc/server' +import { ORPCError } from '@orpc/server' import { eq } from 'drizzle-orm' import { todoTable } from '@/db/schema' import { dbProvider } from '@/orpc/middlewares' -import { contract } from '../contracts' +import { os } from '@/orpc/server' -export const list = implement(contract.todo.list) +export const list = os.todo.list .use(dbProvider) .handler(async ({ context }) => { const todos = await context.db.query.todoTable.findMany({ @@ -13,7 +13,7 @@ export const list = implement(contract.todo.list) return todos }) -export const create = implement(contract.todo.create) +export const create = os.todo.create .use(dbProvider) .handler(async ({ context, input }) => { const [newTodo] = await context.db @@ -28,7 +28,7 @@ export const create = implement(contract.todo.create) return newTodo }) -export const update = implement(contract.todo.update) +export const update = os.todo.update .use(dbProvider) .handler(async ({ context, input }) => { const [updatedTodo] = await context.db @@ -44,7 +44,7 @@ export const update = implement(contract.todo.update) return updatedTodo }) -export const remove = implement(contract.todo.remove) +export const remove = os.todo.remove .use(dbProvider) .handler(async ({ context, input }) => { await context.db.delete(todoTable).where(eq(todoTable.id, input.id)) diff --git a/src/orpc/router.ts b/src/orpc/router.ts index 70b205b..603f313 100644 --- a/src/orpc/router.ts +++ b/src/orpc/router.ts @@ -1,5 +1,6 @@ import * as todo from './handlers/todo' +import { os } from './server' -export const router = { +export const router = os.router({ todo, -} +}) diff --git a/src/orpc/server.ts b/src/orpc/server.ts new file mode 100644 index 0000000..34af679 --- /dev/null +++ b/src/orpc/server.ts @@ -0,0 +1,7 @@ +import { implement } from '@orpc/server' +import { contract } from './contract' + +// biome-ignore lint/complexity/noBannedTypes: 暂无 context +export type ORPCContext = {} + +export const os = implement(contract).$context() diff --git a/src/orpc/types.ts b/src/orpc/types.ts index c95875f..e3e814c 100644 --- a/src/orpc/types.ts +++ b/src/orpc/types.ts @@ -3,7 +3,7 @@ import type { InferContractRouterInputs, InferContractRouterOutputs, } from '@orpc/contract' -import type { contract } from './contracts' +import type { contract } from './contract' export type Contract = typeof contract export type RouterClient = ContractRouterClient