diff --git a/packages/database/src/lib/crossAppConverters.ts b/packages/database/src/lib/crossAppConverters.ts index b6fa56494..d5c9dfc9f 100644 --- a/packages/database/src/lib/crossAppConverters.ts +++ b/packages/database/src/lib/crossAppConverters.ts @@ -6,7 +6,7 @@ import { CrossAppBase, CrossAppNode, } from "../crossAppContracts"; -import { LocalContentDataInput } from "../inputTypes"; +import { LocalContentDataInput, LocalConceptDataInput } from "../inputTypes"; import { Enums, CompositeTypes } from "../dbTypes"; type InlineEmbeddingInput = CompositeTypes<"inline_embedding_input">; @@ -55,6 +55,9 @@ const filterUndefined = >(data: T): T => { ) as T; }; +const filterUndefinedArray = (data: (T | undefined)[]): T[] => + data.filter((v) => v !== undefined); + const inlineCrossAppContentToDbContent = ( content: InlineCrossAppContent | undefined, variant: Enums<"ContentVariant">, @@ -89,3 +92,20 @@ export const crossAppNodeToDbContent = ( variant, ); }; + +export const crossAppNodeToDbConcept = ( + node: CrossAppNode, +): LocalConceptDataInput => { + return filterUndefined({ + ...decodeLocalRef(node, "source_local_id"), + name: node.content.direct.value, + ...decodeRef(node.author, "author_id", "author_local_id"), + ...decodeRef(node.nodeType, "schema_id", "schema_represented_by_local_id"), + contents_inline: filterUndefinedArray([ + crossAppNodeToDbContent(node, "direct"), + crossAppNodeToDbContent(node, "full"), + ]), + created: node.createdAt?.toISOString(), + last_modified: node.modifiedAt?.toISOString(), + }); +};