Skip to content

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

Class: DBFolderStore

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:27

Database implementation of folder storage Extends TreeStoreBase to inherit generic tree operations

Extends

Implements

Constructors

Constructor

new DBFolderStore(db): DBFolderStore

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:32

Parameters

db

NodePgDatabase<Record<string, unknown>> & object

Returns

DBFolderStore

Overrides

TreeStoreBase.constructor

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

Inherited from

TreeStoreBase.db


table

protected readonly table: PgTableWithColumns<{ columns: { color: PgColumn<{ baseColumn: never; columnType: "PgText"; data: string; dataType: "string"; driverParam: string; enumValues: [string, ...string[]]; generated: undefined; hasDefault: false; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: false; name: "color"; notNull: false; tableName: "flow_folders"; }, { }, { }>; createdAt: PgColumn<{ baseColumn: never; columnType: "PgTimestamp"; data: Date; dataType: "date"; driverParam: string; enumValues: undefined; generated: undefined; hasDefault: true; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: false; name: "created_at"; notNull: true; tableName: "flow_folders"; }, { }, { }>; description: PgColumn<{ baseColumn: never; columnType: "PgText"; data: string; dataType: "string"; driverParam: string; enumValues: [string, ...string[]]; generated: undefined; hasDefault: false; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: false; name: "description"; notNull: false; tableName: "flow_folders"; }, { }, { }>; id: PgColumn<{ baseColumn: never; columnType: "PgText"; data: string; dataType: "string"; driverParam: string; enumValues: [string, ...string[]]; generated: undefined; hasDefault: false; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: true; name: "id"; notNull: true; tableName: "flow_folders"; }, { }, { }>; name: PgColumn<{ baseColumn: never; columnType: "PgText"; data: string; dataType: "string"; driverParam: string; enumValues: [string, ...string[]]; generated: undefined; hasDefault: false; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: false; name: "name"; notNull: true; tableName: "flow_folders"; }, { }, { }>; order: PgColumn<{ baseColumn: never; columnType: "PgInteger"; data: number; dataType: "number"; driverParam: string | number; enumValues: undefined; generated: undefined; hasDefault: true; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: false; name: "order"; notNull: true; tableName: "flow_folders"; }, { }, { }>; ownerId: PgColumn<{ baseColumn: never; columnType: "PgText"; data: string; dataType: "string"; driverParam: string; enumValues: [string, ...string[]]; generated: undefined; hasDefault: false; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: false; name: "owner_id"; notNull: true; tableName: "flow_folders"; }, { }, { }>; parentFolderId: PgColumn<{ baseColumn: never; columnType: "PgText"; data: string; dataType: "string"; driverParam: string; enumValues: [string, ...string[]]; generated: undefined; hasDefault: false; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: false; name: "parent_folder_id"; notNull: false; tableName: "flow_folders"; }, { }, { }>; updatedAt: PgColumn<{ baseColumn: never; columnType: "PgTimestamp"; data: Date; dataType: "date"; driverParam: string; enumValues: undefined; generated: undefined; hasDefault: true; hasRuntimeDefault: false; identity: undefined; isAutoincrement: false; isPrimaryKey: false; name: "updated_at"; notNull: true; tableName: "flow_folders"; }, { }, { }>; }; dialect: "pg"; name: "flow_folders"; schema: undefined; }> = flowFoldersTable

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:30

The Drizzle table definition (must be provided by subclass)

Overrides

TreeStoreBase.table

Methods

create()

create(input): Promise<FlowFolder>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:66

Create a new node in the tree

Parameters

input

CreateFolderInput

Returns

Promise<FlowFolder>

Overrides

TreeStoreBase.create


createFolder()

createFolder(input): Promise<FlowFolder>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:105

Creates a new folder

Parameters

input

CreateFolderInput

Returns

Promise<FlowFolder>

Implementation of

IFolderStore.createFolder


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>

Inherited from

TreeStoreBase.delete


deleteFolder()

deleteFolder(folderId): Promise<boolean>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:246

Deletes a folder (must be empty unless using cascade)

Parameters

folderId

string

Returns

Promise<boolean>

Implementation of

IFolderStore.deleteFolder


get()

get(id): Promise<FlowFolder | null>

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

Get a single node by ID

Parameters

id

string

Returns

Promise<FlowFolder | null>

Inherited from

TreeStoreBase.get


getAncestors()

getAncestors(nodeId): Promise<FlowFolder[]>

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<FlowFolder[]>

Inherited from

TreeStoreBase.getAncestors


getDescendants()

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

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<FlowFolder[]>

Inherited from

TreeStoreBase.getDescendants


getFolder()

getFolder(folderId): Promise<FlowFolder | null>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:109

Retrieves a folder by ID

Parameters

folderId

string

Returns

Promise<FlowFolder | null>

Implementation of

IFolderStore.getFolder


getMaxFlowOrderInFolder()

getMaxFlowOrderInFolder(folderId, ownerId): Promise<number>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:279

Gets the maximum order value for flows in a folder Used for appending new flows

Parameters

folderId

string | null

ownerId

string

Returns

Promise<number>

Implementation of

IFolderStore.getMaxFlowOrderInFolder


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>

Inherited from

TreeStoreBase.getMaxOrder


getMaxOrderInParent()

getMaxOrderInParent(parentFolderId, ownerId): Promise<number>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:250

Gets the maximum order value in a parent folder (for folders) Used for appending new folders

Parameters

parentFolderId

string | null

ownerId

string

Returns

Promise<number>

Implementation of

IFolderStore.getMaxOrderInParent


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>

Inherited from

TreeStoreBase.getOrderByClause


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

IFolderStore.hasAccess

Inherited from

TreeStoreBase.hasAccess


list()

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

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<FlowFolder[]>

Inherited from

TreeStoreBase.list


listChildFolders()

listChildFolders(parentFolderId): Promise<FlowFolder[]>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:185

Lists child folders of a parent

Parameters

parentFolderId

string | null

Returns

Promise<FlowFolder[]>

Implementation of

IFolderStore.listChildFolders


listChildren()

listChildren(parentId): Promise<FlowFolder[]>

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<FlowFolder[]>

Inherited from

TreeStoreBase.listChildren


listFlowsInFolder()

listFlowsInFolder(folderId): Promise<FlowMetadata[]>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:298

Lists flows in a specific folder (direct children only)

Parameters

folderId

string | null

Returns

Promise<FlowMetadata[]>

Implementation of

IFolderStore.listFlowsInFolder


listFlowsInFolderSubtree()

listFlowsInFolderSubtree(folderId, ownerId): Promise<FlowMetadata[]>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:324

Lists flows in a folder and all its descendants This enables namespace/workspace isolation

Parameters

folderId

string | null

ownerId

string

Returns

Promise<FlowMetadata[]>

Implementation of

IFolderStore.listFlowsInFolderSubtree


listFolders()

listFolders(ownerId, orderBy, limit, rootFolderId?): Promise<FlowFolder[]>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:113

Lists all folders for a user

Parameters

ownerId

string

orderBy

string = 'createdAtDesc'

limit

number = 1000

rootFolderId?

Optional root folder to filter descendants only

string | null

Returns

Promise<FlowFolder[]>

Implementation of

IFolderStore.listFolders


mapRowToNode()

protected mapRowToNode(row): FlowFolder

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:38

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

Parameters

row
color

string | null

createdAt

Date

description

string | null

id

string

name

string

order

number

ownerId

string

parentFolderId

string | null

updatedAt

Date

Returns

FlowFolder

Overrides

TreeStoreBase.mapRowToNode


move()

move(input): Promise<FlowFolder>

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<FlowFolder>

Inherited from

TreeStoreBase.move


moveFolder()

moveFolder(input): Promise<FlowFolder>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:204

Moves a folder to a new parent and order

Parameters

input

MoveFolderInput

Returns

Promise<FlowFolder>

Implementation of

IFolderStore.moveFolder


prepareCreateInput()

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

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:52

Prepare create input for database insertion (can be overridden)

Parameters

input

CreateFolderInput

Returns

Record<string, any>

Overrides

TreeStoreBase.prepareCreateInput


update()

update(input): Promise<FlowFolder>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:76

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

Parameters

input

UpdateFolderInput

Returns

Promise<FlowFolder>

Overrides

TreeStoreBase.update


updateFolder()

updateFolder(input): Promise<FlowFolder>

Defined in: packages/chaingraph-trpc/server/stores/folderStore/dbFolderStore.ts:200

Updates a folder's metadata (name, description, color)

Parameters

input

UpdateFolderInput

Returns

Promise<FlowFolder>

Implementation of

IFolderStore.updateFolder


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>

Inherited from

TreeStoreBase.wouldCreateCircularRef

Licensed under BUSL-1.1