refactor: 重构ORPC模块结构与路由实现
- 更新导入路径以正确引用合约文件并重构导出结构。 - 使用 os 实例替换手动实现的 ORPC 处理函数,统一通过生成的合约接口调用并集成数据库中间件。 - 使用服务器实例的路由功能替换原有的路由定义。 - 添加ORPC服务器实现,基于合约定义并指定空上下文类型。 - 修正导入路径,将 './contracts' 更新为 './contract' 以匹配实际文件路径。
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { todoContract } from './todo'
|
import { todoContract } from './contracts/todo'
|
||||||
|
|
||||||
export const contract = {
|
export const contract = {
|
||||||
todo: todoContract,
|
todo: todoContract,
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { implement, ORPCError } from '@orpc/server'
|
import { ORPCError } from '@orpc/server'
|
||||||
import { eq } from 'drizzle-orm'
|
import { eq } from 'drizzle-orm'
|
||||||
import { todoTable } from '@/db/schema'
|
import { todoTable } from '@/db/schema'
|
||||||
import { dbProvider } from '@/orpc/middlewares'
|
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)
|
.use(dbProvider)
|
||||||
.handler(async ({ context }) => {
|
.handler(async ({ context }) => {
|
||||||
const todos = await context.db.query.todoTable.findMany({
|
const todos = await context.db.query.todoTable.findMany({
|
||||||
@@ -13,7 +13,7 @@ export const list = implement(contract.todo.list)
|
|||||||
return todos
|
return todos
|
||||||
})
|
})
|
||||||
|
|
||||||
export const create = implement(contract.todo.create)
|
export const create = os.todo.create
|
||||||
.use(dbProvider)
|
.use(dbProvider)
|
||||||
.handler(async ({ context, input }) => {
|
.handler(async ({ context, input }) => {
|
||||||
const [newTodo] = await context.db
|
const [newTodo] = await context.db
|
||||||
@@ -28,7 +28,7 @@ export const create = implement(contract.todo.create)
|
|||||||
return newTodo
|
return newTodo
|
||||||
})
|
})
|
||||||
|
|
||||||
export const update = implement(contract.todo.update)
|
export const update = os.todo.update
|
||||||
.use(dbProvider)
|
.use(dbProvider)
|
||||||
.handler(async ({ context, input }) => {
|
.handler(async ({ context, input }) => {
|
||||||
const [updatedTodo] = await context.db
|
const [updatedTodo] = await context.db
|
||||||
@@ -44,7 +44,7 @@ export const update = implement(contract.todo.update)
|
|||||||
return updatedTodo
|
return updatedTodo
|
||||||
})
|
})
|
||||||
|
|
||||||
export const remove = implement(contract.todo.remove)
|
export const remove = os.todo.remove
|
||||||
.use(dbProvider)
|
.use(dbProvider)
|
||||||
.handler(async ({ context, input }) => {
|
.handler(async ({ context, input }) => {
|
||||||
await context.db.delete(todoTable).where(eq(todoTable.id, input.id))
|
await context.db.delete(todoTable).where(eq(todoTable.id, input.id))
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import * as todo from './handlers/todo'
|
import * as todo from './handlers/todo'
|
||||||
|
import { os } from './server'
|
||||||
|
|
||||||
export const router = {
|
export const router = os.router({
|
||||||
todo,
|
todo,
|
||||||
}
|
})
|
||||||
|
|||||||
7
src/orpc/server.ts
Normal file
7
src/orpc/server.ts
Normal file
@@ -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<ORPCContext>()
|
||||||
@@ -3,7 +3,7 @@ import type {
|
|||||||
InferContractRouterInputs,
|
InferContractRouterInputs,
|
||||||
InferContractRouterOutputs,
|
InferContractRouterOutputs,
|
||||||
} from '@orpc/contract'
|
} from '@orpc/contract'
|
||||||
import type { contract } from './contracts'
|
import type { contract } from './contract'
|
||||||
|
|
||||||
export type Contract = typeof contract
|
export type Contract = typeof contract
|
||||||
export type RouterClient = ContractRouterClient<Contract>
|
export type RouterClient = ContractRouterClient<Contract>
|
||||||
|
|||||||
Reference in New Issue
Block a user