diff --git a/plan/storage/memory/sync.go b/plan/storage/memory/sync.go new file mode 100644 index 0000000..ca5fce0 --- /dev/null +++ b/plan/storage/memory/sync.go @@ -0,0 +1,52 @@ +package memory + +import ( + "sort" + "sync" + + "go-mod.ewintr.nl/planner/item" +) + +type Sync struct { + items map[string]item.Item + mutex sync.RWMutex +} + +func NewSync() *Sync { + return &Sync{ + items: make(map[string]item.Item), + } +} + +func (r *Sync) FindAll() ([]item.Item, error) { + r.mutex.RLock() + defer r.mutex.RUnlock() + + items := make([]item.Item, 0, len(r.items)) + for _, item := range r.items { + items = append(items, item) + } + sort.Slice(items, func(i, j int) bool { + return items[i].ID < items[j].ID + }) + + return items, nil +} + +func (r *Sync) Store(e item.Item) error { + r.mutex.Lock() + defer r.mutex.Unlock() + + r.items[e.ID] = e + + return nil +} + +func (r *Sync) DeleteAll() error { + r.mutex.Lock() + defer r.mutex.Unlock() + + r.items = make(map[string]item.Item) + + return nil +} diff --git a/plan/storage/memory/sync_test.go b/plan/storage/memory/sync_test.go new file mode 100644 index 0000000..fd4312d --- /dev/null +++ b/plan/storage/memory/sync_test.go @@ -0,0 +1,7 @@ +package memory_test + +import "testing" + +func TestSync(t *testing.T) { + t.Parallel() +}