package handler import ( "context" "fmt" "io" "net/http" "codeberg.org/snonux/gos/internal/config/server" "codeberg.org/snonux/gos/internal/server/repository" "codeberg.org/snonux/gos/internal/types" ) type Handler struct { conf server.ServerConfig } func New(conf server.ServerConfig) Handler { return Handler{ conf: conf, } } func (h Handler) Submit(ctx context.Context, w http.ResponseWriter, r *http.Request) error { if r.Method != "POST" { return fmt.Errorf("expected POST request, but got %s", r.Method) } bytes, err := io.ReadAll(r.Body) if err != nil { return err } entry, err := types.NewEntry(bytes) if err != nil { return err } return repository.Instance(h.conf).Merge(entry) } func (h Handler) List(w http.ResponseWriter, r *http.Request) error { if r.Method != "GET" { return fmt.Errorf("expexted GET request") } list, err := repository.Instance(h.conf).ListBytes() if err != nil { return err } _, err = w.Write(list) return err } func (h Handler) Get(w http.ResponseWriter, r *http.Request) error { json, err := repository.Instance(h.conf).GetJSON(r.URL.Query().Get("id")) if err != nil { return err } fmt.Fprint(w, json) return nil } func (h Handler) Merge(ctx context.Context, w http.ResponseWriter, r *http.Request) error { if err := repository.Instance(h.conf).MergeRemotely(ctx); err != nil { return err } fmt.Fprint(w, "Repository merge went well") return nil }