Skip to content

ChainGraph API Documentation / @badaitech/chaingraph-trpc / server / TreeStoreBase

Abstract Class: TreeStoreBase<TRow, TNode, TCreate, TUpdate>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:38

Abstract base class for all tree-based storage implementations Provides shared implementation of tree operations using PostgreSQL

Entity-specific stores extend this class and provide:

  • Table definition
  • Row to domain model mapping
  • Entity-specific custom methods

Extended by

Type Parameters

TRow

TRow

TNode

TNode extends ITreeNode

TCreate

TCreate extends ICreateTreeNodeInput

TUpdate

TUpdate extends IUpdateTreeNodeInput

Implements

Constructors

Constructor

new TreeStoreBase<TRow, TNode, TCreate, TUpdate>(db): TreeStoreBase<TRow, TNode, TCreate, TUpdate>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:59

Parameters

db

NodePgDatabase<Record<string, unknown>> & object

Returns

TreeStoreBase<TRow, TNode, TCreate, TUpdate>

Properties

db

protected readonly db: NodePgDatabase<Record<string, unknown>> & object

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:59

Type Declaration

$client

$client: Pool


table

abstract protected readonly table: PgTable

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:47

The Drizzle table definition (must be provided by subclass)

Methods

create()

abstract create(input): Promise<TNode>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:63

Create a new node in the tree

Parameters

input

TCreate

Returns

Promise<TNode>

Implementation of

ITreeStore.create


delete()

delete(id): Promise<boolean>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:81

Delete a node from the tree Implementation should handle cascade strategy

Parameters

id

string

Returns

Promise<boolean>

Implementation of

ITreeStore.delete


get()

get(id): Promise<TNode | null>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:65

Get a single node by ID

Parameters

id

string

Returns

Promise<TNode | null>

Implementation of

ITreeStore.get


getAncestors()

getAncestors(nodeId): Promise<TNode[]>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:185

Get all ancestor nodes of a node (path to root)

Parameters

nodeId

string

Starting node ID

Returns

Promise<TNode[]>

Implementation of

ITreeStore.getAncestors


getDescendants()

getDescendants(rootId, ownerId): Promise<TNode[]>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:163

Get all descendant nodes of a root node (recursive)

Parameters

rootId

string

Root node ID

ownerId

string

Owner to verify access

Returns

Promise<TNode[]>

Implementation of

ITreeStore.getDescendants


getMaxOrder()

getMaxOrder(parentId, ownerId): Promise<number>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:204

Get maximum order value in a parent for appending

Parameters

parentId

Parent node ID (null = root level)

string | null

ownerId

string

Owner ID to filter by

Returns

Promise<number>

Implementation of

ITreeStore.getMaxOrder


getOrderByClause()

protected getOrderByClause(orderBy): SQL<unknown>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:294

Helper to build order by clause

Parameters

orderBy

ListOrderBy

Returns

SQL<unknown>


hasAccess()

hasAccess(nodeId, userId): Promise<boolean>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:223

Check if user has access to a node

Parameters

nodeId

string

Node ID to check

userId

string

User ID to verify

Returns

Promise<boolean>

Implementation of

ITreeStore.hasAccess


list()

list(ownerId, rootId?, limit?): Promise<TNode[]>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:89

List all nodes for a user

Parameters

ownerId

string

User ID to filter by

rootId?

Optional root node to filter descendants

string | null

limit?

number = 1000

Maximum number of results

Returns

Promise<TNode[]>

Implementation of

ITreeStore.list


listChildren()

listChildren(parentId): Promise<TNode[]>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:112

List direct children of a parent node

Parameters

parentId

Parent node ID (null = root level)

string | null

Returns

Promise<TNode[]>

Implementation of

ITreeStore.listChildren


mapRowToNode()

abstract protected mapRowToNode(row): TNode

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:52

Map database row to domain model (must be implemented by subclass)

Parameters

row

TRow

Returns

TNode


move()

move(input): Promise<TNode>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:128

Move a node to a new parent and/or order Must prevent circular references

Parameters

input

IMoveTreeNodeInput

Returns

Promise<TNode>

Implementation of

ITreeStore.move


prepareCreateInput()

abstract protected prepareCreateInput(input): Record<string, any>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:57

Prepare create input for database insertion (can be overridden)

Parameters

input

TCreate

Returns

Record<string, any>


update()

abstract update(input): Promise<TNode>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:79

Update node metadata (name, description, color, etc.) Does NOT move the node in the tree

Parameters

input

TUpdate

Returns

Promise<TNode>

Implementation of

ITreeStore.update


wouldCreateCircularRef()

wouldCreateCircularRef(sourceId, targetParentId): Promise<boolean>

Defined in: packages/chaingraph-trpc/server/stores/hierarchy/TreeStoreBase.ts:232

Check if moving a node would create a circular reference

Parameters

sourceId

string

Node being moved

targetParentId

string

Proposed new parent

Returns

Promise<boolean>

Implementation of

ITreeStore.wouldCreateCircularRef

Licensed under BUSL-1.1