From 5388bc139d4fb53fd1e5511416f19783ecd4b304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 28 Jun 2024 22:51:21 +0200 Subject: [PATCH] TodoRepository work --- packages/server/src/TodoRepository.ts | 47 +++++++++++++-------------- packages/server/src/index.ts | 8 ++--- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/packages/server/src/TodoRepository.ts b/packages/server/src/TodoRepository.ts index 3e65fbb..086a099 100644 --- a/packages/server/src/TodoRepository.ts +++ b/packages/server/src/TodoRepository.ts @@ -1,8 +1,14 @@ import { Todo } from "@todo-tests/common/data" -import { Array, Context, Data, Effect, Option, Ref, SubscriptionRef } from "effect" +import { Array, Context, Data, Effect, Layer, Option, Ref, SubscriptionRef } from "effect" -export class TodoRepository extends Context.Tag("TodoRepository")>() {} +export class TodoRepository extends Context.Tag("TodoRepository")() {} + +export const TodoRepositoryLive = Layer.effect(TodoRepository, + SubscriptionRef.make(Array.empty }>()).pipe( + Effect.map(ref => new TodoRepositoryService(ref)) + ) +) export class TodoRepositoryService { @@ -60,27 +66,20 @@ export class TodoRepositoryService { } } -export class TodoHasID extends Data.TaggedError("TodoHasID")<{ - todo: Todo -}> {} - -export class TodoHasNoID extends Data.TaggedError("TodoHasNoID")<{ - todo: Todo -}> {} +export class TodoHasID extends Data.TaggedError("TodoHasID")<{ todo: Todo }> {} +export class TodoHasNoID extends Data.TaggedError("TodoHasNoID")<{ todo: Todo }> {} -export const createDefaultTodos = TodoRepository.pipe(Effect.flatMap(repo => - Ref.update(repo, todos => - Array.appendAll(todos, [ - new Todo({ - id: Option.some("1"), - title: "A test todo", - content: "Lorem ipsum", - due: Option.none(), - completed: false, - createdAt: new Date(), - updatedAt: new Date(), - }) - ]) - ) -)) +export const createDefaultTodos = Effect.gen(function*() { + const todos = yield* TodoRepository + + yield* todos.add(new Todo({ + id: Option.none(), + title: "A test todo", + content: "Lorem ipsum", + due: Option.none(), + completed: false, + createdAt: new Date(), + updatedAt: new Date(), + })) +}) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 08db479..2e6ff7b 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -1,17 +1,17 @@ import { BunRuntime } from "@effect/platform-bun" -import { Array, Effect, Ref } from "effect" -import { TodoRepository, createDefaultTodos } from "./TodoRepository" +import { Effect } from "effect" +import { TodoRepository, TodoRepositoryLive, createDefaultTodos } from "./TodoRepository" const main = Effect.gen(function*() { yield* createDefaultTodos const todos = yield* TodoRepository - console.log(yield* Ref.get(todos)) + console.log(yield* todos.ref.get) }) const runnableMain = main.pipe( - Effect.provideServiceEffect(TodoRepository, Ref.make(Array.empty())) + Effect.provide(TodoRepositoryLive) ) BunRuntime.runMain(runnableMain)