summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-05-19 13:16:28 +0300
committerPaul Buetow <paul@buetow.org>2024-05-19 13:16:28 +0300
commitc06422b0727a4c6520d715e4be9a49a612afacfb (patch)
tree95565f8ac555f04b87bc2cb4482984d8cc649615 /internal/server
parent3e55b77c042c8436f93347f26cdd3196c1cb7f25 (diff)
initial equality test for the entries
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/handler/handler.go5
-rw-r--r--internal/server/repository/repository.go20
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))
}