package ports import ( "context" "github.com/dtoro/oikos/internal/core/domain" "github.com/dtoro/oikos/internal/ontology" ) // TypeTree aliases the ontology tree: entity types, relationship types, // lifecycle definitions. ontology is pure over domain; it moves under // core/ when checkdefaults is absorbed (Phase 3). type TypeTree = ontology.TypeTree // EntityFilters bounds entity list/search reads. type EntityFilters struct { Type string State string Q string Limit int } // EntityCreateInput is one transaction: the entity, its derived check // definitions, and the audit/event side-effects of the creation. type EntityCreateInput struct { Entity domain.Entity DerivedChecks []CheckDef Audit []AuditEntry Event *Event } // EntityUpdateInput mirrors EntityCreateInput for updates. type EntityUpdateInput struct { Entity domain.Entity DerivedChecks []CheckDef Audit []AuditEntry Event *Event } // EntityTransitionInput is a lifecycle state change: the check-then-act // precondition (current state) is validated inside the transaction. type EntityTransitionInput struct { Slug string From string To string Audit []AuditEntry Event *Event } // EntityRepository is the entity aggregate. Command methods are // transaction-scoped: everything in the input commits or nothing does. type EntityRepository interface { Get(ctx context.Context, id domain.UUID) (domain.Entity, error) BySlug(ctx context.Context, slug string) (domain.Entity, error) List(ctx context.Context, filters EntityFilters) ([]domain.Entity, error) Search(ctx context.Context, q string, limit int) ([]domain.Entity, error) Create(ctx context.Context, input EntityCreateInput) (domain.Entity, error) Update(ctx context.Context, input EntityUpdateInput) (domain.Entity, error) SetState(ctx context.Context, input EntityTransitionInput) (domain.Entity, error) } // RelationshipCreateInput validates endpoints against the ontology in core // before this is called; the repository persists the edge (+audit/event). type RelationshipCreateInput struct { Relationship domain.Relationship Audit []AuditEntry Event *Event } // RelationshipRepository is the relationship aggregate. type RelationshipRepository interface { Create(ctx context.Context, input RelationshipCreateInput) (domain.Relationship, error) End(ctx context.Context, source, target domain.UUID, relType string) error ListFor(ctx context.Context, entityID domain.UUID, direction string) ([]domain.Relationship, error) } // OntologyStore loads the type tree; implementations cache. Consumers // validate entity types, relationship endpoints, and lifecycle transitions // against it before issuing repository writes. type OntologyStore interface { LoadTypeTree(ctx context.Context) (TypeTree, error) }