Refactoring
This commit is contained in:
@@ -6,15 +6,15 @@ import { ServicesLive } from "./Services"
|
|||||||
import { TodoRepository, createDefaultTodos } from "./TodoRepository"
|
import { TodoRepository, createDefaultTodos } from "./TodoRepository"
|
||||||
import { ExpressApp } from "./express/ExpressApp"
|
import { ExpressApp } from "./express/ExpressApp"
|
||||||
import { ExpressHTTPServer } from "./express/ExpressHTTPServer"
|
import { ExpressHTTPServer } from "./express/ExpressHTTPServer"
|
||||||
import { RPCProcedure } from "./rpc/RPCProcedure"
|
|
||||||
import { RPCServer } from "./rpc/RPCServer"
|
import { RPCServer } from "./rpc/RPCServer"
|
||||||
|
import { RPCProcedureBuilder } from "./rpc/procedures/RPCProcedureBuilder"
|
||||||
import { CreateTRPCContext } from "./trpc/CreateTRPCContext"
|
import { CreateTRPCContext } from "./trpc/CreateTRPCContext"
|
||||||
import { TRPCBuilder } from "./trpc/TRPCBuilder"
|
import { TRPCBuilder } from "./trpc/TRPCBuilder"
|
||||||
|
|
||||||
|
|
||||||
const ServerLive = ExpressHTTPServer.Live.pipe(
|
const ServerLive = ExpressHTTPServer.Live.pipe(
|
||||||
Layer.provide(RPCServer.Live),
|
Layer.provide(RPCServer.Live),
|
||||||
Layer.provide(RPCProcedure.Live),
|
Layer.provide(RPCProcedureBuilder.Live),
|
||||||
Layer.provide(TRPCBuilder.Live),
|
Layer.provide(TRPCBuilder.Live),
|
||||||
Layer.provide(CreateTRPCContext.Live),
|
Layer.provide(CreateTRPCContext.Live),
|
||||||
Layer.provide(ExpressApp.Live),
|
Layer.provide(ExpressApp.Live),
|
||||||
@@ -70,9 +70,5 @@ const main = Effect.gen(function*() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
BunRuntime.runMain(main.pipe(
|
BunRuntime.runMain(main.pipe(
|
||||||
Effect.provide(
|
Effect.provide(ServicesLive)
|
||||||
Layer.mergeAll(
|
|
||||||
ServicesLive
|
|
||||||
)
|
|
||||||
)
|
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
import { Context, Effect, Layer } from "effect"
|
|
||||||
import { TRPCBuilder } from "../trpc/TRPCBuilder"
|
|
||||||
|
|
||||||
|
|
||||||
const procedure = TRPCBuilder.pipe(Effect.map(t => t.procedure))
|
|
||||||
|
|
||||||
export class RPCProcedure extends Context.Tag("RPCProcedure")<RPCProcedure, Effect.Effect.Success<typeof procedure>>() {}
|
|
||||||
|
|
||||||
export module RPCProcedure {
|
|
||||||
export const Live = Layer.effect(RPCProcedure, procedure)
|
|
||||||
}
|
|
||||||
13
packages/server/src/rpc/procedures/RPCProcedureBuilder.ts
Normal file
13
packages/server/src/rpc/procedures/RPCProcedureBuilder.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { Context, Effect, Layer } from "effect"
|
||||||
|
import { TRPCBuilder } from "../../trpc/TRPCBuilder"
|
||||||
|
|
||||||
|
|
||||||
|
const procedure = TRPCBuilder.pipe(Effect.map(t => t.procedure))
|
||||||
|
|
||||||
|
export class RPCProcedureBuilder extends Context.Tag("RPCProcedureBuilder")<RPCProcedureBuilder,
|
||||||
|
Effect.Effect.Success<typeof procedure>
|
||||||
|
>() {}
|
||||||
|
|
||||||
|
export module RPCProcedureBuilder {
|
||||||
|
export const Live = Layer.effect(RPCProcedureBuilder, procedure)
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import { TRPCBuilder } from "../../trpc/TRPCBuilder"
|
import { TRPCBuilder } from "../../trpc/TRPCBuilder"
|
||||||
import { RPCProcedure } from "../RPCProcedure"
|
import { RPCProcedureBuilder } from "../procedures/RPCProcedureBuilder"
|
||||||
import { todosRouter } from "./todos"
|
import { todosRouter } from "./todos"
|
||||||
|
|
||||||
|
|
||||||
export const appRouter = Effect.gen(function*() {
|
export const appRouter = Effect.gen(function*() {
|
||||||
const t = yield* TRPCBuilder
|
const t = yield* TRPCBuilder
|
||||||
const procedure = yield* RPCProcedure
|
const procedure = yield* RPCProcedureBuilder
|
||||||
|
|
||||||
return t.router({
|
return t.router({
|
||||||
ping: procedure.query(({ ctx }) =>
|
ping: procedure.query(({ ctx }) =>
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ import { JsonifiableTodo } from "@todo-tests/common/data"
|
|||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import { TodoRepository } from "../../TodoRepository"
|
import { TodoRepository } from "../../TodoRepository"
|
||||||
import { TRPCBuilder } from "../../trpc/TRPCBuilder"
|
import { TRPCBuilder } from "../../trpc/TRPCBuilder"
|
||||||
import { RPCProcedure } from "../RPCProcedure"
|
import { RPCProcedureBuilder } from "../procedures/RPCProcedureBuilder"
|
||||||
|
|
||||||
|
|
||||||
export const todosRouter = Effect.gen(function*() {
|
export const todosRouter = Effect.gen(function*() {
|
||||||
const t = yield* TRPCBuilder
|
const t = yield* TRPCBuilder
|
||||||
const procedure = yield* RPCProcedure
|
const procedure = yield* RPCProcedureBuilder
|
||||||
|
|
||||||
return t.router({
|
return t.router({
|
||||||
get: procedure
|
get: procedure
|
||||||
@@ -17,9 +17,22 @@ export const todosRouter = Effect.gen(function*() {
|
|||||||
))
|
))
|
||||||
.query(({ ctx, input }) => ctx.run(Effect.gen(function*() {
|
.query(({ ctx, input }) => ctx.run(Effect.gen(function*() {
|
||||||
const todos = yield* TodoRepository
|
const todos = yield* TodoRepository
|
||||||
const todo = yield* yield* todos.get(input.id)
|
|
||||||
|
|
||||||
return yield* S.encode(JsonifiableTodo)(todo)
|
return yield* S.encode(S.OptionFromNullOr(JsonifiableTodo))(
|
||||||
})))
|
yield* todos.get(input.id)
|
||||||
|
)
|
||||||
|
}))),
|
||||||
|
|
||||||
|
getOrThrow: procedure
|
||||||
|
.input(S.decodeUnknownSync(
|
||||||
|
S.Struct({ id: S.String })
|
||||||
|
))
|
||||||
|
.query(({ ctx, input }) => ctx.run(Effect.gen(function*() {
|
||||||
|
const todos = yield* TodoRepository
|
||||||
|
|
||||||
|
return yield* S.encode(JsonifiableTodo)(
|
||||||
|
yield* yield* todos.get(input.id)
|
||||||
|
)
|
||||||
|
}))),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user