summaryrefslogtreecommitdiff
path: root/internal/server/repository/repository.go
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/repository/repository.go
parent08d07b0d9d5db780f41ab783f86389f329484948 (diff)
unit tests pass again
Diffstat (limited to 'internal/server/repository/repository.go')
-rw-r--r--internal/server/repository/repository.go32
1 files changed, 17 insertions, 15 deletions
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
}
}