TodoRepository work

This commit is contained in:
Julien Valverdé
2024-06-27 21:55:22 +02:00
parent 91f7b90e2c
commit b49b4b19dc
7 changed files with 83 additions and 31 deletions

View File

@@ -2,7 +2,8 @@
"name": "@todo-tests/common",
"type": "module",
"exports": {
"./data": "./src/data/index.ts"
"./data": "./src/data/index.ts",
"./traits": "./src/traits/index.ts"
},
"private": true,
"dependencies": {

View File

@@ -0,0 +1,32 @@
import { Schema as S } from "@effect/schema"
import { Jsonifiable, Kind, Tag } from "@thilawyn/thilalib/effect/schema"
import { Class } from "@thilawyn/thilalib/effect/schema/class"
import type { Identifiable } from "../traits"
export class Todo
extends Class<Todo>("Todo")({
_kind: Kind("Todo"),
_tag: Tag("Todo"),
id: S.String,
title: S.String,
content: S.String,
due: S.OptionFromSelf(S.DateFromSelf),
completed: S.Boolean,
createdAt: S.DateFromSelf,
updatedAt: S.DateFromSelf,
})
implements Identifiable<"Todo", string>
{}
export const JsonifiableTodo = Todo.pipe(Jsonifiable(S.Struct({
...Todo.fields,
due: S.OptionFromNullOr(S.DateFromString),
createdAt: S.DateFromString,
updatedAt: S.DateFromString,
})))

View File

@@ -1,28 +0,0 @@
import { Schema as S } from "@effect/schema"
import { Jsonifiable, Kind, Tag } from "@thilawyn/thilalib/effect/schema"
import { Class } from "@thilawyn/thilalib/effect/schema/class"
export class Todo extends Class<Todo>("Todo")({
_kind: Kind("Todo"),
_tag: Tag("Todo"),
id: S.String,
title: S.String,
content: S.String,
due: S.OptionFromSelf(S.DateFromSelf),
completed: S.Boolean,
createdAt: S.DateFromSelf,
updatedAt: S.DateFromSelf,
}) {}
export const JsonifiableTodo = Todo.pipe(Jsonifiable(S.Struct({
...Todo.fields,
due: S.OptionFromNullOr(S.DateFromString),
createdAt: S.DateFromString,
updatedAt: S.DateFromString,
})))

View File

@@ -1 +1 @@
export * from "./Todo"
export * from "./Todo.class"

View File

@@ -0,0 +1,22 @@
import { Equal } from "effect"
export interface Identifiable<
Kind extends string,
ID,
> {
readonly _kind: Kind
readonly id: ID
}
export module Identifiable {
export function equals<
Kind extends string,
ID,
>(
that: Identifiable<Kind, ID>,
to: Identifiable<Kind, ID>,
): boolean {
return Equal.equals(that.id, to.id)
}
}

View File

@@ -0,0 +1 @@
export * from "./Identifiable.trait"