package server import ( "encoding/json" "local/dndex/storage/entity" "local/dndex/storage/operator" "net/http" "github.com/google/uuid" "gopkg.in/mgo.v2/bson" ) func (rest *REST) dump(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: rest.dumpOut(w, r) case http.MethodPost: rest.dumpIn(w, r) default: rest.respNotFound(w) } } func (rest *REST) dumpOut(w http.ResponseWriter, r *http.Request) { scope := rest.scope(r) entities, err := rest.g.List(r.Context(), scope.Namespace) if err != nil { rest.respError(w, err) } rest.respMap(w, scope.Namespace, entities) } func (rest *REST) dumpIn(w http.ResponseWriter, r *http.Request) { scope := rest.scope(r) var request map[string][]entity.One if err := json.NewDecoder(r.Body).Decode(&request); err != nil { rest.respBadRequest(w, err.Error()) return } for namespace, ones := range request { if namespace == scope.Namespace { for _, one := range ones { if one.ID == "" { one.ID = uuid.New().String() } if err := rest.g.Insert(r.Context(), scope.Namespace, one); err != nil { if err := rest.g.Update(r.Context(), scope.Namespace, bson.M{entity.ID: one.ID}, operator.SetMany{Value: one}); err != nil { rest.respError(w, err) return } } } } } rest.entitiesGetN(w, r) }