diff options
| author | Paul Buetow <paul@buetow.org> | 2024-05-19 13:16:28 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-05-19 13:16:28 +0300 |
| commit | c06422b0727a4c6520d715e4be9a49a612afacfb (patch) | |
| tree | 95565f8ac555f04b87bc2cb4482984d8cc649615 /internal/server | |
| parent | 3e55b77c042c8436f93347f26cdd3196c1cb7f25 (diff) | |
initial equality test for the entries
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/handler/handler.go | 5 | ||||
| -rw-r--r-- | internal/server/repository/repository.go | 20 |
2 files changed, 16 insertions, 9 deletions
diff --git a/internal/server/handler/handler.go b/internal/server/handler/handler.go index c45f7d5..25a4b49 100644 --- a/internal/server/handler/handler.go +++ b/internal/server/handler/handler.go @@ -7,7 +7,6 @@ import ( "net/http" "os" "regexp" - "time" "codeberg.org/snonux/gos/internal/config/server" "codeberg.org/snonux/gos/internal/easyhttp" @@ -42,7 +41,7 @@ func (h Handler) Submit(w http.ResponseWriter, r *http.Request) error { if err != nil { return err } - return entry.SaveFile(fmt.Sprintf("%s/%s/%s.json", h.conf.DataDir, time.Now().Format("2006"), entry.ID)) + return repository.Instance(h.conf.DataDir).Merge(entry) } func (h Handler) List(w http.ResponseWriter, r *http.Request) error { @@ -124,7 +123,7 @@ func (h Handler) mergeFromPartner(partner string) error { continue } - repo.Merge(entry) + errs = append(errs, repo.Merge(entry)) } return errors.Join(errs...) diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go index f83175f..2c6b132 100644 --- a/internal/server/repository/repository.go +++ b/internal/server/repository/repository.go @@ -2,11 +2,13 @@ package repository import ( "encoding/json" + "fmt" "log" "os" "path/filepath" "strings" "sync" + "time" "codeberg.org/snonux/gos/internal/types" ) @@ -95,16 +97,22 @@ func (r Repository) HasEntry(pair EntryPair) bool { return true } -func (r Repository) Merge(newEntry types.Entry) { +func (r Repository) entryPath(entry types.Entry) string { + return fmt.Sprintf("%s/%s/%s.json", r.dataDir, time.Now().Format("2006"), entry.ID) +} + +func (r Repository) Merge(newEntry types.Entry) error { r.mu.Lock() defer r.mu.Unlock() - oldEntry, ok := r.entries[newEntry.ID] + entry, ok := r.entries[newEntry.ID] if !ok { - r.entries[newEntry.ID] = types.NewEntryFromCopy(newEntry) - return + entry = types.NewEntryFromCopy(newEntry) } - r.entries[newEntry.ID] = oldEntry.Updated(newEntry) - panic("Not yet implemented: shoud write entry also to disk") + entry, _ = entry.Update(newEntry) + r.entries[newEntry.ID] = entry + + // TODO: Only save to file when actually changed + return entry.SaveFile(r.entryPath(entry)) } |
