diff --git a/view/html.go b/view/html.go
index 71e1fc5..d0e0150 100644
--- a/view/html.go
+++ b/view/html.go
@@ -1,6 +1,7 @@
package view
import (
+ "context"
"encoding/json"
"fmt"
"local/dndex/config"
@@ -45,39 +46,62 @@ func who(g storage.Graph, w http.ResponseWriter, r *http.Request) error {
namespace = strings.Replace(namespace[1:], "/", ".", -1)
ids := r.URL.Query()["id"]
_, verbose := r.URL.Query()["v"]
+ _, one := r.URL.Query()["one"]
results := make(map[string]entity.One)
for i := 0; i < len(ids); i++ {
id := ids[i]
- ones, err := g.List(r.Context(), namespace, id)
+ one, err := whoOne(r.Context(), g, namespace, id, verbose)
if err != nil {
return err
}
- if len(ones) != 1 {
- ones = append(ones, entity.One{})
+ results[id] = one
+ }
+ var marshalme interface{}
+ if one {
+ for k := range results {
+ marshalme = results[k]
+ break
}
- one := ones[0]
- if verbose {
- ones, err := g.List(r.Context(), namespace, one.Peers()...)
- if err != nil {
- return err
- }
- for _, another := range ones {
- another.Connections = nil
- for j := range one.Connections {
- if one.Connections[j].Name == another.Name {
- one.Connections[j] = entity.One{
- Relationship: one.Connections[j].Relationship,
- Type: another.Type,
- Modified: another.Modified,
- }
+ } else {
+ marshalme = results
+ }
+ log.Printf("id=%+v, one=%v, verbose=%v, results:%+v", ids, one, verbose, marshalme)
+ enc := json.NewEncoder(w)
+ enc.SetIndent("", " ")
+ return enc.Encode(marshalme)
+}
+
+func whoOne(ctx context.Context, g storage.Graph, namespace, id string, verbose bool) (entity.One, error) {
+ ones, err := g.List(ctx, namespace, id)
+ if err != nil {
+ return entity.One{}, err
+ }
+ if len(ones) != 1 {
+ ones = append(ones, entity.One{})
+ }
+ one := ones[0]
+ if verbose {
+ ones, err := g.List(ctx, namespace, one.Peers()...)
+ if err != nil {
+ return entity.One{}, err
+ }
+ for _, another := range ones {
+ another.Connections = nil
+ for j := range one.Connections {
+ if one.Connections[j].Name == another.Name {
+ one.Connections[j] = entity.One{
+ Relationship: one.Connections[j].Relationship,
+ Type: another.Type,
+ Modified: another.Modified,
}
}
}
}
- results[id] = one
+ } else {
+ for j, v := range one.Connections {
+ v.Name = ""
+ one.Connections[j] = v
+ }
}
- log.Println("results:", results)
- enc := json.NewEncoder(w)
- enc.SetIndent("", " ")
- return enc.Encode(results)
+ return one, nil
}