From 3dbb4655006b7a65624d75620b900f121edf7d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 27 Jun 2024 10:35:52 +0200 Subject: [PATCH] Todos service --- .npmrc | 1 + bun.lockb | Bin 15775 -> 129946 bytes bunfig.toml | 2 ++ package.json | 2 ++ packages/common/package.json | 10 ++++++++- packages/common/src/data/Todo.ts | 16 +++++++++++++ packages/common/src/data/index.ts | 1 + packages/server/package.json | 2 ++ packages/server/src/Todos.ts | 5 +++++ packages/server/src/index.ts | 36 ++++++++++++++++++++++++++++++ 10 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 .npmrc create mode 100644 bunfig.toml create mode 100644 packages/common/src/data/Todo.ts create mode 100644 packages/common/src/data/index.ts create mode 100644 packages/server/src/Todos.ts create mode 100644 packages/server/src/index.ts diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..93f962e --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@thilawyn:registry=https://git.jvalver.de/api/packages/thilawyn/npm/ diff --git a/bun.lockb b/bun.lockb index 87e2e98934d856b1c0f812a0323f0aa85e03cbf5..ac6a6e853d1cfca1cf3598fd332eb605ce91dfc1 100755 GIT binary patch literal 129946 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 I7v+|p0r{eI6951J diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 0000000..bb40fbe --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,2 @@ +[install.scopes] +"@thilawyn" = "https://git.jvalver.de/api/packages/thilawyn/npm/" diff --git a/package.json b/package.json index e995c57..8e9f209 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "private": true, "workspaces": ["packages/*"], "devDependencies": { + "npm-check-updates": "^16.14.20", + "npm-sort": "^0.0.4", "typescript": "^5.5.2" } } diff --git a/packages/common/package.json b/packages/common/package.json index 16fcc2a..2b908bb 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,5 +1,13 @@ { "name": "@todo-tests/common", "type": "module", - "private": true + "exports": { + "./data": "./src/data/index.ts" + }, + "private": true, + "dependencies": { + "@effect/schema": "^0.68.12", + "@thilawyn/thilalib": "^0.1.3", + "effect": "^3.4.5" + } } diff --git a/packages/common/src/data/Todo.ts b/packages/common/src/data/Todo.ts new file mode 100644 index 0000000..d3bb435 --- /dev/null +++ b/packages/common/src/data/Todo.ts @@ -0,0 +1,16 @@ +import { Schema as S } from "@effect/schema" +import { Tag } from "@thilawyn/thilalib/effect/schema" +import { Class } from "@thilawyn/thilalib/effect/schema/class" + + +export class Todo extends Class("Todo")({ + _tag: Tag("Todo"), + + id: S.String, + title: S.String, + content: S.String, + + due: S.optional(S.DateFromSelf, { as: "Option" }), + createdAt: S.DateFromSelf, + updatedAt: S.DateFromSelf, +}) {} diff --git a/packages/common/src/data/index.ts b/packages/common/src/data/index.ts new file mode 100644 index 0000000..d5dbbf5 --- /dev/null +++ b/packages/common/src/data/index.ts @@ -0,0 +1 @@ +export * from "./Todo" diff --git a/packages/server/package.json b/packages/server/package.json index 7076209..7039a46 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -6,6 +6,8 @@ "@effect/platform": "^0.58.12", "@effect/platform-bun": "^0.38.11", "@effect/schema": "^0.68.11", + "@thilawyn/thilalib": "^0.1.3", + "@todo-tests/common": "workspace:*", "effect": "^3.4.4" } } diff --git a/packages/server/src/Todos.ts b/packages/server/src/Todos.ts new file mode 100644 index 0000000..9da8fc5 --- /dev/null +++ b/packages/server/src/Todos.ts @@ -0,0 +1,5 @@ +import type { Todo } from "@todo-tests/common/data" +import { Context, Ref } from "effect" + + +export class Todos extends Context.Tag("Todos")>() {} diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts new file mode 100644 index 0000000..f76c65a --- /dev/null +++ b/packages/server/src/index.ts @@ -0,0 +1,36 @@ +import { BunRuntime } from "@effect/platform-bun" +import { Todo } from "@todo-tests/common/data" +import { Array, Effect, Option, Ref } from "effect" +import { Todos } from "./Todos" + + +const createDefaultTodos = Todos.pipe( + Effect.flatMap(ref => + Ref.update(ref, todos => + Array.appendAll(todos, [ + new Todo({ + id: "1", + title: "A test todo", + content: "Lorem ipsum", + due: Option.none(), + createdAt: new Date(), + updatedAt: new Date(), + }) + ]) + ) + ) +) + + +const main = Effect.gen(function*() { + yield* createDefaultTodos + + const todos = yield* Todos + console.log(yield* Ref.get(todos)) +}) + +const runnableMain = main.pipe( + Effect.provideServiceEffect(Todos, Ref.make(Array.empty())) +) + +BunRuntime.runMain(runnableMain)