From f931ea2a1c6496d0f5a0120cf9b497e8d8401141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 28 Jun 2024 23:40:19 +0200 Subject: [PATCH] Working TodoRepository --- bun.lockb | Bin 129264 -> 130723 bytes packages/server/package.json | 3 +++ packages/server/src/TodoRepository.ts | 15 ++++++++------- packages/server/src/index.ts | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/bun.lockb b/bun.lockb index 0b8476ff775985b3d8ad097624da447451f6d559..3958dbfeffebf5c970c324ec044c1180fd847d73 100755 GIT binary patch delta 3721 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 {} @@ -13,17 +14,17 @@ export const TodoRepositoryLive = Layer.effect(TodoRepository, export class TodoRepositoryService { constructor( - readonly ref: SubscriptionRef.SubscriptionRef<(Todo & { id: Option.Some })[]> + readonly todos: SubscriptionRef.SubscriptionRef<(Todo & { id: Option.Some })[]> ) {} get(id: string) { - return this.ref.get.pipe( + return this.todos.get.pipe( Effect.map(Array.findFirst(todo => todo.id.value === id)) ) } getIndex(id: string) { - return this.ref.get.pipe( + return this.todos.get.pipe( Effect.map(Array.findFirstIndex(todo => todo.id.value === id)) ) } @@ -33,10 +34,10 @@ export class TodoRepositoryService { if (Option.isSome(todo.id)) return yield* Effect.fail(new TodoHasID({ todo })) - yield* Ref.update(this.ref, todos => + yield* Ref.update(this.todos, todos => Array.append(todos, new Todo({ ...todo, - id: Option.some(""), + id: Option.some(crypto.randomUUID()), }) as Todo & { id: Option.Some }) ) }) @@ -47,7 +48,7 @@ export class TodoRepositoryService { if (Option.isNone(todo.id)) return yield* Effect.fail(new TodoHasNoID({ todo })) - yield* Ref.update(this.ref, Array.replace( + yield* Ref.update(this.todos, Array.replace( yield* yield* this.getIndex(todo.id.value), todo as Todo & { id: Option.Some }, )) @@ -59,7 +60,7 @@ export class TodoRepositoryService { if (Option.isNone(todo.id)) return yield* Effect.fail(new TodoHasNoID({ todo })) - yield* Ref.update(this.ref, Array.remove( + yield* Ref.update(this.todos, Array.remove( yield* yield* this.getIndex(todo.id.value) )) }) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 2e6ff7b..8e8afd8 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -7,7 +7,7 @@ const main = Effect.gen(function*() { yield* createDefaultTodos const todos = yield* TodoRepository - console.log(yield* todos.ref.get) + console.log(yield* todos.todos.get) }) const runnableMain = main.pipe(