blocks

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Dec 8, 2025 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrDefinitionNameRequired          = errors.New("blocks: definition name required")
	ErrDefinitionSchemaRequired        = errors.New("blocks: definition schema required")
	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")

	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")
	ErrTranslationNotFound              = errors.New("blocks: translation not found")
	ErrTranslationMinimum               = errors.New("blocks: at least one translation is required")
	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")
)
View Source
var BlockVersionSnapshotSchema = map[string]any{
	"type": "object",
	"properties": map[string]any{
		"configuration": map[string]any{
			"type":                 "object",
			"additionalProperties": true,
		},
		"translations": map[string]any{
			"type": "array",
			"items": map[string]any{
				"type":     "object",
				"required": []string{"locale", "content"},
				"properties": map[string]any{
					"locale": map[string]any{"type": "string"},
					"content": map[string]any{
						"type":                 "object",
						"additionalProperties": true,
					},
					"attribute_overrides": map[string]any{
						"type":                 "object",
						"additionalProperties": true,
					},
				},
			},
		},
		"metadata": map[string]any{
			"type":                 "object",
			"additionalProperties": true,
		},
		"media": map[string]any{
			"type": "object",
			"additionalProperties": map[string]any{
				"type":  "array",
				"items": map[string]any{"$ref": "#/$defs/mediaBinding"},
			},
		},
	},
	"$defs": map[string]any{
		"mediaBinding": map[string]any{
			"type":     "object",
			"required": []string{"slot", "reference"},
			"properties": map[string]any{
				"slot": map[string]any{"type": "string"},
				"reference": map[string]any{
					"type":                 "object",
					"additionalProperties": true,
					"properties": map[string]any{
						"id":         map[string]any{"type": "string"},
						"path":       map[string]any{"type": "string"},
						"collection": map[string]any{"type": "string"},
						"locale":     map[string]any{"type": "string"},
						"variant":    map[string]any{"type": "string"},
						"attributes": map[string]any{
							"type":                 "object",
							"additionalProperties": true,
						},
					},
				},
				"renditions": map[string]any{
					"type":  "array",
					"items": map[string]any{"type": "string"},
				},
				"required": map[string]any{
					"type":  "array",
					"items": map[string]any{"type": "string"},
				},
				"locale":          map[string]any{"type": "string"},
				"fallback_locale": map[string]any{"type": "string"},
				"gallery":         map[string]any{"type": "boolean"},
				"position": map[string]any{
					"type":    "integer",
					"minimum": 0,
				},
				"metadata": map[string]any{
					"type":                 "object",
					"additionalProperties": true,
				},
			},
		},
	},
}

BlockVersionSnapshotSchema documents the JSON schema enforced for block snapshots.

Functions

func NewDefinitionRepository

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

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.

Types

type AddTranslationInput

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

type BlockVersionSnapshot

type BlockVersionSnapshot struct {
	Configuration map[string]any                    `json:"configuration,omitempty"`
	Translations  []BlockVersionTranslationSnapshot `json:"translations,omitempty"`
	Metadata      map[string]any                    `json:"metadata,omitempty"`
	Media         media.BindingSet                  `json:"media,omitempty"`
}

BlockVersionSnapshot captures the persisted JSON snapshot for a block instance.

type BlockVersionTranslationSnapshot

type BlockVersionTranslationSnapshot struct {
	Locale             string         `json:"locale"`
	Content            map[string]any `json:"content"`
	AttributeOverrides map[string]any `json:"attribute_overrides,omitempty"`
}

BlockVersionTranslationSnapshot encodes localized payloads within a block snapshot.

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) GetByName

func (r *BunDefinitionRepository) GetByName(ctx context.Context, name string) (*Definition, error)

func (*BunDefinitionRepository) List

func (*BunDefinitionRepository) Update added in v0.2.0

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

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 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 struct {
	bun.BaseModel `bun:"table:block_definitions,alias:bd"`

	ID               uuid.UUID      `bun:",pk,type:uuid" json:"id"`
	Name             string         `bun:"name,notnull" json:"name"`
	Description      *string        `bun:"description" json:"description,omitempty"`
	Icon             *string        `bun:"icon" json:"icon,omitempty"`
	Schema           map[string]any `bun:"schema,type:jsonb,notnull" json:"schema"`
	Defaults         map[string]any `bun:"defaults,type:jsonb" json:"defaults,omitempty"`
	EditorStyleURL   *string        `bun:"editor_style_url" json:"editor_style_url,omitempty"`
	FrontendStyleURL *string        `bun:"frontend_style_url" json:"frontend_style_url,omitempty"`
	DeletedAt        *time.Time     `bun:"deleted_at,nullzero" json:"deleted_at,omitempty"`
	CreatedAt        time.Time      `bun:"created_at,nullzero,default:current_timestamp" json:"created_at"`
	UpdatedAt        time.Time      `bun:"updated_at,nullzero,default:current_timestamp" json:"updated_at"`
}

Definition represents a reusable block template and associated metadata.

type DefinitionRepository

type DefinitionRepository interface {
	Create(ctx context.Context, definition *Definition) (*Definition, error)
	GetByID(ctx context.Context, id uuid.UUID) (*Definition, error)
	GetByName(ctx context.Context, name string) (*Definition, error)
	List(ctx context.Context) ([]*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 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 IDGenerator

type IDGenerator func() uuid.UUID

type Instance

type Instance struct {
	bun.BaseModel `bun:"table:block_instances,alias:bi"`

	ID               uuid.UUID      `bun:",pk,type:uuid" json:"id"`
	PageID           *uuid.UUID     `bun:"page_id,type:uuid" json:"page_id,omitempty"`
	Region           string         `bun:"region,notnull" json:"region"`
	Position         int            `bun:"position,notnull,default:0" json:"position"`
	DefinitionID     uuid.UUID      `bun:"definition_id,notnull,type:uuid" json:"definition_id"`
	Configuration    map[string]any `bun:"configuration,type:jsonb,notnull,default:'{}'::jsonb" json:"configuration"`
	IsGlobal         bool           `bun:"is_global,notnull,default:false" json:"is_global"`
	CurrentVersion   int            `bun:"current_version,notnull,default:1" json:"current_version"`
	PublishedVersion *int           `bun:"published_version" json:"published_version,omitempty"`
	PublishedAt      *time.Time     `bun:"published_at,nullzero" json:"published_at,omitempty"`
	PublishedBy      *uuid.UUID     `bun:"published_by,type:uuid" json:"published_by,omitempty"`
	CreatedBy        uuid.UUID      `bun:"created_by,notnull,type:uuid" json:"created_by"`
	UpdatedBy        uuid.UUID      `bun:"updated_by,notnull,type:uuid" json:"updated_by"`
	DeletedAt        *time.Time     `bun:"deleted_at,nullzero" json:"deleted_at,omitempty"`
	CreatedAt        time.Time      `bun:"created_at,nullzero,default:current_timestamp" json:"created_at"`
	UpdatedAt        time.Time      `bun:"updated_at,nullzero,default:current_timestamp" json:"updated_at"`

	Definition   *Definition        `bun:"rel:belongs-to,join:definition_id=id" json:"definition,omitempty"`
	Translations []*Translation     `bun:"rel:has-many,join:id=block_instance_id" json:"translations,omitempty"`
	Versions     []*InstanceVersion `bun:"rel:has-many,join:id=block_instance_id" json:"versions,omitempty"`
}

Instance captures a concrete usage of a block definition on a page or region.

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 struct {
	bun.BaseModel `bun:"table:block_versions,alias:bv"`

	ID              uuid.UUID            `bun:",pk,type:uuid" json:"id"`
	BlockInstanceID uuid.UUID            `bun:"block_instance_id,notnull,type:uuid" json:"block_instance_id"`
	Version         int                  `bun:"version,notnull" json:"version"`
	Status          domain.Status        `bun:"status,notnull,default:'draft'" json:"status"`
	Snapshot        BlockVersionSnapshot `bun:"snapshot,type:jsonb,notnull" json:"snapshot"`
	CreatedBy       uuid.UUID            `bun:"created_by,notnull,type:uuid" json:"created_by"`
	CreatedAt       time.Time            `bun:"created_at,nullzero,default:current_timestamp" json:"created_at"`
	PublishedAt     *time.Time           `bun:"published_at,nullzero" json:"published_at,omitempty"`
	PublishedBy     *uuid.UUID           `bun:"published_by,type:uuid" json:"published_by,omitempty"`

	Instance *Instance `bun:"rel:belongs-to,join:block_instance_id=id" json:"instance,omitempty"`
}

InstanceVersion captures a snapshot of a block instance's configuration and translations.

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 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
	Description      *string
	Icon             *string
	Schema           map[string]any
	Defaults         map[string]any
	EditorStyleURL   *string
	FrontendStyleURL *string
}

type Registry

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

func NewRegistry

func NewRegistry() *Registry

func (*Registry) List

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

func (*Registry) Register

func (r *Registry) Register(input RegisterDefinitionInput)

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) ([]*Definition, error)
	UpdateDefinition(ctx context.Context, input UpdateDefinitionInput) (*Definition, error)
	DeleteDefinition(ctx context.Context, req DeleteDefinitionRequest) error
	SyncRegistry(ctx context.Context) 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 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 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 WithShortcodeService added in v0.2.0

func WithShortcodeService(svc interfaces.ShortcodeService) ServiceOption

WithShortcodeService wires the shortcode renderer used to process translation content.

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 struct {
	bun.BaseModel `bun:"table:block_translations,alias:bt"`

	ID                uuid.UUID                      `bun:",pk,type:uuid" json:"id"`
	BlockInstanceID   uuid.UUID                      `bun:"block_instance_id,notnull,type:uuid" json:"block_instance_id"`
	LocaleID          uuid.UUID                      `bun:"locale_id,notnull,type:uuid" json:"locale_id"`
	Content           map[string]any                 `bun:"content,type:jsonb,notnull" json:"content"`
	AttributeOverride map[string]any                 `bun:"attribute_overrides,type:jsonb" json:"attribute_overrides,omitempty"`
	MediaBindings     media.BindingSet               `bun:"media_bindings,type:jsonb" json:"media_bindings,omitempty"`
	ResolvedMedia     map[string][]*media.Attachment `bun:"-" json:"media,omitempty"`
	DeletedAt         *time.Time                     `bun:"deleted_at,nullzero" json:"deleted_at,omitempty"`
	CreatedAt         time.Time                      `bun:"created_at,nullzero,default:current_timestamp" json:"created_at"`
	UpdatedAt         time.Time                      `bun:"updated_at,nullzero,default:current_timestamp" json:"updated_at"`
}

Translation stores localized block content and attribute overrides.

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
	Description      *string
	Icon             *string
	Schema           map[string]any
	Defaults         map[string]any
	EditorStyleURL   *string
	FrontendStyleURL *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