diff options
| author | Paul Buetow <paul@buetow.org> | 2024-08-12 09:46:37 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-08-12 09:46:37 +0300 |
| commit | 3e50142dc3932acb618a0bc030e8530c6c1e736c (patch) | |
| tree | 9861baddb2567959c99b23565122e0e9e720b36b | |
| parent | 36560e8aad76a8ea9edc5c10869a2b55a832d62c (diff) | |
refactor config handling in repository
| -rw-r--r-- | internal/server/handler/handler.go | 8 | ||||
| -rw-r--r-- | internal/server/repository/repository.go | 15 | ||||
| -rw-r--r-- | internal/server/repository/repository_test.go | 11 |
3 files changed, 18 insertions, 16 deletions
diff --git a/internal/server/handler/handler.go b/internal/server/handler/handler.go index 835f3fb..603e37c 100644 --- a/internal/server/handler/handler.go +++ b/internal/server/handler/handler.go @@ -40,7 +40,7 @@ func (h Handler) Submit(ctx context.Context, w http.ResponseWriter, r *http.Requ if err != nil { return err } - return repository.Instance(h.conf.DataDir).Merge(ent) + return repository.Instance(h.conf).Merge(ent) } func (h Handler) List(w http.ResponseWriter, r *http.Request) error { @@ -48,7 +48,7 @@ func (h Handler) List(w http.ResponseWriter, r *http.Request) error { return fmt.Errorf("expexted GET request") } - list, err := repository.Instance(h.conf.DataDir).ListBytes() + list, err := repository.Instance(h.conf).ListBytes() if err != nil { return err } @@ -63,7 +63,7 @@ func (h Handler) Get(w http.ResponseWriter, r *http.Request) error { return fmt.Errorf("invalid id %s", id) } - ent, ok := repository.Instance(h.conf.DataDir).Get(id) + ent, ok := repository.Instance(h.conf).Get(id) if !ok { return fmt.Errorf("no entry with id %s found", id) } @@ -93,7 +93,7 @@ func (h Handler) mergeFromPartner(ctx context.Context, partner string) error { var ( errs []error uri = fmt.Sprintf("%s/list", partner) - repo = repository.Instance(h.conf.DataDir) + repo = repository.Instance(h.conf) pairs []repository.EntryPair ) diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go index 90b64bc..af8ea70 100644 --- a/internal/server/repository/repository.go +++ b/internal/server/repository/repository.go @@ -8,6 +8,7 @@ import ( "sync" "time" + "codeberg.org/snonux/gos/internal/config/server" "codeberg.org/snonux/gos/internal/types" "codeberg.org/snonux/gos/internal/vfs" ) @@ -29,25 +30,25 @@ type EntryPair struct { } type Repository struct { - dataDir string + conf server.ServerConfig entries map[string]types.Entry mu *sync.Mutex fs fs loaded *bool } -func Instance(dataDir string) Repository { +func Instance(conf server.ServerConfig) Repository { once.Do(func() { - instance = newRepository(dataDir, vfs.RealFS{}) + instance = newRepository(conf, vfs.RealFS{}) _ = instance.load() }) return instance } -func newRepository(dataDir string, fs fs) Repository { +func newRepository(conf server.ServerConfig, fs fs) Repository { var loaded bool return Repository{ - dataDir: dataDir, + conf: conf, entries: make(map[string]types.Entry), mu: &sync.Mutex{}, fs: fs, @@ -73,7 +74,7 @@ func (r Repository) load() error { return nil } - filePaths, err := r.fs.FindFiles(r.dataDir, ".json") + filePaths, err := r.fs.FindFiles(r.conf.DataDir, ".json") if err != nil { return err } @@ -150,7 +151,7 @@ func (r Repository) HasSameEntry(pair EntryPair) bool { } func (r Repository) entryPath(ent types.Entry) string { - return fmt.Sprintf("%s/%s/%s.json", r.dataDir, time.Now().Format("2006"), ent.ID) + return fmt.Sprintf("%s/%s/%s.json", r.conf.DataDir, time.Now().Format("2006"), ent.ID) } func (r Repository) Merge(otherEnt types.Entry) error { diff --git a/internal/server/repository/repository_test.go b/internal/server/repository/repository_test.go index 01babcb..78a7a59 100644 --- a/internal/server/repository/repository_test.go +++ b/internal/server/repository/repository_test.go @@ -3,6 +3,7 @@ package repository import ( "testing" + "codeberg.org/snonux/gos/internal/config/server" "codeberg.org/snonux/gos/internal/types" "codeberg.org/snonux/gos/internal/vfs" ) @@ -11,7 +12,7 @@ func TestRepositoryPutGet(t *testing.T) { t.Parallel() fs := make(vfs.MemoryFS) - repo := newRepository("./data", fs) + repo := newRepository(server.ServerConfig{DataDir: "./data"}, fs) for _, ent := range makeEntries(t) { t.Run(ent.ID, func(t *testing.T) { @@ -31,7 +32,7 @@ func TestRepositoryLoad(t *testing.T) { t.Parallel() fs := make(vfs.MemoryFS) - repo := newRepository("./data", fs) + repo := newRepository(server.ServerConfig{DataDir: "./data"}, fs) entries := makeEntries(t) // Write entries into the VFS @@ -62,7 +63,7 @@ func TestRepositoryList(t *testing.T) { t.Parallel() fs := make(vfs.MemoryFS) - repo := newRepository("./data", fs) + repo := newRepository(server.ServerConfig{DataDir: "./data"}, fs) entries := makeEntries(t) for _, ent := range entries { @@ -93,7 +94,7 @@ func TestRepositoryHasSameEntry(t *testing.T) { t.Parallel() fs := make(vfs.MemoryFS) - repo := newRepository("./data", fs) + repo := newRepository(server.ServerConfig{DataDir: "./data"}, fs) ent, _ := makeAnEntry() _ = repo.put(ent) @@ -112,7 +113,7 @@ func TestRepositoryMerge(t *testing.T) { t.Parallel() fs := make(vfs.MemoryFS) - repo := newRepository("./data", fs) + repo := newRepository(server.ServerConfig{DataDir: "./data"}, fs) ent1, _ := makeAnEntry() _ = repo.put(ent1) |
