From 65e8a972e4f318d30d6363f7e5a1616e6bb2b557 Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Wed, 16 Oct 2024 07:34:08 +0200 Subject: [PATCH] last update --- plan/storage/memory/sync.go | 15 +++++++++++++++ plan/storage/memory/sync_test.go | 16 +++++++++++++++- plan/storage/storage.go | 2 ++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/plan/storage/memory/sync.go b/plan/storage/memory/sync.go index ca5fce0..42c6acb 100644 --- a/plan/storage/memory/sync.go +++ b/plan/storage/memory/sync.go @@ -3,6 +3,7 @@ package memory import ( "sort" "sync" + "time" "go-mod.ewintr.nl/planner/item" ) @@ -50,3 +51,17 @@ func (r *Sync) DeleteAll() error { return nil } + +func (r *Sync) LastUpdate() (time.Time, error) { + r.mutex.RLock() + defer r.mutex.RUnlock() + + var last time.Time + for _, i := range r.items { + if i.Updated.After(last) { + last = i.Updated + } + } + + return last, nil +} diff --git a/plan/storage/memory/sync_test.go b/plan/storage/memory/sync_test.go index 047b846..94a7a89 100644 --- a/plan/storage/memory/sync_test.go +++ b/plan/storage/memory/sync_test.go @@ -3,6 +3,7 @@ package memory_test import ( "fmt" "testing" + "time" "go-mod.ewintr.nl/planner/item" "go-mod.ewintr.nl/planner/plan/storage/memory" @@ -14,11 +15,15 @@ func TestSync(t *testing.T) { mem := memory.NewSync() t.Log("store") + now := time.Now() + ts := now count := 3 for i := 0; i < count; i++ { mem.Store(item.Item{ - ID: fmt.Sprintf("id-%d", i), + ID: fmt.Sprintf("id-%d", i), + Updated: ts, }) + ts = ts.Add(-1 * time.Minute) } t.Log("find all") @@ -30,6 +35,15 @@ func TestSync(t *testing.T) { t.Errorf("exp %v, got %v", count, len(actItems)) } + t.Log("last update") + actLU, actErr := mem.LastUpdate() + if actErr != nil { + t.Errorf("exp nil, got %v", actErr) + } + if !actLU.Equal(now) { + t.Errorf("exp %v, got %v", now, actLU) + } + t.Log("delete all") if err := mem.DeleteAll(); err != nil { t.Errorf("exp nil, got %v", err) diff --git a/plan/storage/storage.go b/plan/storage/storage.go index cdb9907..9dc2794 100644 --- a/plan/storage/storage.go +++ b/plan/storage/storage.go @@ -3,6 +3,7 @@ package storage import ( "errors" "sort" + "time" "go-mod.ewintr.nl/planner/item" ) @@ -23,6 +24,7 @@ type Sync interface { FindAll() ([]item.Item, error) Store(i item.Item) error DeleteAll() error + LastUpdate() (time.Time, error) } type Event interface {