store

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Aug 1, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package store defines the storage interface for PRISM Control. The in-memory fake in this package enables unit testing of all domain logic without a running Dolt instance; the doltstore subpackage provides the Ent-backed production implementation.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Assignment

type Assignment struct {
	ID             string     `json:"id"`
	RMIID          string     `json:"rmi_id"`
	Worker         string     `json:"worker,omitempty"` // session ID; matches omnidevx claudecode collector
	Status         string     `json:"status"`
	LeaseExpiresAt time.Time  `json:"lease_expires_at"`
	Workspace      string     `json:"workspace,omitempty"`
	Handoff        *Handoff   `json:"handoff,omitempty"`
	CreatedAt      time.Time  `json:"created_at"`
	CompletedAt    *time.Time `json:"completed_at,omitempty"`
	UpdatedAt      time.Time  `json:"updated_at"`
}

Assignment is a lease-based work claim by an agent session.

type AssignmentStore

type AssignmentStore interface {
	CreateAssignment(ctx context.Context, a *Assignment) error
	GetAssignment(ctx context.Context, id string) (*Assignment, error)
	GetActiveAssignment(ctx context.Context, rmiID string) (*Assignment, error)
	ListActiveAssignments(ctx context.Context) ([]*Assignment, error)
	ListAllAssignments(ctx context.Context) ([]*Assignment, error)
	UpdateAssignment(ctx context.Context, a *Assignment) error
}

AssignmentStore defines persistence for lease-based work claims.

type CapabilityModel

type CapabilityModel struct {
	ID          string      `json:"id"`
	Name        string      `json:"name"`
	Description string      `json:"description,omitempty"`
	Dimensions  []Dimension `json:"dimensions,omitempty"`
	MaxLevel    int         `json:"max_level"`
}

CapabilityModel defines a capability maturity framework.

type ContextSpec

type ContextSpec struct {
	// ExtraRepos lists additional repository IDs to include in the context.
	// These are added to the derived repo set with role "explicit".
	ExtraRepos []string `json:"extra_repos,omitempty"`

	// IncludeSpecs lists spec file paths to explicitly include.
	// Paths are relative to the RMI's repository root.
	IncludeSpecs []string `json:"include_specs,omitempty"`

	// ExcludeSpecs lists spec file paths to exclude from the context.
	// Takes precedence over initiative-level specs and IncludeSpecs.
	ExcludeSpecs []string `json:"exclude_specs,omitempty"`
}

ContextSpec contains explicit overrides for context assembly. When present, these settings augment or filter the derived context.

type DeliveryEvidence

type DeliveryEvidence struct {
	ID           string     `json:"id"`
	RMIID        string     `json:"rmi_id"`
	EvidenceType string     `json:"evidence_type"` // commit|pr|release|changelog|test
	Reference    string     `json:"reference"`
	CommitType   string     `json:"commit_type,omitempty"` // conventional commit type (commits only)
	CommitScope  string     `json:"commit_scope,omitempty"`
	OccurredAt   *time.Time `json:"occurred_at,omitempty"`
	CreatedAt    time.Time  `json:"created_at"`
}

DeliveryEvidence links a commit, PR, release, or changelog entry to an RMI.

type Dimension

type Dimension struct {
	Key         string   `json:"key"`
	Name        string   `json:"name"`
	Description string   `json:"description,omitempty"`
	Levels      []Level  `json:"levels,omitempty"`
	Sources     []string `json:"sources,omitempty"`
}

Dimension is a capability area within a maturity model.

type DimensionScore

type DimensionScore struct {
	Level     int    `json:"level"`
	Rationale string `json:"rationale,omitempty"`
	Evidence  string `json:"evidence,omitempty"`
}

DimensionScore captures the assessment for a single dimension.

type EvidenceStore

type EvidenceStore interface {
	CreateEvidence(ctx context.Context, ev *DeliveryEvidence) error
	ListEvidenceByRMI(ctx context.Context, rmiID string) ([]*DeliveryEvidence, error)
	ListEvidenceByInitiative(ctx context.Context, initiativeID string) ([]*DeliveryEvidence, error)
	ListAllEvidence(ctx context.Context) ([]*DeliveryEvidence, error)
}

EvidenceStore defines persistence for delivery evidence.

type Handoff

type Handoff struct {
	Completed  []string `json:"completed"`
	Remaining  []string `json:"remaining"`
	Decisions  []string `json:"decisions"`
	NextAction string   `json:"next_action"`
}

Handoff carries compact state for session continuity.

type Initiative

type Initiative struct {
	ID                 string            `json:"id"`
	Organization       string            `json:"organization"`
	Title              string            `json:"title"`
	Description        string            `json:"description,omitempty"`
	Status             string            `json:"status"`
	InitType           string            `json:"init_type,omitempty"`   // feature, maintenance, migration, compliance, refactor
	WorkflowID         string            `json:"workflow_id,omitempty"` // SpecWorkflow override; empty means use the type's default
	Priority           string            `json:"priority,omitempty"`
	HomeRepo           string            `json:"home_repo,omitempty"`
	Workspace          string            `json:"workspace,omitempty"`
	ProgramID          string            `json:"program_id,omitempty"`
	Specs              map[string]string `json:"specs,omitempty"`
	CreatedAt          time.Time         `json:"created_at"`
	PlannedAt          *time.Time        `json:"planned_at,omitempty"`
	ExecutingAt        *time.Time        `json:"executing_at,omitempty"`
	DeliveryCompleteAt *time.Time        `json:"delivery_complete_at,omitempty"`
	ReleasedAt         *time.Time        `json:"released_at,omitempty"`
	ClosedAt           *time.Time        `json:"closed_at,omitempty"`
	UpdatedAt          time.Time         `json:"updated_at"`
}

Initiative represents a cross-repository initiative.

type InitiativeDependency

type InitiativeDependency struct {
	SourceInitiativeID string `json:"source_initiative_id"`
	TargetInitiativeID string `json:"target_initiative_id"`
	Relationship       string `json:"relationship"` // "requires" or "relates"
}

InitiativeDependency is a directed edge between two initiatives.

type InitiativeStore

type InitiativeStore interface {
	CreateInitiative(ctx context.Context, init *Initiative) error
	GetInitiative(ctx context.Context, id string) (*Initiative, error)
	ListInitiatives(ctx context.Context) ([]*Initiative, error)
	UpdateInitiative(ctx context.Context, init *Initiative) error
	CreateInitiativeDependency(ctx context.Context, dep *InitiativeDependency) error
	ListInitiativeDependencies(ctx context.Context, initiativeID string) ([]*InitiativeDependency, error)
	ListAllInitiativeDependencies(ctx context.Context) ([]*InitiativeDependency, error)
}

InitiativeStore defines persistence for initiatives.

type JudgeResult

type JudgeResult struct {
	ID           string    `json:"id"`
	InitiativeID string    `json:"initiative_id"`
	SpecPath     string    `json:"spec_path"`
	RubricID     string    `json:"rubric_id"`
	Score        float64   `json:"score"`
	Rationale    string    `json:"rationale,omitempty"`
	Model        string    `json:"model,omitempty"`
	EvaluatedAt  time.Time `json:"evaluated_at"`
}

JudgeResult stores an LLM-as-a-Judge evaluation result.

type JudgeRubric

type JudgeRubric struct {
	ID             string         `json:"id"`
	WorkflowID     string         `json:"workflow_id"`
	SpecType       string         `json:"spec_type"`                 // e.g. "PRD.md"
	Criteria       map[string]any `json:"criteria,omitempty"`        // scoring dimensions
	PromptTemplate string         `json:"prompt_template,omitempty"` // LLM prompt for evaluation
}

JudgeRubric defines scoring criteria for evaluating a spec type.

type JudgeStore

type JudgeStore interface {
	CreateJudgeRubric(ctx context.Context, rubric *JudgeRubric) error
	GetJudgeRubric(ctx context.Context, id string) (*JudgeRubric, error)
	ListJudgeRubrics(ctx context.Context, workflowID string) ([]*JudgeRubric, error)
	CreateJudgeResult(ctx context.Context, result *JudgeResult) error
	ListJudgeResults(ctx context.Context, initiativeID string) ([]*JudgeResult, error)
}

JudgeStore defines persistence for judge rubrics and results.

type Level

type Level struct {
	Level       int    `json:"level"`
	Name        string `json:"name"`
	Description string `json:"description,omitempty"`
}

Level describes a maturity level within a dimension.

type MaturityAssessment

type MaturityAssessment struct {
	ID           string                    `json:"id"`
	ModelID      string                    `json:"model_id"`
	InitiativeID string                    `json:"initiative_id,omitempty"`
	Organization string                    `json:"organization,omitempty"`
	Scores       map[string]DimensionScore `json:"scores,omitempty"`
	OverallScore *float64                  `json:"overall_score,omitempty"`
	Summary      string                    `json:"summary,omitempty"`
	AssessedBy   string                    `json:"assessed_by,omitempty"`
	Model        string                    `json:"model,omitempty"` // LLM model used
	AssessedAt   time.Time                 `json:"assessed_at"`
}

MaturityAssessment captures a point-in-time capability assessment.

type MaturityStore

type MaturityStore interface {
	CreateCapabilityModel(ctx context.Context, model *CapabilityModel) error
	GetCapabilityModel(ctx context.Context, id string) (*CapabilityModel, error)
	ListCapabilityModels(ctx context.Context) ([]*CapabilityModel, error)
	UpdateCapabilityModel(ctx context.Context, model *CapabilityModel) error
	CreateMaturityAssessment(ctx context.Context, assessment *MaturityAssessment) error
	GetMaturityAssessment(ctx context.Context, id string) (*MaturityAssessment, error)
	ListMaturityAssessments(ctx context.Context, initiativeID string) ([]*MaturityAssessment, error)
	ListMaturityAssessmentsByOrg(ctx context.Context, org string) ([]*MaturityAssessment, error)
}

MaturityStore defines persistence for capability models and assessments.

type MemStore

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

MemStore is an in-memory Store implementation for unit testing. It is safe for concurrent use.

func NewMemStore

func NewMemStore() *MemStore

NewMemStore creates a new in-memory store.

func (*MemStore) CreateAssignment

func (m *MemStore) CreateAssignment(_ context.Context, a *Assignment) error

func (*MemStore) CreateCapabilityModel

func (m *MemStore) CreateCapabilityModel(_ context.Context, model *CapabilityModel) error

func (*MemStore) CreateDependency

func (m *MemStore) CreateDependency(_ context.Context, dep *RMIDependency) error

func (*MemStore) CreateEvidence

func (m *MemStore) CreateEvidence(_ context.Context, ev *DeliveryEvidence) error

func (*MemStore) CreateInitiative

func (m *MemStore) CreateInitiative(_ context.Context, init *Initiative) error

func (*MemStore) CreateInitiativeDependency

func (m *MemStore) CreateInitiativeDependency(_ context.Context, dep *InitiativeDependency) error

func (*MemStore) CreateJudgeResult

func (m *MemStore) CreateJudgeResult(_ context.Context, result *JudgeResult) error

func (*MemStore) CreateJudgeRubric

func (m *MemStore) CreateJudgeRubric(_ context.Context, rubric *JudgeRubric) error

func (*MemStore) CreateMaturityAssessment

func (m *MemStore) CreateMaturityAssessment(_ context.Context, assessment *MaturityAssessment) error

func (*MemStore) CreatePhase

func (m *MemStore) CreatePhase(_ context.Context, phase *Phase) error

func (*MemStore) CreateProgram

func (m *MemStore) CreateProgram(_ context.Context, prog *Program) error

func (*MemStore) CreateRMI

func (m *MemStore) CreateRMI(_ context.Context, rmi *RoadmapItem) error

func (*MemStore) CreateRepoDependency

func (m *MemStore) CreateRepoDependency(_ context.Context, dep *RepositoryDependency) error

func (*MemStore) CreateRepository

func (m *MemStore) CreateRepository(_ context.Context, repo *Repository) error

func (*MemStore) CreateSpecWorkflow

func (m *MemStore) CreateSpecWorkflow(_ context.Context, wf *SpecWorkflow) error

func (*MemStore) DeletePhase

func (m *MemStore) DeletePhase(_ context.Context, id string) error

func (*MemStore) GetActiveAssignment

func (m *MemStore) GetActiveAssignment(_ context.Context, rmiID string) (*Assignment, error)

func (*MemStore) GetAssignment

func (m *MemStore) GetAssignment(_ context.Context, id string) (*Assignment, error)

func (*MemStore) GetCapabilityModel

func (m *MemStore) GetCapabilityModel(_ context.Context, id string) (*CapabilityModel, error)

func (*MemStore) GetInitiative

func (m *MemStore) GetInitiative(_ context.Context, id string) (*Initiative, error)

func (*MemStore) GetJudgeRubric

func (m *MemStore) GetJudgeRubric(_ context.Context, id string) (*JudgeRubric, error)

func (*MemStore) GetMaturityAssessment

func (m *MemStore) GetMaturityAssessment(_ context.Context, id string) (*MaturityAssessment, error)

func (*MemStore) GetProgram

func (m *MemStore) GetProgram(_ context.Context, id string) (*Program, error)

func (*MemStore) GetRMI

func (m *MemStore) GetRMI(_ context.Context, id string) (*RoadmapItem, error)

func (*MemStore) GetRepository

func (m *MemStore) GetRepository(_ context.Context, id string) (*Repository, error)

func (*MemStore) GetSpecWorkflow

func (m *MemStore) GetSpecWorkflow(_ context.Context, id string) (*SpecWorkflow, error)

func (*MemStore) ListActiveAssignments

func (m *MemStore) ListActiveAssignments(_ context.Context) ([]*Assignment, error)

func (*MemStore) ListAllAssignments

func (m *MemStore) ListAllAssignments(_ context.Context) ([]*Assignment, error)

func (*MemStore) ListAllDependencies

func (m *MemStore) ListAllDependencies(_ context.Context) ([]*RMIDependency, error)

func (*MemStore) ListAllEvidence

func (m *MemStore) ListAllEvidence(_ context.Context) ([]*DeliveryEvidence, error)

func (*MemStore) ListAllInitiativeDependencies

func (m *MemStore) ListAllInitiativeDependencies(_ context.Context) ([]*InitiativeDependency, error)

func (*MemStore) ListAllRMIs

func (m *MemStore) ListAllRMIs(_ context.Context) ([]*RoadmapItem, error)

func (*MemStore) ListAllRepoDependencies

func (m *MemStore) ListAllRepoDependencies(_ context.Context) ([]*RepositoryDependency, error)

func (*MemStore) ListCapabilityModels

func (m *MemStore) ListCapabilityModels(_ context.Context) ([]*CapabilityModel, error)

func (*MemStore) ListDependencies

func (m *MemStore) ListDependencies(_ context.Context, rmiID string) ([]*RMIDependency, error)

func (*MemStore) ListEvidenceByInitiative

func (m *MemStore) ListEvidenceByInitiative(ctx context.Context, initiativeID string) ([]*DeliveryEvidence, error)

func (*MemStore) ListEvidenceByRMI

func (m *MemStore) ListEvidenceByRMI(_ context.Context, rmiID string) ([]*DeliveryEvidence, error)

func (*MemStore) ListInitiativeDependencies

func (m *MemStore) ListInitiativeDependencies(_ context.Context, initiativeID string) ([]*InitiativeDependency, error)

func (*MemStore) ListInitiatives

func (m *MemStore) ListInitiatives(_ context.Context) ([]*Initiative, error)

func (*MemStore) ListJudgeResults

func (m *MemStore) ListJudgeResults(_ context.Context, initiativeID string) ([]*JudgeResult, error)

func (*MemStore) ListJudgeRubrics

func (m *MemStore) ListJudgeRubrics(_ context.Context, workflowID string) ([]*JudgeRubric, error)

func (*MemStore) ListMaturityAssessments

func (m *MemStore) ListMaturityAssessments(_ context.Context, initiativeID string) ([]*MaturityAssessment, error)

func (*MemStore) ListMaturityAssessmentsByOrg

func (m *MemStore) ListMaturityAssessmentsByOrg(_ context.Context, org string) ([]*MaturityAssessment, error)

func (*MemStore) ListPhases

func (m *MemStore) ListPhases(_ context.Context, initiativeID string) ([]*Phase, error)

func (*MemStore) ListPrograms

func (m *MemStore) ListPrograms(_ context.Context) ([]*Program, error)

func (*MemStore) ListRMIs

func (m *MemStore) ListRMIs(_ context.Context, initiativeID string) ([]*RoadmapItem, error)

func (*MemStore) ListRMIsByRepo

func (m *MemStore) ListRMIsByRepo(_ context.Context, repoID string) ([]*RoadmapItem, error)

func (*MemStore) ListRMIsByStatus

func (m *MemStore) ListRMIsByStatus(_ context.Context, status string) ([]*RoadmapItem, error)

func (*MemStore) ListRepoDependencies

func (m *MemStore) ListRepoDependencies(_ context.Context, repoID string) ([]*RepositoryDependency, error)

func (*MemStore) ListRepositories

func (m *MemStore) ListRepositories(_ context.Context) ([]*Repository, error)

func (*MemStore) ListRepositoriesByOrg

func (m *MemStore) ListRepositoriesByOrg(_ context.Context, org string) ([]*Repository, error)

func (*MemStore) ListSpecWorkflows

func (m *MemStore) ListSpecWorkflows(_ context.Context) ([]*SpecWorkflow, error)

func (*MemStore) UpdateAssignment

func (m *MemStore) UpdateAssignment(_ context.Context, a *Assignment) error

func (*MemStore) UpdateCapabilityModel

func (m *MemStore) UpdateCapabilityModel(_ context.Context, model *CapabilityModel) error

func (*MemStore) UpdateInitiative

func (m *MemStore) UpdateInitiative(_ context.Context, init *Initiative) error

func (*MemStore) UpdateProgram

func (m *MemStore) UpdateProgram(_ context.Context, prog *Program) error

func (*MemStore) UpdateRMI

func (m *MemStore) UpdateRMI(_ context.Context, rmi *RoadmapItem) error

func (*MemStore) UpdateRepository

func (m *MemStore) UpdateRepository(_ context.Context, repo *Repository) error

func (*MemStore) UpdateSpecWorkflow

func (m *MemStore) UpdateSpecWorkflow(_ context.Context, wf *SpecWorkflow) error

type MemUnitOfWork

type MemUnitOfWork struct {
	Store *MemStore
}

MemUnitOfWork is a no-op UnitOfWork for the in-memory store.

func (*MemUnitOfWork) Execute

func (u *MemUnitOfWork) Execute(ctx context.Context, fn func(ctx context.Context, s Store) error) error

type Phase

type Phase struct {
	ID             string `json:"id"`
	InitiativeID   string `json:"initiative_id"`
	SequenceNumber int    `json:"sequence_number"`
	Title          string `json:"title"`
	Theme          string `json:"theme,omitempty"`
}

Phase is a themed grouping of RMIs within an initiative. Phase status is always derived from member RMIs — never stored.

type PhaseStore

type PhaseStore interface {
	CreatePhase(ctx context.Context, phase *Phase) error
	ListPhases(ctx context.Context, initiativeID string) ([]*Phase, error)
	DeletePhase(ctx context.Context, id string) error
}

PhaseStore defines persistence for phases.

type Program

type Program struct {
	ID           string    `json:"id"`
	Name         string    `json:"name"`
	Organization string    `json:"organization"`
	Description  string    `json:"description,omitempty"`
	Hidden       bool      `json:"hidden,omitempty"` // when true, omitted from the dashboard homepage by default
	CreatedAt    time.Time `json:"created_at"`
	UpdatedAt    time.Time `json:"updated_at"`
}

Program is an organizational grouping of related initiatives.

type ProgramStore

type ProgramStore interface {
	CreateProgram(ctx context.Context, prog *Program) error
	GetProgram(ctx context.Context, id string) (*Program, error)
	ListPrograms(ctx context.Context) ([]*Program, error)
	UpdateProgram(ctx context.Context, prog *Program) error
}

ProgramStore defines persistence for programs.

type RMIDependency

type RMIDependency struct {
	SourceRMIID  string `json:"source_rmi_id"`
	TargetRMIID  string `json:"target_rmi_id"`
	Relationship string `json:"relationship"` // "requires" or "relates"
}

RMIDependency is a directed edge between two RMIs.

type RMIStore

type RMIStore interface {
	CreateRMI(ctx context.Context, rmi *RoadmapItem) error
	GetRMI(ctx context.Context, id string) (*RoadmapItem, error)
	ListRMIs(ctx context.Context, initiativeID string) ([]*RoadmapItem, error)
	ListAllRMIs(ctx context.Context) ([]*RoadmapItem, error)
	ListRMIsByRepo(ctx context.Context, repoID string) ([]*RoadmapItem, error)
	ListRMIsByStatus(ctx context.Context, status string) ([]*RoadmapItem, error)
	UpdateRMI(ctx context.Context, rmi *RoadmapItem) error
	CreateDependency(ctx context.Context, dep *RMIDependency) error
	ListDependencies(ctx context.Context, rmiID string) ([]*RMIDependency, error)
	ListAllDependencies(ctx context.Context) ([]*RMIDependency, error)
}

RMIStore defines persistence for roadmap items and dependencies.

type Repository

type Repository struct {
	ID              string `json:"id"`
	Organization    string `json:"organization"`
	RepositoryName  string `json:"repository_name"`
	DefaultBranch   string `json:"default_branch,omitempty"`
	LocalPath       string `json:"local_path,omitempty"` // absolute path on disk (for ingest/scan)
	GoModule        string `json:"go_module,omitempty"`  // go.mod module path (from gitscan)
	Domain          string `json:"domain,omitempty"`
	Status          string `json:"status"`
	IngestHighWater string `json:"ingest_high_water,omitempty"` // last scanned commit SHA
}

Repository is a catalog entry for a participating repository.

type RepositoryDependency

type RepositoryDependency struct {
	SourceRepositoryID string `json:"source_repository_id"`
	TargetRepositoryID string `json:"target_repository_id"`
	DependencyType     string `json:"dependency_type"` // "go_module"
}

RepositoryDependency is a directed edge between two repositories derived from go.mod dependency analysis.

type RepositoryStore

type RepositoryStore interface {
	CreateRepository(ctx context.Context, repo *Repository) error
	GetRepository(ctx context.Context, id string) (*Repository, error)
	ListRepositories(ctx context.Context) ([]*Repository, error)
	ListRepositoriesByOrg(ctx context.Context, org string) ([]*Repository, error)
	UpdateRepository(ctx context.Context, repo *Repository) error
	CreateRepoDependency(ctx context.Context, dep *RepositoryDependency) error
	ListRepoDependencies(ctx context.Context, repoID string) ([]*RepositoryDependency, error)
	ListAllRepoDependencies(ctx context.Context) ([]*RepositoryDependency, error)
}

RepositoryStore defines persistence for the repository catalog.

type RoadmapItem

type RoadmapItem struct {
	ID                 string       `json:"id"`
	RepositoryID       string       `json:"repository_id"`
	InitiativeID       string       `json:"initiative_id,omitempty"`
	PhaseID            string       `json:"phase_id,omitempty"`
	Title              string       `json:"title"`
	Description        string       `json:"description,omitempty"`
	ItemType           string       `json:"item_type"`
	Status             string       `json:"status"`
	Priority           string       `json:"priority,omitempty"`
	Required           bool         `json:"required"`
	SequenceNumber     int          `json:"sequence_number"`
	AcceptanceCriteria []string     `json:"acceptance_criteria,omitempty"`
	ContextSpec        *ContextSpec `json:"context_spec,omitempty"`
	CreatedAt          time.Time    `json:"created_at"`
	CompletedAt        *time.Time   `json:"completed_at,omitempty"`
	UpdatedAt          time.Time    `json:"updated_at"`
}

RoadmapItem (RMI) is a deliverable within a single repository.

type SpecWorkflow

type SpecWorkflow struct {
	ID            string   `json:"id"`
	Name          string   `json:"name"`
	Description   string   `json:"description,omitempty"`
	SpecsRequired []string `json:"specs_required,omitempty"` // e.g. ["PLAN.md", "ROADMAP.md"]
	SpecsOptional []string `json:"specs_optional,omitempty"` // e.g. ["PRD.md", "TRD.md"]
	InitTypes     []string `json:"init_types,omitempty"`     // initiative types this workflow applies to
}

SpecWorkflow defines a specification workflow template.

type SpecWorkflowStore

type SpecWorkflowStore interface {
	CreateSpecWorkflow(ctx context.Context, wf *SpecWorkflow) error
	GetSpecWorkflow(ctx context.Context, id string) (*SpecWorkflow, error)
	ListSpecWorkflows(ctx context.Context) ([]*SpecWorkflow, error)
	UpdateSpecWorkflow(ctx context.Context, wf *SpecWorkflow) error
}

SpecWorkflowStore defines persistence for spec workflows.

type Store

Store is the persistence interface shared by all service-layer operations. Every mutating method runs inside a UnitOfWork; reads may be called directly.

type UnitOfWork

type UnitOfWork interface {
	// Execute runs fn inside a transaction. If fn returns nil the
	// transaction and Dolt commit are applied; otherwise both roll back.
	Execute(ctx context.Context, fn func(ctx context.Context, s Store) error) error
}

UnitOfWork groups a SQL transaction with a subsequent Dolt commit. The production implementation wraps an Ent transaction and issues CALL DOLT_COMMIT on success; the in-memory fake is a no-op.

Jump to

Keyboard shortcuts

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