My App
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

  • upsertElements should create new elements or update existing ones (upsert semantics).
  • getElements should return elements sorted by zIndex ascending.
  • getPages should return pages sorted by order ascending.
  • resolveShareLink should return null for expired links.
  • deleteBoard should cascade-delete all related pages, elements, members, and share links.

Available Implementations

ImplementationPackageDescription
PrismaBoardAdapter@hfu.digital/boardkit-nestjsProduction adapter using Prisma
InMemoryBoardStorage@hfu.digital/boardkit-nestjsIn-memory adapter for testing

See Prisma Adapter and Testing for details.

On this page