From dd038acd6bbc8eed6fe9acd577b79a91d2f5ecbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 5 Jul 2024 02:37:02 +0200 Subject: [PATCH] todosRouter --- packages/server/src/rpc/routers/index.ts | 5 ++++- packages/server/src/rpc/routers/todos.ts | 25 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 packages/server/src/rpc/routers/todos.ts diff --git a/packages/server/src/rpc/routers/index.ts b/packages/server/src/rpc/routers/index.ts index c9a784c..a87d259 100644 --- a/packages/server/src/rpc/routers/index.ts +++ b/packages/server/src/rpc/routers/index.ts @@ -1,6 +1,7 @@ import { Effect } from "effect" import { TRPCBuilder } from "../../trpc/TRPCBuilder" import { RPCProcedure } from "../RPCProcedure" +import { todosRouter } from "./todos" export const appRouter = Effect.gen(function*() { @@ -10,7 +11,9 @@ export const appRouter = Effect.gen(function*() { return t.router({ ping: procedure.query(({ ctx }) => ctx.run(Effect.succeed("pong")) - ) + ), + + todos: yield* todosRouter, }) }) diff --git a/packages/server/src/rpc/routers/todos.ts b/packages/server/src/rpc/routers/todos.ts new file mode 100644 index 0000000..d758224 --- /dev/null +++ b/packages/server/src/rpc/routers/todos.ts @@ -0,0 +1,25 @@ +import { Schema as S } from "@effect/schema" +import { JsonifiableTodo } from "@todo-tests/common/data" +import { Effect } from "effect" +import { TodoRepository } from "../../TodoRepository" +import { TRPCBuilder } from "../../trpc/TRPCBuilder" +import { RPCProcedure } from "../RPCProcedure" + + +export const todosRouter = Effect.gen(function*() { + const t = yield* TRPCBuilder + const procedure = yield* RPCProcedure + + return t.router({ + get: procedure + .input(S.decodeUnknownSync( + S.Struct({ id: S.String }) + )) + .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) + }))) + }) +})