summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-08-12 09:57:27 +0300
committerPaul Buetow <paul@buetow.org>2024-08-12 09:57:27 +0300
commitc3b3e09fe8da976d055b291887cf4ceba6e2048e (patch)
tree175bccedc77ad4495ec7a10edb9f27c1066be341 /internal/server
parent3e50142dc3932acb618a0bc030e8530c6c1e736c (diff)
move remote merges to reposotory
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/handler/handler.go55
-rw-r--r--internal/server/repository/repository.go53
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...)
+}