diff --git a/packages/common/src/data/Todo.class.ts b/packages/common/src/data/Todo.class.ts index a12d40e..d41a559 100644 --- a/packages/common/src/data/Todo.class.ts +++ b/packages/common/src/data/Todo.class.ts @@ -9,7 +9,7 @@ export class Todo _kind: Kind("Todo"), _tag: Tag("Todo"), - id: S.String, + id: S.OptionFromSelf(S.String), title: S.String, content: S.String, @@ -26,6 +26,7 @@ export class Todo export const JsonifiableTodo = Todo.pipe(Jsonifiable(S.Struct({ ...Todo.fields, + id: S.OptionFromNullOr(S.String), due: S.OptionFromNullOr(S.DateFromString), createdAt: S.DateFromString, updatedAt: S.DateFromString, diff --git a/packages/common/src/traits/Identifiable.trait.ts b/packages/common/src/traits/Identifiable.trait.ts index 9a5972a..34fc704 100644 --- a/packages/common/src/traits/Identifiable.trait.ts +++ b/packages/common/src/traits/Identifiable.trait.ts @@ -1,4 +1,4 @@ -import { Equal } from "effect" +import { Equal, Option } from "effect" export interface Identifiable< @@ -6,7 +6,7 @@ export interface Identifiable< ID, > { readonly _kind: Kind - readonly id: ID + readonly id: Option.Option } export module Identifiable { @@ -17,6 +17,9 @@ export module Identifiable { that: Identifiable, to: Identifiable, ): boolean { - return Equal.equals(that.id, to.id) + // Two elements can only be equal if they both have a defined ID + return Option.isSome(that.id) && Option.isSome(to.id) + ? Equal.equals(that.id, to.id) + : false } }