diff options
| author | Paul Buetow <paul@buetow.org> | 2024-08-12 09:57:27 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-08-12 09:57:27 +0300 |
| commit | c3b3e09fe8da976d055b291887cf4ceba6e2048e (patch) | |
| tree | 175bccedc77ad4495ec7a10edb9f27c1066be341 /internal/server | |
| parent | 3e50142dc3932acb618a0bc030e8530c6c1e736c (diff) | |
move remote merges to reposotory
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/handler/handler.go | 55 | ||||
| -rw-r--r-- | internal/server/repository/repository.go | 53 |
2 files changed, 56 insertions, 52 deletions
diff --git a/internal/server/handler/handler.go b/internal/server/handler/handler.go index 603e37c..fa1022e 100644 --- a/internal/server/handler/handler.go +++ b/internal/server/handler/handler.go @@ -2,14 +2,12 @@ package handler import ( "context" - "errors" "fmt" "io" "net/http" "regexp" "codeberg.org/snonux/gos/internal/config/server" - "codeberg.org/snonux/gos/internal/easyhttp" "codeberg.org/snonux/gos/internal/server/repository" "codeberg.org/snonux/gos/internal/types" ) @@ -73,57 +71,10 @@ func (h Handler) Get(w http.ResponseWriter, r *http.Request) error { } func (h Handler) Merge(ctx context.Context, w http.ResponseWriter, r *http.Request) error { - var errs []error - - for _, partner := range h.conf.Partners() { - if err := h.mergeFromPartner(ctx, partner); err != nil { - errs = append(errs, err) - } - } - - if len(errs) > 0 { - return errors.Join(errs...) - } - - fmt.Fprint(w, "Okiedokie") - return nil -} - -func (h Handler) mergeFromPartner(ctx context.Context, partner string) error { - var ( - errs []error - uri = fmt.Sprintf("%s/list", partner) - repo = repository.Instance(h.conf) - pairs []repository.EntryPair - ) - - if err := easyhttp.GetData(ctx, uri, h.conf.APIKey, &pairs); err != nil { + if err := repository.Instance(h.conf).MergeRemotely(ctx); err != nil { return err } - for _, pair := range pairs { - if repo.HasSameEntry(pair) { - continue - } - - var ( - ent types.Entry - uri = fmt.Sprintf("%s/get?id=%s", partner, pair.ID) - ) - - if err := easyhttp.GetData(ctx, uri, h.conf.APIKey, &ent); err != nil { - errs = append(errs, err) - continue - } - - // In theory, this should never happen - if pair.ID != ent.ID { - errs = append(errs, fmt.Errorf("pair ID %s does not match entry id %s", pair.ID, ent.ID)) - continue - } - - errs = append(errs, repo.Merge(ent)) - } - - return errors.Join(errs...) + fmt.Fprint(w, "Repository merge went well") + return nil } diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go index af8ea70..ca1919c 100644 --- a/internal/server/repository/repository.go +++ b/internal/server/repository/repository.go @@ -1,6 +1,7 @@ package repository import ( + "context" "encoding/json" "errors" "fmt" @@ -9,6 +10,7 @@ import ( "time" "codeberg.org/snonux/gos/internal/config/server" + "codeberg.org/snonux/gos/internal/easyhttp" "codeberg.org/snonux/gos/internal/types" "codeberg.org/snonux/gos/internal/vfs" ) @@ -138,6 +140,7 @@ func (r Repository) Get(id string) (types.Entry, bool) { return ent, ok } +// TODO: Make all methods not used externally in this file private func (r Repository) HasSameEntry(pair EntryPair) bool { _ = r.load() r.mu.Lock() @@ -181,3 +184,53 @@ func (r Repository) Merge(otherEnt types.Entry) error { } return r.fs.WriteFile(r.entryPath(ent), bytes) } + +func (r Repository) MergeRemotely(ctx context.Context) error { + var errs []error + + for _, partner := range r.conf.Partners() { + if err := r.mergeRemotelyFromPartner(ctx, partner); err != nil { + errs = append(errs, err) + } + } + + return errors.Join(errs...) +} + +func (r Repository) mergeRemotelyFromPartner(ctx context.Context, partner string) error { + var ( + errs []error + uri = fmt.Sprintf("%s/list", partner) + pairs []EntryPair + ) + + if err := easyhttp.GetData(ctx, uri, r.conf.APIKey, &pairs); err != nil { + return err + } + + for _, pair := range pairs { + if r.HasSameEntry(pair) { + continue + } + + var ( + ent types.Entry + uri = fmt.Sprintf("%s/get?id=%s", partner, pair.ID) + ) + + if err := easyhttp.GetData(ctx, uri, r.conf.APIKey, &ent); err != nil { + errs = append(errs, err) + continue + } + + // In theory, this should never happen + if pair.ID != ent.ID { + errs = append(errs, fmt.Errorf("pair ID %s does not match entry id %s", pair.ID, ent.ID)) + continue + } + + errs = append(errs, r.Merge(ent)) + } + + return errors.Join(errs...) +} |
