From 98795975a51406994e9473d3d19f2c6a551ca363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 5 Jul 2024 16:22:59 +0200 Subject: [PATCH] Refactoring --- packages/server/src/index.ts | 10 +++----- packages/server/src/rpc/RPCProcedure.ts | 11 --------- .../src/rpc/procedures/RPCProcedureBuilder.ts | 13 +++++++++++ packages/server/src/rpc/routers/index.ts | 4 ++-- packages/server/src/rpc/routers/todos.ts | 23 +++++++++++++++---- 5 files changed, 36 insertions(+), 25 deletions(-) delete mode 100644 packages/server/src/rpc/RPCProcedure.ts create mode 100644 packages/server/src/rpc/procedures/RPCProcedureBuilder.ts diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 1572dc2..bca5aed 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -6,15 +6,15 @@ import { ServicesLive } from "./Services" import { TodoRepository, createDefaultTodos } from "./TodoRepository" import { ExpressApp } from "./express/ExpressApp" import { ExpressHTTPServer } from "./express/ExpressHTTPServer" -import { RPCProcedure } from "./rpc/RPCProcedure" import { RPCServer } from "./rpc/RPCServer" +import { RPCProcedureBuilder } from "./rpc/procedures/RPCProcedureBuilder" import { CreateTRPCContext } from "./trpc/CreateTRPCContext" import { TRPCBuilder } from "./trpc/TRPCBuilder" const ServerLive = ExpressHTTPServer.Live.pipe( Layer.provide(RPCServer.Live), - Layer.provide(RPCProcedure.Live), + Layer.provide(RPCProcedureBuilder.Live), Layer.provide(TRPCBuilder.Live), Layer.provide(CreateTRPCContext.Live), Layer.provide(ExpressApp.Live), @@ -70,9 +70,5 @@ const main = Effect.gen(function*() { }) BunRuntime.runMain(main.pipe( - Effect.provide( - Layer.mergeAll( - ServicesLive - ) - ) + Effect.provide(ServicesLive) )) diff --git a/packages/server/src/rpc/RPCProcedure.ts b/packages/server/src/rpc/RPCProcedure.ts deleted file mode 100644 index 7b919a9..0000000 --- a/packages/server/src/rpc/RPCProcedure.ts +++ /dev/null @@ -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")>() {} - -export module RPCProcedure { - export const Live = Layer.effect(RPCProcedure, procedure) -} diff --git a/packages/server/src/rpc/procedures/RPCProcedureBuilder.ts b/packages/server/src/rpc/procedures/RPCProcedureBuilder.ts new file mode 100644 index 0000000..d816e4d --- /dev/null +++ b/packages/server/src/rpc/procedures/RPCProcedureBuilder.ts @@ -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") +>() {} + +export module RPCProcedureBuilder { + export const Live = Layer.effect(RPCProcedureBuilder, procedure) +} diff --git a/packages/server/src/rpc/routers/index.ts b/packages/server/src/rpc/routers/index.ts index a87d259..7e5a4ac 100644 --- a/packages/server/src/rpc/routers/index.ts +++ b/packages/server/src/rpc/routers/index.ts @@ -1,12 +1,12 @@ import { Effect } from "effect" import { TRPCBuilder } from "../../trpc/TRPCBuilder" -import { RPCProcedure } from "../RPCProcedure" +import { RPCProcedureBuilder } from "../procedures/RPCProcedureBuilder" import { todosRouter } from "./todos" export const appRouter = Effect.gen(function*() { const t = yield* TRPCBuilder - const procedure = yield* RPCProcedure + const procedure = yield* RPCProcedureBuilder return t.router({ ping: procedure.query(({ ctx }) => diff --git a/packages/server/src/rpc/routers/todos.ts b/packages/server/src/rpc/routers/todos.ts index d758224..3133d9b 100644 --- a/packages/server/src/rpc/routers/todos.ts +++ b/packages/server/src/rpc/routers/todos.ts @@ -3,12 +3,12 @@ import { JsonifiableTodo } from "@todo-tests/common/data" import { Effect } from "effect" import { TodoRepository } from "../../TodoRepository" import { TRPCBuilder } from "../../trpc/TRPCBuilder" -import { RPCProcedure } from "../RPCProcedure" +import { RPCProcedureBuilder } from "../procedures/RPCProcedureBuilder" export const todosRouter = Effect.gen(function*() { const t = yield* TRPCBuilder - const procedure = yield* RPCProcedure + const procedure = yield* RPCProcedureBuilder return t.router({ get: procedure @@ -17,9 +17,22 @@ export const todosRouter = Effect.gen(function*() { )) .query(({ ctx, input }) => ctx.run(Effect.gen(function*() { 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) + ) + }))), }) })