Optional sorting on TRACE
parent
afba6a71f0
commit
dc5729f20c
27
view/who.go
27
view/who.go
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"local/dndex/storage/entity"
|
"local/dndex/storage/entity"
|
||||||
"local/dndex/storage/operator"
|
"local/dndex/storage/operator"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sort"
|
||||||
|
|
||||||
"github.com/buger/jsonparser"
|
"github.com/buger/jsonparser"
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
|
|
@ -190,6 +191,7 @@ func whoTrace(namespace string, g storage.Graph, w http.ResponseWriter, r *http.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
ones = sortOnes(ones, r)
|
||||||
names := make([]string, len(ones))
|
names := make([]string, len(ones))
|
||||||
for i := range ones {
|
for i := range ones {
|
||||||
names[i] = ones[i].Name
|
names[i] = ones[i].Name
|
||||||
|
|
@ -206,3 +208,28 @@ func getID(r *http.Request) (string, error) {
|
||||||
}
|
}
|
||||||
return id, nil
|
return id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sortOnes(ones []entity.One, r *http.Request) []entity.One {
|
||||||
|
sorting := r.URL.Query().Get("sort")
|
||||||
|
if sorting == "" {
|
||||||
|
sorting = entity.Modified
|
||||||
|
}
|
||||||
|
order := r.URL.Query().Get("order")
|
||||||
|
if order == "" {
|
||||||
|
order = "-1"
|
||||||
|
}
|
||||||
|
asc := order != "-1"
|
||||||
|
sort.Slice(ones, func(i, j int) bool {
|
||||||
|
ib, _ := bson.Marshal(ones[i])
|
||||||
|
jb, _ := bson.Marshal(ones[j])
|
||||||
|
var im, jm bson.M
|
||||||
|
bson.Unmarshal(ib, &im)
|
||||||
|
bson.Unmarshal(jb, &jm)
|
||||||
|
iv, _ := im[sorting]
|
||||||
|
jv, _ := jm[sorting]
|
||||||
|
is := fmt.Sprint(iv)
|
||||||
|
js := fmt.Sprint(jv)
|
||||||
|
return (asc && is < js) || (!asc && is > js)
|
||||||
|
})
|
||||||
|
return ones
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue