Skip to content

Commit 32f40ab

Browse files
committed
make sure repo, pkg/memex.go and pkg/module.go all use types from core. we don't want to create circular dependencies
1 parent 326de9b commit 32f40ab

File tree

3 files changed

+52
-67
lines changed

3 files changed

+52
-67
lines changed

internal/memex/repository/repository.go

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import (
1010
"sync"
1111
"time"
1212

13+
"memex/internal/memex/core"
1314
"memex/internal/memex/storage/rabin"
1415
"memex/internal/memex/storage/store"
1516
"memex/internal/memex/transaction"
16-
"memex/pkg/module"
1717
)
1818

1919
// Magic number for .mx files
@@ -40,13 +40,13 @@ type Repository struct {
4040
store *store.ChunkStore
4141
txStore *transaction.ActionStore
4242
lockMgr sync.Mutex
43-
modules map[string]module.Module
43+
modules map[string]core.Module
4444
}
4545

4646
// Ensure Repository implements required interfaces
4747
var (
4848
_ transaction.Storage = (*Repository)(nil)
49-
_ module.Repository = (*Repository)(nil)
49+
_ core.Repository = (*Repository)(nil)
5050
)
5151

5252
// Create creates a new repository at the given path
@@ -79,7 +79,7 @@ func Create(path string) (*Repository, error) {
7979
path: path,
8080
file: file,
8181
header: header,
82-
modules: make(map[string]module.Module),
82+
modules: make(map[string]core.Module),
8383
}
8484

8585
// Create transaction store
@@ -130,7 +130,7 @@ func Open(path string) (*Repository, error) {
130130
path: path,
131131
file: file,
132132
header: header,
133-
modules: make(map[string]module.Module),
133+
modules: make(map[string]core.Module),
134134
}
135135

136136
// Create transaction store
@@ -172,32 +172,32 @@ func (r *Repository) GetLockManager() interface{} {
172172

173173
// Module operations
174174

175-
func (r *Repository) GetModule(id string) (module.Module, bool) {
175+
func (r *Repository) GetModule(id string) (core.Module, bool) {
176176
module, exists := r.modules[id]
177177
return module, exists
178178
}
179179

180-
func (r *Repository) RegisterModule(m module.Module) error {
181-
if _, exists := r.modules[m.ID()]; exists {
182-
return fmt.Errorf("module already registered: %s", m.ID())
180+
func (r *Repository) RegisterModule(module core.Module) error {
181+
if _, exists := r.modules[module.ID()]; exists {
182+
return fmt.Errorf("module already registered: %s", module.ID())
183183
}
184-
if err := m.Init(r); err != nil {
184+
if err := module.Init(r); err != nil {
185185
return fmt.Errorf("initializing module: %w", err)
186186
}
187-
r.modules[m.ID()] = m
187+
r.modules[module.ID()] = module
188188
return nil
189189
}
190190

191-
func (r *Repository) ListModules() []module.Module {
192-
modules := make([]module.Module, 0, len(r.modules))
193-
for _, m := range r.modules {
194-
modules = append(modules, m)
191+
func (r *Repository) ListModules() []core.Module {
192+
modules := make([]core.Module, 0, len(r.modules))
193+
for _, module := range r.modules {
194+
modules = append(modules, module)
195195
}
196196
return modules
197197
}
198198

199-
func (r *Repository) QueryNodesByModule(moduleID string) ([]*module.Node, error) {
200-
nodes := []*module.Node{}
199+
func (r *Repository) QueryNodesByModule(moduleID string) ([]*core.Node, error) {
200+
nodes := []*core.Node{}
201201
ids, err := r.ListNodes()
202202
if err != nil {
203203
return nil, err
@@ -215,8 +215,8 @@ func (r *Repository) QueryNodesByModule(moduleID string) ([]*module.Node, error)
215215
return nodes, nil
216216
}
217217

218-
func (r *Repository) QueryLinksByModule(moduleID string) ([]*module.Link, error) {
219-
links := []*module.Link{}
218+
func (r *Repository) QueryLinksByModule(moduleID string) ([]*core.Link, error) {
219+
links := []*core.Link{}
220220
chunks, err := r.store.ListChunks()
221221
if err != nil {
222222
return nil, err
@@ -228,7 +228,7 @@ func (r *Repository) QueryLinksByModule(moduleID string) ([]*module.Link, error)
228228
continue
229229
}
230230

231-
var link module.Link
231+
var link core.Link
232232
if err := json.Unmarshal(data, &link); err != nil {
233233
continue
234234
}
@@ -250,7 +250,7 @@ func (r *Repository) GetContent(id string) ([]byte, error) {
250250
}
251251

252252
// GetNode retrieves a node from the repository
253-
func (r *Repository) GetNode(id string) (*module.Node, error) {
253+
func (r *Repository) GetNode(id string) (*core.Node, error) {
254254
var data []byte
255255
var err error
256256

@@ -271,10 +271,10 @@ func (r *Repository) GetNode(id string) (*module.Node, error) {
271271
}
272272

273273
// Parse node
274-
var node module.Node
274+
var node core.Node
275275
if err := json.Unmarshal(data, &node); err != nil {
276276
// If parsing fails, try wrapping the data in a basic node structure
277-
node = module.Node{
277+
node = core.Node{
278278
Content: data,
279279
Meta: make(map[string]interface{}),
280280
}
@@ -299,7 +299,7 @@ func (r *Repository) AddNode(content []byte, nodeType string, meta map[string]in
299299

300300
// Create node
301301
now := time.Now().UTC()
302-
node := &module.Node{
302+
node := &core.Node{
303303
Type: nodeType,
304304
Content: content,
305305
Meta: meta,
@@ -377,7 +377,7 @@ func (r *Repository) AddNodeWithID(id string, content []byte, nodeType string, m
377377

378378
// Create node
379379
now := time.Now().UTC()
380-
node := &module.Node{
380+
node := &core.Node{
381381
ID: id,
382382
Type: nodeType,
383383
Content: content,
@@ -525,7 +525,7 @@ func (r *Repository) AddLink(source, target, linkType string, meta map[string]in
525525

526526
// Create link
527527
now := time.Now().UTC()
528-
link := &module.Link{
528+
link := &core.Link{
529529
Source: source,
530530
Target: target,
531531
Type: linkType,
@@ -580,15 +580,15 @@ func (r *Repository) AddLink(source, target, linkType string, meta map[string]in
580580
}
581581

582582
// GetLinks returns all links for a node
583-
func (r *Repository) GetLinks(nodeID string) ([]*module.Link, error) {
583+
func (r *Repository) GetLinks(nodeID string) ([]*core.Link, error) {
584584
// List all chunks
585585
chunks, err := r.store.ListChunks()
586586
if err != nil {
587587
return nil, fmt.Errorf("listing chunks: %w", err)
588588
}
589589

590590
// Filter and parse links
591-
var links []*module.Link
591+
var links []*core.Link
592592
for _, chunk := range chunks {
593593
// Get chunk data
594594
data, err := r.store.Get([][]byte{chunk})
@@ -597,7 +597,7 @@ func (r *Repository) GetLinks(nodeID string) ([]*module.Link, error) {
597597
}
598598

599599
// Try to parse as link
600-
var link module.Link
600+
var link core.Link
601601
if err := json.Unmarshal(data, &link); err != nil {
602602
continue
603603
}
@@ -640,7 +640,7 @@ func (r *Repository) DeleteLink(source, target, linkType string) error {
640640
}
641641

642642
// Try to parse as link
643-
var link module.Link
643+
var link core.Link
644644
if err := json.Unmarshal(data, &link); err != nil {
645645
continue
646646
}

pkg/memex/memex.go

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"memex/internal/memex/core"
77
"memex/internal/memex/repository"
8-
"memex/pkg/types"
98
)
109

1110
// Memex represents a memex instance
@@ -82,9 +81,12 @@ func (m *Memex) GetLinks(id string) ([]*Link, error) {
8281
result := make([]*Link, len(links))
8382
for i, link := range links {
8483
result[i] = &Link{
85-
Target: link.Target,
86-
Type: link.Type,
87-
Meta: link.Meta,
84+
Source: link.Source,
85+
Target: link.Target,
86+
Type: link.Type,
87+
Meta: link.Meta,
88+
Created: link.Created,
89+
Modified: link.Modified,
8890
}
8991
}
9092
return result, nil
@@ -108,39 +110,18 @@ func (m *Memex) GetContent(id string) ([]byte, error) {
108110
// Module operations
109111

110112
// RegisterModule registers a new module
111-
func (m *Memex) RegisterModule(module types.Module) error {
112-
if r, ok := m.repo.(*repository.Repository); ok {
113-
moduleRepo := r.AsModuleRepository()
114-
return moduleRepo.RegisterModule(module)
115-
}
116-
return m.repo.RegisterModule(repository.NewReverseModuleAdapter(module))
113+
func (m *Memex) RegisterModule(mod core.Module) error {
114+
return m.repo.RegisterModule(mod)
117115
}
118116

119117
// GetModule returns a module by ID
120-
func (m *Memex) GetModule(id string) (types.Module, bool) {
121-
if r, ok := m.repo.(*repository.Repository); ok {
122-
moduleRepo := r.AsModuleRepository()
123-
return moduleRepo.GetModule(id)
124-
}
125-
mod, exists := m.repo.GetModule(id)
126-
if !exists {
127-
return nil, false
128-
}
129-
return repository.NewModuleAdapter(mod), true
118+
func (m *Memex) GetModule(id string) (core.Module, bool) {
119+
return m.repo.GetModule(id)
130120
}
131121

132122
// ListModules returns all registered modules
133-
func (m *Memex) ListModules() []types.Module {
134-
if r, ok := m.repo.(*repository.Repository); ok {
135-
moduleRepo := r.AsModuleRepository()
136-
return moduleRepo.ListModules()
137-
}
138-
coreMods := m.repo.ListModules()
139-
typeMods := make([]types.Module, len(coreMods))
140-
for i, mod := range coreMods {
141-
typeMods[i] = repository.NewModuleAdapter(mod)
142-
}
143-
return typeMods
123+
func (m *Memex) ListModules() []core.Module {
124+
return m.repo.ListModules()
144125
}
145126

146127
// QueryNodesByModule returns all nodes created by a module
@@ -174,9 +155,12 @@ func (m *Memex) QueryLinksByModule(moduleID string) ([]*Link, error) {
174155
result := make([]*Link, len(links))
175156
for i, link := range links {
176157
result[i] = &Link{
177-
Target: link.Target,
178-
Type: link.Type,
179-
Meta: link.Meta,
158+
Source: link.Source,
159+
Target: link.Target,
160+
Type: link.Type,
161+
Meta: link.Meta,
162+
Created: link.Created,
163+
Modified: link.Modified,
180164
}
181165
}
182166
return result, nil

pkg/module/module.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
// Package module provides the public interface for creating Memex modules
1+
// Package module provides helpers for creating Memex modules
22
package module
33

44
import (
55
"fmt"
6+
67
"memex/internal/memex/core"
78
)
89

9-
// Re-export core types that modules need
10+
// Re-export core types for module authors
1011
type (
1112
Node = core.Node
1213
Link = core.Link
@@ -20,7 +21,7 @@ var (
2021
ErrNotInitialized = core.ErrNotInitialized
2122
)
2223

23-
// Base provides common module functionality
24+
// Base provides a base implementation of Module interface
2425
type Base struct {
2526
id string
2627
name string

0 commit comments

Comments
 (0)