diff --git a/packages/server/src/rpc/routers/todo.ts b/packages/server/src/rpc/routers/todo.ts index 1d714f8..d2b746c 100644 --- a/packages/server/src/rpc/routers/todo.ts +++ b/packages/server/src/rpc/routers/todo.ts @@ -9,6 +9,7 @@ import { RPCProcedureBuilder } from "../procedures/RPCProcedureBuilder" const encodeTodos = S.encode(S.Chunk(JsonifiableTodo)) const encodeOptionalTodo = S.encode(S.OptionFromNullOr(JsonifiableTodo)) +const decodeTodo = S.decode(JsonifiableTodo) export const todoRouter = Effect.gen(function*() { @@ -51,27 +52,41 @@ export const todoRouter = Effect.gen(function*() { getByID: procedure .input(S.decodeUnknownPromise(S.String)) .query(({ ctx, input }) => ctx.run(Effect.gen(function*() { + const todos = yield* TodoRepository + return yield* encodeOptionalTodo( - yield* (yield* TodoRepository).getByID(input) + yield* todos.getByID(input) ) }))), add: procedure - .input(S.decodeUnknownPromise(JsonifiableTodo)) + .input(S.decodeUnknownPromise(S.encodedSchema(JsonifiableTodo))) .mutation(({ ctx, input }) => ctx.run(Effect.gen(function*() { - return yield* (yield* TodoRepository).add(input) + const todos = yield* TodoRepository + + return yield* todos.add( + yield* decodeTodo(input) + ) }))), update: procedure - .input(S.decodeUnknownPromise(JsonifiableTodo)) + .input(S.decodeUnknownPromise(S.encodedSchema(JsonifiableTodo))) .mutation(({ ctx, input }) => ctx.run(Effect.gen(function*() { - return yield* (yield* TodoRepository).update(input) + const todos = yield* TodoRepository + + return yield* todos.update( + yield* decodeTodo(input) + ) }))), remove: procedure - .input(S.decodeUnknownPromise(JsonifiableTodo)) + .input(S.decodeUnknownPromise(S.encodedSchema(JsonifiableTodo))) .mutation(({ ctx, input }) => ctx.run(Effect.gen(function*() { - return yield* (yield* TodoRepository).remove(input) + const todos = yield* TodoRepository + + return yield* todos.remove( + yield* decodeTodo(input) + ) }))), }) })