watchTodoChanges work

This commit is contained in:
Julien Valverdé
2024-06-30 18:25:43 +02:00
parent 3e8fcde08e
commit af92b5717c

View File

@@ -1,6 +1,7 @@
import { BunRuntime } from "@effect/platform-bun" import { BunRuntime } from "@effect/platform-bun"
import { Todo } from "@todo-tests/common/data" import { Todo } from "@todo-tests/common/data"
import { Array, Effect, Fiber, Option, Stream } from "effect" import { Identifiable } from "@todo-tests/common/traits"
import { Array, Duration, Effect, Fiber, Option, Stream } from "effect"
import { TodoRepository, TodoRepositoryLive, createDefaultTodos } from "./TodoRepository" import { TodoRepository, TodoRepositoryLive, createDefaultTodos } from "./TodoRepository"
@@ -12,8 +13,8 @@ const watchTodoChanges = Effect.gen(function*() {
Array.empty<Todo & { id: Option.Some<string> }>(), Array.empty<Todo & { id: Option.Some<string> }>(),
(prev, curr) => { (prev, curr) => {
console.log(`Added todos: ${ Array.difference(curr, prev) }`) console.log(`Added todos: ${ Array.differenceWith<Todo>(Identifiable.equals)(curr, prev) }`)
console.log(`Removed todos: ${ Array.difference(prev, curr) }`) console.log(`Removed todos: ${ Array.differenceWith<Todo>(Identifiable.equals)(prev, curr) }`)
return curr return curr
}, },
@@ -27,18 +28,27 @@ const main = Effect.gen(function*() {
yield* createDefaultTodos yield* createDefaultTodos
const todos = yield* TodoRepository const todos = yield* TodoRepository
// console.log(yield* todos.todos.get)
const secondTodo = yield* yield* todos.todos.get.pipe( // const secondTodo = yield* yield* todos.todos.get.pipe(
Effect.map(Array.get(1)) // Effect.map(Array.get(1))
// )
// const secondTodoModified = new Todo({
// ...secondTodo,
// completed: true,
// })
// yield* todos.update(secondTodoModified)
yield* todos.add(new Todo({
id: Option.none(),
title: "Put the dishes in the dishwasher",
content: "Lorem ipsum",
due: Option.none(),
completed: false,
createdAt: new Date(),
updatedAt: new Date(),
})).pipe(
Effect.delay(Duration.seconds(1))
) )
const secondTodoModified = new Todo({
...secondTodo,
completed: true,
})
yield* todos.update(secondTodoModified)
// console.log(yield* todos.todos.get)
yield* Fiber.join(watcher) yield* Fiber.join(watcher)
}) })