bbolt

package
v1.3.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 10, 2025 License: Apache-2.0 Imports: 14 Imported by: 0

README

BBolt Project Driver for Apito Engine

This is a BBolt database driver implementation for the Apito Engine project database. It uses the ApitoBolt SDK to provide a MongoDB-like interface on top of BBolt for project-level operations.

Features

The BBolt driver implements the complete ProjectDBInterface and provides:

Project Management
  • Delete projects and all associated data
  • Transfer project ownership between users
Collection Management
  • Check collection existence
  • Add collections to projects
Model Management
  • Add/update models to projects
  • Add fields to models
  • Rename models
  • Drop models from projects
Index Management
  • Create indexes on model fields
  • Drop indexes (lightweight in ApitoBolt)
Document Operations
  • Full CRUD operations on documents
  • Query multiple documents
  • Document revision tracking
  • Count documents
  • Aggregate document data
Relation Management
  • Create relations between documents
  • Delete relations
  • Query relations
  • Check one-to-one relation existence
  • Get relation IDs
Builder Integration
  • Connect/disconnect builders to projects
User Management
  • Project-specific user operations
  • Get logged-in project user
  • Get multiple project users

Architecture

The driver uses ApitoBolt's collection-based API with the following collections:

  • project_docs - Main documents collection
  • project_relations - Relations/edges between documents
  • project_revisions - Document revision history
  • project_models - Model metadata
  • project_builders - Builder connections
  • project_users - Project-specific user data
  • project_metadata - Project metadata

Data Models

ProjectDocument

Represents a document in a project with fields:

  • ID, ProjectID, ModelName
  • Data (map of fields)
  • CreatedAt, UpdatedAt timestamps
ProjectRelation

Represents a relation between documents:

  • ID, ProjectID
  • FromID, ToID
  • RelationName, RelationType
  • Data (additional fields)
ProjectRevision

Document revision history:

  • ID, ProjectID, DocumentID
  • Version number
  • Data snapshot
  • CreatedBy, CreatedAt

Usage

import "github.com/apito-io/engine/database/project/driver/bbolt"

// Create driver instance
driver, err := bbolt.GetBBoltDriver(driverCredentials)
if err != nil {
    // Handle error
}
defer driver.Close()

// Use driver for project operations
doc, err := driver.GetSingleProjectDocument(ctx, param)

Configuration

Set the engine type to "bbolt" or "bolt" in your driver credentials:

driverCred := &models.DriverCredentials{
    Engine:   "bbolt",
    Database: "/path/to/project.db", // Optional, defaults to ~/.apito/db/apito_project.db
}

Benefits vs Badger

  • Simpler API: MongoDB-like collection operations
  • Built-in Indexing: ApitoBolt provides secondary indexes
  • Type Safety: Struct-based data models
  • ACID Transactions: Full transaction support
  • Smaller Footprint: Single file database
  • Better Performance: Optimized for read-heavy workloads

Limitations

  • Single Node: BBolt is designed for single-node deployments
  • Write Serialization: Writes are serialized (but reads are concurrent)
  • No Built-in Replication: Use external tools for replication

Testing

cd open-core/database/project/driver/bbolt
go test -v

Dependencies

  • ApitoBolt v0.1.1+
  • Standard Apito Engine models and interfaces

Documentation

Overview

Package bbolt provides a BBolt database driver implementation for Apito project operations. It uses the ApitoBolt SDK (github.com/apito-io/apitoBolt) to provide a MongoDB-like interface on top of BBolt for project-level operations.

This driver follows the same patterns as the Mongo driver, using collection-per-model strategy for optimal performance and scalability.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BBoltDriver

type BBoltDriver struct {
	Conf             *models.Config
	Store            *apitobolt.Store
	DriverCredential *models.DriverCredentials
	// contains filtered or unexported fields
}

BBoltDriver implements ProjectDBInterface using ApitoBolt in a MongoDB-like fashion

func GetBBoltDriver

func GetBBoltDriver(cfg *models.Config, driverCredentials *models.DriverCredentials) (*BBoltDriver, error)

GetBBoltDriver creates a new BBolt project driver instance

func (*BBoltDriver) AddCollection

func (b *BBoltDriver) AddCollection(ctx context.Context, param *models.CommonSystemParams, isRelationCollection bool) error

AddCollection creates a new collection with indexes

func (*BBoltDriver) AddDocumentToProject

func (b *BBoltDriver) AddDocumentToProject(ctx context.Context, param *models.CommonSystemParams, doc *types.DefaultDocumentStructure) (interface{}, error)

AddDocumentToProject adds a document to a project

func (*BBoltDriver) AddFieldToModel

func (b *BBoltDriver) AddFieldToModel(ctx context.Context, param *models.CommonSystemParams, isUpdate bool, parent_field string) (*models.ModelType, error)

AddFieldToModel adds a new field to an existing model in the project

func (*BBoltDriver) AddModel

func (b *BBoltDriver) AddModel(ctx context.Context, project *models.Project, model *models.ModelType) (*models.ProjectSchema, error)

AddModel adds a new model to the project

func (*BBoltDriver) AddRelationFields

func (b *BBoltDriver) AddRelationFields(ctx context.Context, from *models.ConnectionType, to *models.ConnectionType) error

AddRelationFields creates a relation field (has one or has many) between models (no-op for BBolt)

func (*BBoltDriver) AddTeamMetaInfo

func (b *BBoltDriver) AddTeamMetaInfo(ctx context.Context, users []*models.SystemUser) ([]*models.SystemUser, error)

AddTeamMetaInfo adds metadata information for a team in the project

func (*BBoltDriver) AggregateDocOfProject

func (b *BBoltDriver) AggregateDocOfProject(ctx context.Context, param *models.CommonSystemParams) (interface{}, error)

AggregateDocOfProject aggregates the documents in the project

func (*BBoltDriver) AggregateDocOfProjectBytes

func (b *BBoltDriver) AggregateDocOfProjectBytes(ctx context.Context, param *models.CommonSystemParams) ([]byte, error)

AggregateDocOfProjectBytes aggregates the documents and returns bytes

func (*BBoltDriver) CheckCollectionExists

func (b *BBoltDriver) CheckCollectionExists(ctx context.Context, param *models.CommonSystemParams, isRelationCollection bool) (bool, error)

CheckCollectionExists checks if a collection exists

func (*BBoltDriver) CheckOneToOneRelationExists

func (b *BBoltDriver) CheckOneToOneRelationExists(ctx context.Context, param *models.ConnectDisconnectParam) (bool, error)

CheckOneToOneRelationExists checks if a one-to-one relation exists

func (*BBoltDriver) Close

func (b *BBoltDriver) Close() error

Close closes the BBolt database connection

func (*BBoltDriver) ConnectBuilder

func (b *BBoltDriver) ConnectBuilder(ctx context.Context, param *models.CommonSystemParams) error

ConnectBuilder connects a builder to the project

func (*BBoltDriver) ConvertModel

func (b *BBoltDriver) ConvertModel(ctx context.Context, project *models.Project, modelName string) error

ConvertModel converts a model in the project (no-op for BBolt)

func (*BBoltDriver) CountDocOfProject

func (b *BBoltDriver) CountDocOfProject(ctx context.Context, param *models.CommonSystemParams) (interface{}, error)

CountDocOfProject counts the documents in the project

func (*BBoltDriver) CountDocOfProjectBytes

func (b *BBoltDriver) CountDocOfProjectBytes(ctx context.Context, param *models.CommonSystemParams) ([]byte, error)

CountDocOfProjectBytes counts the documents and returns bytes

func (*BBoltDriver) CountMultiDocumentOfProject

func (b *BBoltDriver) CountMultiDocumentOfProject(ctx context.Context, param *models.CommonSystemParams, previewModel bool) (int, error)

CountMultiDocumentOfProject counts documents in a project

func (*BBoltDriver) CreateIndex

func (b *BBoltDriver) CreateIndex(ctx context.Context, param *models.CommonSystemParams, fieldName string, parent_field string) error

CreateIndex creates an index on a field

func (*BBoltDriver) CreateRelation

func (b *BBoltDriver) CreateRelation(ctx context.Context, projectId string, relation *models.EdgeRelation) error

CreateRelation creates a relation in the project

func (*BBoltDriver) DeleteDocumentFromProject

func (b *BBoltDriver) DeleteDocumentFromProject(ctx context.Context, param *models.CommonSystemParams) error

DeleteDocumentFromProject deletes a document from a project

func (*BBoltDriver) DeleteDocumentRelation

func (b *BBoltDriver) DeleteDocumentRelation(ctx context.Context, param *models.CommonSystemParams) error

DeleteDocumentRelation deletes all relations or data in pivot tables from the project

func (*BBoltDriver) DeleteDocumentsFromProject

func (b *BBoltDriver) DeleteDocumentsFromProject(ctx context.Context, param *models.CommonSystemParams) error

DeleteDocumentsFromProject deletes multiple documents from the project

func (*BBoltDriver) DeleteProject

func (b *BBoltDriver) DeleteProject(ctx context.Context, projectId string) error

DeleteProject implements the deletion of a project

func (*BBoltDriver) DeleteRelation

func (b *BBoltDriver) DeleteRelation(ctx context.Context, param *models.ConnectDisconnectParam, id string) error

DeleteRelation deletes a relation in the project

func (*BBoltDriver) DeleteRelationDocuments

func (b *BBoltDriver) DeleteRelationDocuments(ctx context.Context, projectId string, from *models.ConnectionType, to *models.ConnectionType) error

DeleteRelationDocuments drops pivot tables, relation keys, or collection tables

func (*BBoltDriver) DisconnectBuilder

func (b *BBoltDriver) DisconnectBuilder(ctx context.Context, param *models.CommonSystemParams) error

DisconnectBuilder disconnects a builder from the project

func (*BBoltDriver) DropField

func (b *BBoltDriver) DropField(ctx context.Context, param *models.CommonSystemParams) error

DropField drops/deletes a field and its data from the project

func (*BBoltDriver) DropIndex

func (b *BBoltDriver) DropIndex(ctx context.Context, param *models.CommonSystemParams, indexName string) error

DropIndex drops an index from a model (no-op for ApitoBolt)

func (*BBoltDriver) DropModel

func (b *BBoltDriver) DropModel(ctx context.Context, project *models.Project, modelName string) error

DropModel drops a model from the project

func (*BBoltDriver) GetAllRelationDocumentsOfSingleDocument

func (b *BBoltDriver) GetAllRelationDocumentsOfSingleDocument(ctx context.Context, from string, arg *models.CommonSystemParams) (interface{}, error)

GetAllRelationDocumentsOfSingleDocument retrieves all relation data of a single document by ID

func (*BBoltDriver) GetLoggedInProjectUser

func (b *BBoltDriver) GetLoggedInProjectUser(ctx context.Context, param *models.CommonSystemParams) (*types.DefaultDocumentStructure, error)

GetLoggedInProjectUser retrieves the logged-in user profile for the project

func (*BBoltDriver) GetProject

func (b *BBoltDriver) GetProject(ctx context.Context, id string) (*models.Project, error)

GetProject retrieves a project by ID (not part of ProjectDBInterface, but useful)

func (*BBoltDriver) GetProjectUser

func (b *BBoltDriver) GetProjectUser(ctx context.Context, phone, email, projectId string) (*types.DefaultDocumentStructure, error)

GetProjectUser retrieves a user profile by phone, email, and project ID

func (*BBoltDriver) GetProjectUsers

func (b *BBoltDriver) GetProjectUsers(ctx context.Context, projectId string, keys []string) (map[string]*types.DefaultDocumentStructure, error)

GetProjectUsers retrieves metadata for multiple users in the project

func (*BBoltDriver) GetRelationDocument

func (b *BBoltDriver) GetRelationDocument(ctx context.Context, param *models.ConnectDisconnectParam) (*models.EdgeRelation, error)

GetRelationDocument retrieves a relation document by ID

func (*BBoltDriver) GetRelationIds

func (b *BBoltDriver) GetRelationIds(ctx context.Context, param *models.ConnectDisconnectParam) ([]string, error)

GetRelationIds retrieves the IDs of every document related to a document

func (*BBoltDriver) GetSingleProjectDocument

func (b *BBoltDriver) GetSingleProjectDocument(ctx context.Context, param *models.CommonSystemParams) (*types.DefaultDocumentStructure, error)

GetSingleProjectDocument gets a single document from a project

func (*BBoltDriver) GetSingleProjectDocumentBytes

func (b *BBoltDriver) GetSingleProjectDocumentBytes(ctx context.Context, param *models.CommonSystemParams) ([]byte, error)

GetSingleProjectDocumentBytes retrieves a single project document by ID as bytes

func (*BBoltDriver) GetSingleProjectDocumentRevisions

func (b *BBoltDriver) GetSingleProjectDocumentRevisions(ctx context.Context, param *models.CommonSystemParams) ([]*models.DocumentRevisionHistory, error)

GetSingleProjectDocumentRevisions retrieves the revision history of a single project document by ID

func (*BBoltDriver) GetSingleRawDocumentFromProject

func (b *BBoltDriver) GetSingleRawDocumentFromProject(ctx context.Context, param *models.CommonSystemParams) (interface{}, error)

GetSingleRawDocumentFromProject retrieves a single raw document from the project

func (*BBoltDriver) GetWebHook

func (b *BBoltDriver) GetWebHook(ctx context.Context, projectId, hookId string) (*models.Webhook, error)

GetWebHook retrieves a webhook by project ID and hook ID

func (*BBoltDriver) NewInsertableRelations

func (b *BBoltDriver) NewInsertableRelations(ctx context.Context, param *models.ConnectDisconnectParam) ([]string, error)

NewInsertableRelations retrieves new insertable relations in the project

func (*BBoltDriver) Ping

func (b *BBoltDriver) Ping() error

Ping verifies the database connection is alive

func (*BBoltDriver) QueryMultiDocumentOfProject

func (b *BBoltDriver) QueryMultiDocumentOfProject(ctx context.Context, param *models.CommonSystemParams) ([]*types.DefaultDocumentStructure, error)

QueryMultiDocumentOfProject retrieves multiple documents from a project

func (*BBoltDriver) QueryMultiDocumentOfProjectBytes

func (b *BBoltDriver) QueryMultiDocumentOfProjectBytes(ctx context.Context, param *models.CommonSystemParams) ([]byte, error)

QueryMultiDocumentOfProjectBytes queries multiple documents and returns bytes

func (*BBoltDriver) RelationshipDataLoader

func (b *BBoltDriver) RelationshipDataLoader(ctx context.Context, param *models.CommonSystemParams, connection map[string]interface{}) (interface{}, error)

RelationshipDataLoader loads relationship data for the project

func (*BBoltDriver) RelationshipDataLoaderBytes

func (b *BBoltDriver) RelationshipDataLoaderBytes(ctx context.Context, param *models.CommonSystemParams, connection map[string]interface{}) ([]byte, error)

RelationshipDataLoaderBytes loads relationship data for the project and returns it as bytes

func (*BBoltDriver) RenameField

func (b *BBoltDriver) RenameField(ctx context.Context, oldFieldName string, repeatedFieldGroup string, param *models.CommonSystemParams) error

RenameField renames a field in a model along with its data key

func (*BBoltDriver) RenameModel

func (b *BBoltDriver) RenameModel(ctx context.Context, project *models.Project, modelName, newName string) error

RenameModel renames a model in the project

func (*BBoltDriver) SearchFunctions

SearchFunctions lists all the cloud functions for a given project

func (*BBoltDriver) SearchWebHooks

SearchWebHooks lists all the webhooks for a given project

func (*BBoltDriver) TransferProject

func (b *BBoltDriver) TransferProject(ctx context.Context, userId, from, to string) error

TransferProject transfers a project from one user to another

func (*BBoltDriver) UpdateDocumentOfProject

func (b *BBoltDriver) UpdateDocumentOfProject(ctx context.Context, param *models.CommonSystemParams, doc *types.DefaultDocumentStructure, replace bool) error

UpdateDocumentOfProject updates a document in a project

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL