package server import ( "encoding/json" "local/dndex/server/auth" "local/dndex/storage/entity" "local/dndex/storage/operator" "net/http" "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) } for i := len(entities) - 1; i >= 0; i-- { if entities[i].ID == auth.UserKey { if i < len(entities)-1 { entities = append(entities[:i], entities[i+1:]...) } else { entities = entities[:i] } } } 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 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) }