63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
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)
|
|
}
|