This commit is contained in:
Julien Valverdé
2024-07-06 00:02:47 +02:00
parent bb1a422097
commit 89a76f85ac
4 changed files with 62 additions and 41 deletions

View File

@@ -11,24 +11,41 @@ export const todosRouter = Effect.gen(function*() {
const procedure = yield* RPCProcedureBuilder
return t.router({
all: procedure.query(({ ctx }) => ctx.run(Effect.gen(function*() {
const todos = yield* TodoRepository
all: procedure
.query(({ ctx }) => ctx.run(Effect.gen(function*() {
const todos = yield* TodoRepository
return yield* S.encode(S.Array(JsonifiableTodo))(
yield* todos.todos.get
)
}))),
return yield* S.encode(S.Array(JsonifiableTodo))(
yield* todos.todos.get
)
}))),
get: procedure
.input(S.decodeUnknownSync(
S.Struct({ id: S.String })
))
getByID: procedure
.input(S.decodeUnknownPromise(S.String))
.query(({ ctx, input }) => ctx.run(Effect.gen(function*() {
const todos = yield* TodoRepository
return yield* S.encode(S.OptionFromNullOr(JsonifiableTodo))(
yield* todos.get(input.id)
yield* todos.getByID(input)
)
}))),
add: procedure
.input(S.decodeUnknownPromise(JsonifiableTodo))
.mutation(({ ctx, input }) => ctx.run(TodoRepository.pipe(
Effect.flatMap(todos => todos.add(input))
))),
update: procedure
.input(S.decodeUnknownPromise(JsonifiableTodo))
.mutation(({ ctx, input }) => ctx.run(TodoRepository.pipe(
Effect.flatMap(todos => todos.update(input))
))),
remove: procedure
.input(S.decodeUnknownPromise(JsonifiableTodo))
.mutation(({ ctx, input }) => ctx.run(TodoRepository.pipe(
Effect.flatMap(todos => todos.remove(input))
))),
})
})