summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-06-04 19:57:37 +0300
committerPaul Buetow <paul@buetow.org>2024-06-04 19:57:37 +0300
commitc294a9ea142fde08eadea8c0555ba95b0d68e757 (patch)
tree714d3c5bd45b58ca5e305284082ce24c8b6c1470 /internal/server
parent08d07b0d9d5db780f41ab783f86389f329484948 (diff)
unit tests pass again
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/handler/handler.go8
-rw-r--r--internal/server/repository/repository.go32
-rw-r--r--internal/server/repository/repository_test.go20
3 files changed, 35 insertions, 25 deletions
diff --git a/internal/server/handler/handler.go b/internal/server/handler/handler.go
index 12c6660..8e2b867 100644
--- a/internal/server/handler/handler.go
+++ b/internal/server/handler/handler.go
@@ -62,12 +62,12 @@ func (h Handler) Get(w http.ResponseWriter, r *http.Request) error {
return fmt.Errorf("invalid id %s", id)
}
- data, err := repository.Instance(h.conf.DataDir).GetBytes(id)
- if err != err {
- return err
+ entry, ok := repository.Instance(h.conf.DataDir).Get(id)
+ if !ok {
+ return fmt.Errorf("no entry with id %s found", id)
}
- fmt.Fprint(w, string(data))
+ fmt.Fprint(w, entry.String())
return nil
}
diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go
index 8e84f4b..a98d50c 100644
--- a/internal/server/repository/repository.go
+++ b/internal/server/repository/repository.go
@@ -2,6 +2,7 @@ package repository
import (
"encoding/json"
+ "errors"
"fmt"
"sync"
"time"
@@ -49,10 +50,11 @@ func newRepository(dataDir string, fs fs) Repository {
}
}
-func (r Repository) put(entry types.Entry) {
+func (r Repository) put(entry types.Entry) error {
r.mu.Lock()
defer r.mu.Unlock()
r.entries[entry.ID] = entry
+ return entry.SaveFile(r.entryPath(entry))
}
// Load repository into memory
@@ -62,15 +64,19 @@ func (r Repository) load() error {
return err
}
+ var errs []error
for _, filePath := range filePaths {
- entry, err := types.NewEntryFromFile(filePath)
+ entry, err := types.NewEntryFromFile(filePath, r.fs)
if err != err {
- return err
+ errs = append(errs, err)
+ continue
+ }
+ if err := r.put(entry); err != nil {
+ errs = append(errs, err)
}
- r.put(entry)
}
- return nil
+ return errors.Join(errs...)
}
func (r Repository) List() ([]byte, error) {
@@ -89,16 +95,12 @@ func (r Repository) List() ([]byte, error) {
return json.Marshal(pairs)
}
-func (r Repository) GetBytes(id string) ([]byte, error) {
- return r.fs.ReadFile(fmt.Sprintf("%s/%s", r.dataDir, id))
-}
+func (r Repository) Get(id string) (types.Entry, bool) {
+ r.mu.Lock()
+ defer r.mu.Unlock()
-func (r Repository) Get(id string) (types.Entry, error) {
- bytes, err := r.GetBytes(id)
- if err != nil {
- return types.Entry{}, err
- }
- return types.NewEntry(bytes)
+ entry, ok := r.entries[id]
+ return entry, ok
}
func (r Repository) HasSameEntry(pair EntryPair) bool {
@@ -123,7 +125,7 @@ func (r Repository) Merge(otherEntry types.Entry) error {
entry, ok := r.entries[otherEntry.ID]
if !ok {
var err error
- if entry, err = types.NewEntryFromCopy(otherEntry); err != nil {
+ if entry, err = types.NewEntryFromCopy(otherEntry, r.fs); err != nil {
return err
}
}
diff --git a/internal/server/repository/repository_test.go b/internal/server/repository/repository_test.go
index 176808d..7c87efb 100644
--- a/internal/server/repository/repository_test.go
+++ b/internal/server/repository/repository_test.go
@@ -10,20 +10,28 @@ import (
func TestRepositoryGet(t *testing.T) {
t.Parallel()
- entry, _, err := twoDifferentEntries()
+ repo, entry, _, err := setupRepository()
if err != nil {
t.Error(err)
return
}
- repo.put(entry)
- t.Log(fs)
-
- entryGot, err := repo.Get(entry.ID)
- if err != nil {
+ if err := repo.put(entry); err != nil {
+ t.Error(err)
+ return
+ }
+ list, err := repo.List()
+ if err != err {
t.Error(err)
return
}
+ t.Log(string(list))
+
+ entryGot, ok := repo.Get(entry.ID)
+ if !ok {
+ t.Errorf("could not find entry with id %s in repo", entry.ID)
+ return
+ }
if !entryGot.Equals(entry) {
t.Error("expected to get", entry, "but got", entryGot)
}