refactor: introduce store.Store graph interface with SQLite implementation
This commit is contained in:
31
store/store.go
Normal file
31
store/store.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package store
|
||||
|
||||
import "axolotl/models"
|
||||
|
||||
// Store is a primitive graph persistence interface. It provides basic
|
||||
// operations for nodes, tags, and directed edges. No business logic lives here.
|
||||
type Store interface {
|
||||
// Nodes
|
||||
AddNode(id, title, content, dueDate, createdAt, updatedAt string) error
|
||||
GetNode(id string) (*models.Node, error) // returns node with tags and edges populated
|
||||
UpdateNode(id, title, content, dueDate, updatedAt string) error // empty dueDate stores NULL
|
||||
DeleteNode(id string) error
|
||||
NodeExists(id string) (bool, error)
|
||||
GenerateID() (string, error) // returns a random 5-char ID guaranteed unique in the store
|
||||
|
||||
// Tags
|
||||
AddTag(nodeID, tag string) error
|
||||
RemoveTag(nodeID, tag string) error
|
||||
|
||||
// Edges (directed, typed)
|
||||
AddEdge(fromID, toID string, relType models.RelType) error
|
||||
RemoveEdge(fromID, toID string, relType models.RelType) error
|
||||
|
||||
// Query returns fully-populated nodes matching all given tag prefixes and edge filters.
|
||||
FindNodes(tagPrefixes []string, edgeFilters []*models.Rel) ([]*models.Node, error)
|
||||
|
||||
// Transaction runs fn inside an atomic transaction. If fn returns an error
|
||||
// the transaction is rolled back; otherwise it is committed.
|
||||
// Calls to Transaction inside fn reuse the same transaction (no nesting).
|
||||
Transaction(fn func(Store) error) error
|
||||
}
|
||||
Reference in New Issue
Block a user