BoardKitBackend
BoardStorage Interface
Abstract storage interface for boards, pages, elements, members, and shares
BoardStorage is the main abstract class that consumers implement to connect BoardKit to their database. It covers boards, pages, elements, members, and share links.
abstract class BoardStorage {
// Board CRUD
abstract createBoard(data: CreateBoardInput): Promise<Board>;
abstract getBoard(id: string): Promise<Board | null>;
abstract listBoards(filters: BoardFilters): Promise<Board[]>;
abstract updateBoard(id: string, data: Partial<Board>): Promise<Board>;
abstract deleteBoard(id: string): Promise<void>;
// Page operations
abstract createPage(boardId: string, data: CreatePageInput): Promise<Page>;
abstract getPages(boardId: string): Promise<Page[]>;
abstract getPage(id: string): Promise<Page | null>;
abstract reorderPages(boardId: string, pageIds: string[]): Promise<void>;
abstract deletePage(id: string): Promise<void>;
// Element operations (batch-friendly for sync)
abstract upsertElements(pageId: string, elements: ElementUpsert[]): Promise<void>;
abstract getElements(pageId: string): Promise<Element[]>;
abstract deleteElements(ids: string[]): Promise<void>;
// Permissions
abstract setMember(boardId: string, userId: string, role: string): Promise<void>;
abstract getMembers(boardId: string): Promise<BoardMember[]>;
abstract getMemberRole(boardId: string, userId: string): Promise<string | null>;
abstract removeMember(boardId: string, userId: string): Promise<void>;
// Share links
abstract createShareLink(data: {
boardId: string;
permission: 'view' | 'edit';
expiresAt?: string;
}): Promise<ShareLink>;
abstract resolveShareLink(token: string): Promise<ShareLink | null>;
abstract deleteShareLink(id: string): Promise<void>;
}Input Types
CreateBoardInput
interface CreateBoardInput {
name: string;
ownerId: string;
sessionType?: 'ephemeral' | 'persistent';
}CreatePageInput
interface CreatePageInput {
name?: string;
order: number;
}BoardFilters
interface BoardFilters {
ownerId?: string;
isArchived?: boolean;
sessionType?: 'ephemeral' | 'persistent';
}ElementUpsert
Used for batch persisting elements from the collaboration service.
interface ElementUpsert {
id: string;
pageId: string;
type: string;
data: Record<string, unknown>;
zIndex: number;
createdBy: string;
}Implementation Notes
upsertElementsshould create new elements or update existing ones (upsert semantics).getElementsshould return elements sorted byzIndexascending.getPagesshould return pages sorted byorderascending.resolveShareLinkshould returnnullfor expired links.deleteBoardshould cascade-delete all related pages, elements, members, and share links.
Available Implementations
| Implementation | Package | Description |
|---|---|---|
PrismaBoardAdapter | @hfu.digital/boardkit-nestjs | Production adapter using Prisma |
InMemoryBoardStorage | @hfu.digital/boardkit-nestjs | In-memory adapter for testing |
See Prisma Adapter and Testing for details.