blocks

package
v0.23.1 Latest Latest
Warning

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

Go to latest
Published: Jan 30, 2026 License: MIT Imports: 30 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrEmbeddedBlockTypeRequired      = errors.New("blocks: embedded block type required")
	ErrEmbeddedBlockDefinitionMissing = errors.New("blocks: embedded block definition missing")
	ErrEmbeddedBlocksBridgeUnwired    = errors.New("blocks: embedded blocks bridge is not configured")
)
View Source
var (
	ErrDefinitionNameRequired          = errors.New("blocks: definition name required")
	ErrDefinitionSlugRequired          = errors.New("blocks: definition slug required")
	ErrDefinitionSlugInvalid           = errors.New("blocks: definition slug invalid")
	ErrDefinitionSlugExists            = errors.New("blocks: definition slug already exists")
	ErrDefinitionSchemaRequired        = errors.New("blocks: definition schema required")
	ErrDefinitionSchemaInvalid         = errors.New("blocks: definition schema invalid")
	ErrDefinitionSchemaVersionInvalid  = errors.New("blocks: definition schema version invalid")
	ErrDefinitionExists                = errors.New("blocks: definition already exists")
	ErrDefinitionIDRequired            = errors.New("blocks: definition id required")
	ErrDefinitionInUse                 = errors.New("blocks: definition has active instances")
	ErrDefinitionSoftDeleteUnsupported = errors.New("blocks: soft delete not supported for definitions")
	ErrDefinitionVersionRequired       = errors.New("blocks: definition version required")
	ErrDefinitionVersionExists         = errors.New("blocks: definition version already exists")
	ErrDefinitionVersioningDisabled    = errors.New("blocks: definition versioning disabled")

	ErrInstanceDefinitionRequired    = errors.New("blocks: definition id required")
	ErrInstanceRegionRequired        = errors.New("blocks: region required")
	ErrInstancePositionInvalid       = errors.New("blocks: position cannot be negative")
	ErrInstanceUpdaterRequired       = errors.New("blocks: updated_by is required")
	ErrInstanceSoftDeleteUnsupported = errors.New("blocks: soft delete not supported for instances")

	ErrTranslationContentRequired       = errors.New("blocks: translation content required")
	ErrTranslationExists                = errors.New("blocks: translation already exists for locale")
	ErrTranslationLocaleRequired        = errors.New("blocks: translation locale required")
	ErrTranslationSchemaInvalid         = errors.New("blocks: translation content invalid")
	ErrTranslationNotFound              = errors.New("blocks: translation not found")
	ErrTranslationMinimum               = errors.New("blocks: at least one translation is required")
	ErrTranslationsDisabled             = errors.New("blocks: translations feature disabled")
	ErrInstanceIDRequired               = errors.New("blocks: instance id required")
	ErrVersioningDisabled               = errors.New("blocks: versioning feature disabled")
	ErrInstanceVersionRequired          = errors.New("blocks: version identifier required")
	ErrInstanceVersionConflict          = errors.New("blocks: base version mismatch")
	ErrInstanceVersionAlreadyPublished  = errors.New("blocks: version already published")
	ErrInstanceVersionRetentionExceeded = errors.New("blocks: version retention limit reached")
	ErrMediaReferenceRequired           = errors.New("blocks: media reference requires id or path")
	ErrBlockSchemaMigrationRequired     = errors.New("blocks: schema migration required")
	ErrBlockSchemaValidationFailed      = errors.New("blocks: schema validation failed")
)
View Source
var BlockVersionSnapshotSchema = cmsblocks.BlockVersionSnapshotSchema

Functions

func NewDefinitionRepository

func NewDefinitionRepository(db *bun.DB) repository.Repository[*Definition]

func NewDefinitionVersionRepository added in v0.21.0

func NewDefinitionVersionRepository(db *bun.DB) repository.Repository[*DefinitionVersion]

NewDefinitionVersionRepository creates a repository for DefinitionVersion entities.

func NewInstanceRepository

func NewInstanceRepository(db *bun.DB) repository.Repository[*Instance]

NewInstanceRepository creates a repository for Instance entities.

func NewInstanceVersionRepository

func NewInstanceVersionRepository(db *bun.DB) repository.Repository[*InstanceVersion]

NewInstanceVersionRepository creates a repository for InstanceVersion entities.

func NewTranslationRepository

func NewTranslationRepository(db *bun.DB) repository.Repository[*Translation]

NewTranslationRepository creates a repository for Translation entities.

func ResolveDefinitionMigrationStatus added in v0.23.1

func ResolveDefinitionMigrationStatus(schema map[string]any, schemaVersion string) string

ResolveDefinitionMigrationStatus determines the current migration status for a schema.

Types

type AddTranslationInput

type AddTranslationInput struct {
	BlockInstanceID    uuid.UUID
	LocaleID           uuid.UUID
	Content            map[string]any
	AttributeOverrides map[string]any
	MediaBindings      media.BindingSet
}

type BackfillOptions added in v0.21.0

type BackfillOptions struct {
	ContentIDs []uuid.UUID
	Force      bool
	DryRun     bool
}

BackfillOptions controls embedded block backfill behaviour.

type BackfillReport added in v0.21.0

type BackfillReport struct {
	ContentCount int
	Errors       []error
}

BackfillReport captures backfill results.

type BlockVersionSnapshot

type BlockVersionSnapshot = cmsblocks.BlockVersionSnapshot

type BlockVersionTranslationSnapshot

type BlockVersionTranslationSnapshot = cmsblocks.BlockVersionTranslationSnapshot

type BunDefinitionRepository

type BunDefinitionRepository struct {
	// contains filtered or unexported fields
}

BunDefinitionRepository implements DefinitionRepository with optional caching.

func NewBunDefinitionRepository

func NewBunDefinitionRepository(db *bun.DB) *BunDefinitionRepository

NewBunDefinitionRepository creates a definition repository without caching.

func NewBunDefinitionRepositoryWithCache

func NewBunDefinitionRepositoryWithCache(db *bun.DB, cacheService cache.CacheService, serializer cache.KeySerializer) *BunDefinitionRepository

NewBunDefinitionRepositoryWithCache creates a definition repository with caching services.

func (*BunDefinitionRepository) Create

func (r *BunDefinitionRepository) Create(ctx context.Context, definition *Definition) (*Definition, error)

func (*BunDefinitionRepository) Delete added in v0.2.0

func (*BunDefinitionRepository) GetByID

func (*BunDefinitionRepository) GetBySlug added in v0.23.1

func (r *BunDefinitionRepository) GetBySlug(ctx context.Context, slug string, env ...string) (*Definition, error)

func (*BunDefinitionRepository) List

func (r *BunDefinitionRepository) List(ctx context.Context, env ...string) ([]*Definition, error)

func (*BunDefinitionRepository) Update added in v0.2.0

func (r *BunDefinitionRepository) Update(ctx context.Context, definition *Definition) (*Definition, error)

type BunDefinitionVersionRepository added in v0.21.0

type BunDefinitionVersionRepository struct {
	// contains filtered or unexported fields
}

BunDefinitionVersionRepository implements DefinitionVersionRepository with optional caching.

func NewBunDefinitionVersionRepository added in v0.21.0

func NewBunDefinitionVersionRepository(db *bun.DB) *BunDefinitionVersionRepository

NewBunDefinitionVersionRepository creates a definition version repository without caching.

func NewBunDefinitionVersionRepositoryWithCache added in v0.21.0

func NewBunDefinitionVersionRepositoryWithCache(db *bun.DB, cacheService cache.CacheService, serializer cache.KeySerializer) *BunDefinitionVersionRepository

NewBunDefinitionVersionRepositoryWithCache creates a definition version repository with caching services.

func (*BunDefinitionVersionRepository) Create added in v0.21.0

func (*BunDefinitionVersionRepository) GetByDefinitionAndVersion added in v0.21.0

func (r *BunDefinitionVersionRepository) GetByDefinitionAndVersion(ctx context.Context, definitionID uuid.UUID, version string) (*DefinitionVersion, error)

func (*BunDefinitionVersionRepository) GetByID added in v0.21.0

func (*BunDefinitionVersionRepository) ListByDefinition added in v0.21.0

func (r *BunDefinitionVersionRepository) ListByDefinition(ctx context.Context, definitionID uuid.UUID) ([]*DefinitionVersion, error)

func (*BunDefinitionVersionRepository) Update added in v0.21.0

type BunInstanceRepository

type BunInstanceRepository struct {
	// contains filtered or unexported fields
}

BunInstanceRepository implements InstanceRepository with optional caching.

func NewBunInstanceRepository

func NewBunInstanceRepository(db *bun.DB) *BunInstanceRepository

NewBunInstanceRepository creates a block instance repository without caching.

func NewBunInstanceRepositoryWithCache

func NewBunInstanceRepositoryWithCache(db *bun.DB, cacheService cache.CacheService, serializer cache.KeySerializer) *BunInstanceRepository

NewBunInstanceRepositoryWithCache creates a block instance repository with caching services.

func (*BunInstanceRepository) Create

func (r *BunInstanceRepository) Create(ctx context.Context, instance *Instance) (*Instance, error)

func (*BunInstanceRepository) Delete added in v0.2.0

func (r *BunInstanceRepository) Delete(ctx context.Context, id uuid.UUID) error

func (*BunInstanceRepository) GetByID

func (r *BunInstanceRepository) GetByID(ctx context.Context, id uuid.UUID) (*Instance, error)

func (*BunInstanceRepository) ListByDefinition added in v0.2.0

func (r *BunInstanceRepository) ListByDefinition(ctx context.Context, definitionID uuid.UUID) ([]*Instance, error)

func (*BunInstanceRepository) ListByPage

func (r *BunInstanceRepository) ListByPage(ctx context.Context, pageID uuid.UUID) ([]*Instance, error)

func (*BunInstanceRepository) ListGlobal

func (r *BunInstanceRepository) ListGlobal(ctx context.Context) ([]*Instance, error)

func (*BunInstanceRepository) Update

func (r *BunInstanceRepository) Update(ctx context.Context, instance *Instance) (*Instance, error)

type BunInstanceVersionRepository

type BunInstanceVersionRepository struct {
	// contains filtered or unexported fields
}

BunInstanceVersionRepository implements InstanceVersionRepository with optional caching.

func NewBunInstanceVersionRepository

func NewBunInstanceVersionRepository(db *bun.DB) *BunInstanceVersionRepository

NewBunInstanceVersionRepository creates a block instance version repository without caching.

func NewBunInstanceVersionRepositoryWithCache

func NewBunInstanceVersionRepositoryWithCache(db *bun.DB, cacheService cache.CacheService, serializer cache.KeySerializer) *BunInstanceVersionRepository

NewBunInstanceVersionRepositoryWithCache creates a block instance version repository with caching services.

func (*BunInstanceVersionRepository) Create

func (*BunInstanceVersionRepository) GetLatest

func (r *BunInstanceVersionRepository) GetLatest(ctx context.Context, instanceID uuid.UUID) (*InstanceVersion, error)

func (*BunInstanceVersionRepository) GetVersion

func (r *BunInstanceVersionRepository) GetVersion(ctx context.Context, instanceID uuid.UUID, number int) (*InstanceVersion, error)

func (*BunInstanceVersionRepository) ListByInstance

func (r *BunInstanceVersionRepository) ListByInstance(ctx context.Context, instanceID uuid.UUID) ([]*InstanceVersion, error)

func (*BunInstanceVersionRepository) Update

type BunTranslationRepository

type BunTranslationRepository struct {
	// contains filtered or unexported fields
}

BunTranslationRepository implements TranslationRepository with optional caching.

func NewBunTranslationRepository

func NewBunTranslationRepository(db *bun.DB) *BunTranslationRepository

NewBunTranslationRepository creates a translation repository without caching.

func NewBunTranslationRepositoryWithCache

func NewBunTranslationRepositoryWithCache(db *bun.DB, cacheService cache.CacheService, serializer cache.KeySerializer) *BunTranslationRepository

NewBunTranslationRepositoryWithCache creates a translation repository with caching.

func (*BunTranslationRepository) Create

func (r *BunTranslationRepository) Create(ctx context.Context, translation *Translation) (*Translation, error)

func (*BunTranslationRepository) Delete added in v0.2.0

func (*BunTranslationRepository) GetByInstanceAndLocale

func (r *BunTranslationRepository) GetByInstanceAndLocale(ctx context.Context, instanceID uuid.UUID, localeID uuid.UUID) (*Translation, error)

func (*BunTranslationRepository) ListByInstance

func (r *BunTranslationRepository) ListByInstance(ctx context.Context, instanceID uuid.UUID) ([]*Translation, error)

func (*BunTranslationRepository) Update added in v0.2.0

func (r *BunTranslationRepository) Update(ctx context.Context, translation *Translation) (*Translation, error)

type ConflictReportOptions added in v0.21.0

type ConflictReportOptions struct {
	ContentIDs []uuid.UUID
	Limit      int
}

ConflictReportOptions scopes conflict queries.

type ContentPageResolver added in v0.21.0

type ContentPageResolver interface {
	PageIDsForContent(ctx context.Context, contentID uuid.UUID) ([]uuid.UUID, error)
}

ContentPageResolver maps content entries to page identifiers.

type CreateDefinitionVersionInput added in v0.21.0

type CreateDefinitionVersionInput struct {
	DefinitionID uuid.UUID
	Schema       map[string]any
	Defaults     map[string]any
}

CreateDefinitionVersionInput captures schema version updates for a definition.

type CreateInstanceDraftRequest

type CreateInstanceDraftRequest struct {
	InstanceID  uuid.UUID
	Snapshot    BlockVersionSnapshot
	CreatedBy   uuid.UUID
	UpdatedBy   uuid.UUID
	BaseVersion *int
}

CreateInstanceDraftRequest captures the payload required to create a block instance draft snapshot.

type CreateInstanceInput

type CreateInstanceInput struct {
	DefinitionID  uuid.UUID
	PageID        *uuid.UUID
	Region        string
	Position      int
	Configuration map[string]any
	IsGlobal      bool
	CreatedBy     uuid.UUID
	UpdatedBy     uuid.UUID
}

type Definition

type Definition = cmsblocks.Definition

type DefinitionRepository

type DefinitionRepository interface {
	Create(ctx context.Context, definition *Definition) (*Definition, error)
	GetByID(ctx context.Context, id uuid.UUID) (*Definition, error)
	GetBySlug(ctx context.Context, slug string, env ...string) (*Definition, error)
	List(ctx context.Context, env ...string) ([]*Definition, error)
	Update(ctx context.Context, definition *Definition) (*Definition, error)
	Delete(ctx context.Context, id uuid.UUID) error
}

DefinitionRepository exposes persistence operations for block definitions.

func NewMemoryDefinitionRepository

func NewMemoryDefinitionRepository() DefinitionRepository

NewMemoryDefinitionRepository constructs an "in memory" definition repository.

type DefinitionVersion added in v0.21.0

type DefinitionVersion = cmsblocks.DefinitionVersion

type DefinitionVersionRepository added in v0.21.0

type DefinitionVersionRepository interface {
	Create(ctx context.Context, version *DefinitionVersion) (*DefinitionVersion, error)
	GetByID(ctx context.Context, id uuid.UUID) (*DefinitionVersion, error)
	GetByDefinitionAndVersion(ctx context.Context, definitionID uuid.UUID, version string) (*DefinitionVersion, error)
	ListByDefinition(ctx context.Context, definitionID uuid.UUID) ([]*DefinitionVersion, error)
	Update(ctx context.Context, version *DefinitionVersion) (*DefinitionVersion, error)
}

DefinitionVersionRepository exposes persistence operations for block definition versions.

func NewMemoryDefinitionVersionRepository added in v0.21.0

func NewMemoryDefinitionVersionRepository() DefinitionVersionRepository

NewMemoryDefinitionVersionRepository constructs an "in memory" definition version repository.

type DeleteDefinitionRequest added in v0.2.0

type DeleteDefinitionRequest struct {
	ID         uuid.UUID
	HardDelete bool
}

type DeleteInstanceRequest added in v0.2.0

type DeleteInstanceRequest struct {
	ID         uuid.UUID
	DeletedBy  uuid.UUID
	HardDelete bool
}

type DeleteTranslationRequest added in v0.2.0

type DeleteTranslationRequest struct {
	BlockInstanceID          uuid.UUID
	LocaleID                 uuid.UUID
	DeletedBy                uuid.UUID
	AllowMissingTranslations bool
}

type EmbeddedBlockBridge added in v0.21.0

type EmbeddedBlockBridge struct {
	// contains filtered or unexported fields
}

EmbeddedBlockBridge coordinates embedded block payloads with legacy block instances.

func NewEmbeddedBlockBridge added in v0.21.0

func NewEmbeddedBlockBridge(blocksSvc Service, locales content.LocaleRepository, resolver ContentPageResolver, opts ...EmbeddedBlockBridgeOption) *EmbeddedBlockBridge

NewEmbeddedBlockBridge constructs a bridge for embedded blocks.

func (*EmbeddedBlockBridge) BackfillFromLegacy added in v0.21.0

func (b *EmbeddedBlockBridge) BackfillFromLegacy(ctx context.Context, opts BackfillOptions) (BackfillReport, error)

BackfillFromLegacy writes embedded blocks into stored content translations.

func (*EmbeddedBlockBridge) InstancesFromEmbeddedContent added in v0.21.0

func (b *EmbeddedBlockBridge) InstancesFromEmbeddedContent(ctx context.Context, contentID uuid.UUID, translations []*content.ContentTranslation) ([]*Instance, error)

InstancesFromEmbeddedContent builds in-memory block instances from embedded payloads.

func (*EmbeddedBlockBridge) ListConflicts added in v0.21.0

ListConflicts returns embedded-vs-legacy conflict reports.

func (*EmbeddedBlockBridge) MergeLegacyBlocks added in v0.21.0

func (b *EmbeddedBlockBridge) MergeLegacyBlocks(ctx context.Context, record *content.Content) error

MergeLegacyBlocks populates embedded block payloads when missing.

func (*EmbeddedBlockBridge) MigrateEmbeddedBlocks added in v0.21.0

func (b *EmbeddedBlockBridge) MigrateEmbeddedBlocks(ctx context.Context, locale string, blocks []map[string]any) ([]map[string]any, error)

MigrateEmbeddedBlocks upgrades embedded blocks to the latest schema version.

func (*EmbeddedBlockBridge) PreviewInstancesFromEmbeddedContent added in v0.21.0

func (b *EmbeddedBlockBridge) PreviewInstancesFromEmbeddedContent(ctx context.Context, contentID uuid.UUID, translations []*content.ContentTranslation) ([]*Instance, error)

PreviewInstancesFromEmbeddedContent resolves embedded blocks with in-memory migrations.

func (*EmbeddedBlockBridge) SyncEmbeddedBlocks added in v0.21.0

func (b *EmbeddedBlockBridge) SyncEmbeddedBlocks(ctx context.Context, contentID uuid.UUID, translations []content.ContentTranslationInput, actor uuid.UUID) error

SyncEmbeddedBlocks projects embedded blocks into legacy block instances (dual-write).

func (*EmbeddedBlockBridge) ValidateBlockAvailability added in v0.21.0

func (b *EmbeddedBlockBridge) ValidateBlockAvailability(_ context.Context, contentType string, availability cmsschema.BlockAvailability, blocks []map[string]any) error

ValidateBlockAvailability enforces content-type block availability rules.

func (*EmbeddedBlockBridge) ValidateEmbeddedBlocks added in v0.21.0

func (b *EmbeddedBlockBridge) ValidateEmbeddedBlocks(ctx context.Context, locale string, blocks []map[string]any, mode content.EmbeddedBlockValidationMode) error

ValidateEmbeddedBlocks validates embedded blocks against their schemas.

type EmbeddedBlockBridgeOption added in v0.21.0

type EmbeddedBlockBridgeOption func(*EmbeddedBlockBridge)

EmbeddedBlockBridgeOption customises the embedded blocks bridge.

func WithEmbeddedBlocksClock added in v0.21.0

func WithEmbeddedBlocksClock(clock func() time.Time) EmbeddedBlockBridgeOption

WithEmbeddedBlocksClock overrides the clock used for synthetic timestamps.

func WithEmbeddedBlocksContentRepository added in v0.21.0

func WithEmbeddedBlocksContentRepository(repo content.ContentRepository) EmbeddedBlockBridgeOption

WithEmbeddedBlocksContentRepository wires a content repository for backfill/reporting.

func WithEmbeddedBlocksDefaultLocale added in v0.21.0

func WithEmbeddedBlocksDefaultLocale(locale string) EmbeddedBlockBridgeOption

WithEmbeddedBlocksDefaultLocale overrides the locale used as base for structure.

func WithEmbeddedBlocksDefaultRegion added in v0.21.0

func WithEmbeddedBlocksDefaultRegion(region string) EmbeddedBlockBridgeOption

WithEmbeddedBlocksDefaultRegion overrides the region used for embedded blocks.

func WithEmbeddedBlocksLogger added in v0.21.0

func WithEmbeddedBlocksLogger(logger interfaces.Logger) EmbeddedBlockBridgeOption

WithEmbeddedBlocksLogger overrides the logger used by the bridge.

func WithEmbeddedBlocksTranslationReader added in v0.21.0

func WithEmbeddedBlocksTranslationReader(reader content.ContentTranslationReader) EmbeddedBlockBridgeOption

WithEmbeddedBlocksTranslationReader overrides the translation reader used for hydration.

type IDGenerator

type IDGenerator func() uuid.UUID

type Instance

type Instance = cmsblocks.Instance

type InstanceRepository

type InstanceRepository interface {
	Create(ctx context.Context, instance *Instance) (*Instance, error)
	GetByID(ctx context.Context, id uuid.UUID) (*Instance, error)
	ListByPage(ctx context.Context, pageID uuid.UUID) ([]*Instance, error)
	ListGlobal(ctx context.Context) ([]*Instance, error)
	ListByDefinition(ctx context.Context, definitionID uuid.UUID) ([]*Instance, error)
	Update(ctx context.Context, instance *Instance) (*Instance, error)
	Delete(ctx context.Context, id uuid.UUID) error
}

InstanceRepository exposes persistence operations for block instances.

func NewMemoryInstanceRepository

func NewMemoryInstanceRepository() InstanceRepository

NewMemoryInstanceRepository constructs an "in memory" instance repository.

type InstanceVersion

type InstanceVersion = cmsblocks.InstanceVersion

type InstanceVersionRepository

type InstanceVersionRepository interface {
	Create(ctx context.Context, version *InstanceVersion) (*InstanceVersion, error)
	ListByInstance(ctx context.Context, instanceID uuid.UUID) ([]*InstanceVersion, error)
	GetVersion(ctx context.Context, instanceID uuid.UUID, number int) (*InstanceVersion, error)
	GetLatest(ctx context.Context, instanceID uuid.UUID) (*InstanceVersion, error)
	Update(ctx context.Context, version *InstanceVersion) (*InstanceVersion, error)
}

InstanceVersionRepository exposes persistence operations for block instance versions.

func NewMemoryInstanceVersionRepository

func NewMemoryInstanceVersionRepository() InstanceVersionRepository

NewMemoryInstanceVersionRepository constructs an "in memory" instance version repository.

type MigrationFunc added in v0.21.0

type MigrationFunc func(map[string]any) (map[string]any, error)

MigrationFunc transforms a block payload between schema versions.

type MigrationStep added in v0.21.0

type MigrationStep struct {
	From  string
	To    string
	Apply MigrationFunc
}

MigrationStep describes a single block schema migration hop.

type Migrator added in v0.21.0

type Migrator struct {
	// contains filtered or unexported fields
}

Migrator applies ordered migration steps for block schemas.

func NewMigrator added in v0.21.0

func NewMigrator() *Migrator

NewMigrator constructs an empty block schema migrator.

func (*Migrator) Migrate added in v0.21.0

func (m *Migrator) Migrate(slug, from, to string, payload map[string]any) (map[string]any, error)

Migrate applies migration steps until the target version is reached.

func (*Migrator) Register added in v0.21.0

func (m *Migrator) Register(slug, from, to string, fn MigrationFunc) error

Register adds a migration step for a block definition.

type NotFoundError

type NotFoundError struct {
	Resource string
	Key      string
}

NotFoundError is returned when a block resource cannot be located.

func (*NotFoundError) Error

func (e *NotFoundError) Error() string

type PublishInstanceDraftRequest

type PublishInstanceDraftRequest struct {
	InstanceID  uuid.UUID
	Version     int
	PublishedBy uuid.UUID
	PublishedAt *time.Time
}

PublishInstanceDraftRequest captures details required to publish a block instance draft.

type RegisterDefinitionInput

type RegisterDefinitionInput struct {
	Name             string
	Slug             string
	Description      *string
	Icon             *string
	Category         *string
	Status           string
	Schema           map[string]any
	UISchema         map[string]any
	Defaults         map[string]any
	EditorStyleURL   *string
	FrontendStyleURL *string
	EnvironmentKey   string
}

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry stores versioned block schema definitions and migrations.

func NewRegistry

func NewRegistry() *Registry

NewRegistry constructs an empty block schema registry.

func (*Registry) Latest added in v0.21.0

func (r *Registry) Latest(name string) (RegisterDefinitionInput, bool)

Latest returns the latest registered schema definition for a name.

func (*Registry) List

func (r *Registry) List() []RegisterDefinitionInput

List returns the latest version of each registered definition.

func (*Registry) ListAllVersions added in v0.21.0

func (r *Registry) ListAllVersions() []RegisterDefinitionInput

ListAllVersions returns every registered definition version.

func (*Registry) ListVersions added in v0.21.0

func (r *Registry) ListVersions(name string) []RegisterDefinitionInput

ListVersions returns all versions registered for a definition name.

func (*Registry) Migrate added in v0.21.0

func (r *Registry) Migrate(name, from, to string, payload map[string]any) (map[string]any, error)

Migrate applies registered migration steps.

func (*Registry) Migrator added in v0.21.0

func (r *Registry) Migrator() *Migrator

Migrator exposes the underlying migration runner.

func (*Registry) Register

func (r *Registry) Register(input RegisterDefinitionInput)

Register records a versioned schema definition. The latest version is exposed via List().

func (*Registry) RegisterMigration added in v0.21.0

func (r *Registry) RegisterMigration(name, from, to string, fn MigrationFunc) error

RegisterMigration adds a migration step for a block definition.

type RestoreInstanceVersionRequest

type RestoreInstanceVersionRequest struct {
	InstanceID uuid.UUID
	Version    int
	RestoredBy uuid.UUID
}

RestoreInstanceVersionRequest captures the request to restore a previously recorded version.

type Service

type Service interface {
	RegisterDefinition(ctx context.Context, input RegisterDefinitionInput) (*Definition, error)
	GetDefinition(ctx context.Context, id uuid.UUID) (*Definition, error)
	ListDefinitions(ctx context.Context, env ...string) ([]*Definition, error)
	UpdateDefinition(ctx context.Context, input UpdateDefinitionInput) (*Definition, error)
	DeleteDefinition(ctx context.Context, req DeleteDefinitionRequest) error
	SyncRegistry(ctx context.Context) error
	CreateDefinitionVersion(ctx context.Context, input CreateDefinitionVersionInput) (*DefinitionVersion, error)
	GetDefinitionVersion(ctx context.Context, definitionID uuid.UUID, version string) (*DefinitionVersion, error)
	ListDefinitionVersions(ctx context.Context, definitionID uuid.UUID) ([]*DefinitionVersion, error)

	CreateInstance(ctx context.Context, input CreateInstanceInput) (*Instance, error)
	ListPageInstances(ctx context.Context, pageID uuid.UUID) ([]*Instance, error)
	ListGlobalInstances(ctx context.Context) ([]*Instance, error)
	UpdateInstance(ctx context.Context, input UpdateInstanceInput) (*Instance, error)
	DeleteInstance(ctx context.Context, req DeleteInstanceRequest) error

	AddTranslation(ctx context.Context, input AddTranslationInput) (*Translation, error)
	UpdateTranslation(ctx context.Context, input UpdateTranslationInput) (*Translation, error)
	DeleteTranslation(ctx context.Context, req DeleteTranslationRequest) error

	GetTranslation(ctx context.Context, instanceID uuid.UUID, localeID uuid.UUID) (*Translation, error)
	CreateDraft(ctx context.Context, req CreateInstanceDraftRequest) (*InstanceVersion, error)
	PublishDraft(ctx context.Context, req PublishInstanceDraftRequest) (*InstanceVersion, error)
	ListVersions(ctx context.Context, instanceID uuid.UUID) ([]*InstanceVersion, error)
	RestoreVersion(ctx context.Context, req RestoreInstanceVersionRequest) (*InstanceVersion, error)
}

func NewService

func NewService(defRepo DefinitionRepository, instRepo InstanceRepository, trRepo TranslationRepository, opts ...ServiceOption) Service

type ServiceOption

type ServiceOption func(*service)

func WithActivityEmitter added in v0.5.0

func WithActivityEmitter(emitter *activity.Emitter) ServiceOption

WithActivityEmitter wires the activity emitter used for activity records.

func WithClock

func WithClock(clock func() time.Time) ServiceOption

func WithDefaultEnvironmentKey added in v0.23.1

func WithDefaultEnvironmentKey(key string) ServiceOption

WithDefaultEnvironmentKey overrides the default environment key.

func WithDefinitionSlugNormalizer added in v0.23.1

func WithDefinitionSlugNormalizer(normalizer slug.Normalizer) ServiceOption

WithDefinitionSlugNormalizer overrides the slug normalizer used by block definitions.

func WithDefinitionVersionRepository added in v0.21.0

func WithDefinitionVersionRepository(repo DefinitionVersionRepository) ServiceOption

WithDefinitionVersionRepository wires the repository used for block definition version persistence.

func WithEnvironmentService added in v0.23.1

func WithEnvironmentService(envSvc cmsenv.Service) ServiceOption

WithEnvironmentService wires the environment service for env resolution.

func WithIDGenerator

func WithIDGenerator(generator IDGenerator) ServiceOption

func WithInstanceVersionRepository

func WithInstanceVersionRepository(repo InstanceVersionRepository) ServiceOption

WithInstanceVersionRepository wires the repository used for instance version persistence.

func WithMediaService

func WithMediaService(mediaSvc media.Service) ServiceOption

WithMediaService wires the media resolution helper used to enrich translations.

func WithRegistry

func WithRegistry(reg *Registry) ServiceOption

func WithRequireActiveEnvironment added in v0.23.1

func WithRequireActiveEnvironment(required bool) ServiceOption

WithRequireActiveEnvironment blocks operations on inactive environments.

func WithRequireExplicitEnvironment added in v0.23.1

func WithRequireExplicitEnvironment(required bool) ServiceOption

WithRequireExplicitEnvironment enforces explicit environment selection.

func WithRequireTranslations added in v0.2.0

func WithRequireTranslations(required bool) ServiceOption

WithRequireTranslations toggles whether at least one translation must remain attached to an instance.

func WithSchemaMigrator added in v0.21.0

func WithSchemaMigrator(migrator *Migrator) ServiceOption

WithSchemaMigrator wires the migration runner used for block schema upgrades.

func WithShortcodeService added in v0.2.0

func WithShortcodeService(svc interfaces.ShortcodeService) ServiceOption

WithShortcodeService wires the shortcode renderer used to process translation content.

func WithTranslationState added in v0.20.0

func WithTranslationState(state *translationconfig.State) ServiceOption

WithTranslationState wires a shared, runtime-configurable translation state.

func WithTranslationsEnabled added in v0.20.0

func WithTranslationsEnabled(enabled bool) ServiceOption

WithTranslationsEnabled toggles translation handling entirely.

func WithVersionRetentionLimit

func WithVersionRetentionLimit(limit int) ServiceOption

WithVersionRetentionLimit constrains how many versions are retained per instance.

func WithVersioningEnabled

func WithVersioningEnabled(enabled bool) ServiceOption

WithVersioningEnabled toggles versioning workflows for block instances.

type Translation

type Translation = cmsblocks.Translation

type TranslationRepository

type TranslationRepository interface {
	Create(ctx context.Context, translation *Translation) (*Translation, error)
	GetByInstanceAndLocale(ctx context.Context, instanceID uuid.UUID, localeID uuid.UUID) (*Translation, error)
	ListByInstance(ctx context.Context, instanceID uuid.UUID) ([]*Translation, error)
	Update(ctx context.Context, translation *Translation) (*Translation, error)
	Delete(ctx context.Context, id uuid.UUID) error
}

TranslationRepository exposes persistence operations for block translations.

func NewMemoryTranslationRepository

func NewMemoryTranslationRepository() TranslationRepository

NewMemoryTranslationRepository constructs an "in memory" translation repository.

type UpdateDefinitionInput added in v0.2.0

type UpdateDefinitionInput struct {
	ID               uuid.UUID
	Name             *string
	Slug             *string
	Description      *string
	Icon             *string
	Category         *string
	Status           *string
	Schema           map[string]any
	UISchema         map[string]any
	Defaults         map[string]any
	EditorStyleURL   *string
	FrontendStyleURL *string
	EnvironmentKey   *string
}

type UpdateInstanceInput added in v0.2.0

type UpdateInstanceInput struct {
	InstanceID    uuid.UUID
	PageID        *uuid.UUID
	Region        *string
	Position      *int
	Configuration map[string]any
	IsGlobal      *bool
	UpdatedBy     uuid.UUID
}

type UpdateTranslationInput added in v0.2.0

type UpdateTranslationInput struct {
	BlockInstanceID    uuid.UUID
	LocaleID           uuid.UUID
	Content            map[string]any
	AttributeOverrides map[string]any
	MediaBindings      media.BindingSet
	UpdatedBy          uuid.UUID
}

Jump to

Keyboard shortcuts

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