fix #6: getNodes uses env dimensions if no node dimension was given by client request

This commit is contained in:
Frederik Löffert 2016-05-30 18:47:26 +02:00
parent a54924ee8d
commit f9b44183f7
2 changed files with 16 additions and 4 deletions

View File

@ -66,16 +66,28 @@ func (repo *Repo) GetURIs(dimension string, ids []string) map[string]string {
// GetNodes get nodes // GetNodes get nodes
func (repo *Repo) GetNodes(r *requests.Nodes) map[string]*content.Node { func (repo *Repo) GetNodes(r *requests.Nodes) map[string]*content.Node {
return repo.getNodes(r.Nodes, r.Env.Groups) return repo.getNodes(r.Nodes, r.Env)
} }
func (repo *Repo) getNodes(nodeRequests map[string]*requests.Node, groups []string) map[string]*content.Node { func (repo *Repo) getNodes(nodeRequests map[string]*requests.Node, env *requests.Env) map[string]*content.Node {
nodes := map[string]*content.Node{} nodes := map[string]*content.Node{}
path := []*content.Item{} path := []*content.Item{}
groups := env.Groups
for nodeName, nodeRequest := range nodeRequests { for nodeName, nodeRequest := range nodeRequests {
log.Debug(" adding node " + nodeName + " " + nodeRequest.ID) log.Debug(" adding node " + nodeName + " " + nodeRequest.ID)
dimensionNode, ok := repo.Directory[nodeRequest.Dimension] dimensionNode, ok := repo.Directory[nodeRequest.Dimension]
nodes[nodeName] = nil nodes[nodeName] = nil
if !ok && nodeRequest.Dimension == "" {
for _, dimension := range env.Dimensions {
dimensionNode, ok = repo.Directory[dimension]
if ok {
break
}
}
}
if !ok { if !ok {
log.Warning("could not get dimension root node for nodeRequest.Dimension: " + nodeRequest.Dimension) log.Warning("could not get dimension root node for nodeRequest.Dimension: " + nodeRequest.Dimension)
continue continue
@ -144,7 +156,7 @@ func (repo *Repo) GetContent(r *requests.Content) (c *content.SiteContent, err e
node.Dimension = resolvedDimension node.Dimension = resolvedDimension
} }
} }
c.Nodes = repo.getNodes(r.Nodes, r.Env.Groups) c.Nodes = repo.getNodes(r.Nodes, r.Env)
return c, nil return c, nil
} }

View File

@ -10,7 +10,7 @@ type Env struct {
Data interface{} `json:"data"` Data interface{} `json:"data"`
} }
// Node - an abdtract node request, use this one to request navigations // Node - an abstract node request, use this one to request navigations
type Node struct { type Node struct {
// this one should be obvious // this one should be obvious
ID string `json:"id"` ID string `json:"id"`