diff --git a/server/repo/content/repoNode.go b/server/repo/content/repoNode.go index 9877d2c..e3c7ef0 100644 --- a/server/repo/content/repoNode.go +++ b/server/repo/content/repoNode.go @@ -18,6 +18,7 @@ type RepoNode struct { Content map[string]interface{} `json:"content"` Nodes map[string]*RepoNode `json:"nodes"` LinkIds map[string]map[string]string `json:"linkIds"` // ids to link to + parent *RepoNode // published from - to } @@ -36,6 +37,35 @@ func (node *RepoNode) GetLanguageAndRegionForURI(URI string) (resolved bool, reg return } +func (node *RepoNode) WireParents() { + for _, childNode := range node.Nodes { + childNode.parent = node + childNode.WireParents() + } +} + +func (node *RepoNode) GetPath(region string, language string) map[string]*Item { + path := make(map[string]*Item) + parentNode := node.parent + for parentNode != nil { + path[parentNode.Id] = parentNode.ToItem(region, language) + parentNode = parentNode.parent + } + return path +} + +func (node *RepoNode) ToItem(region string, language string) *Item { + item := NewItem() + item.Id = node.Id + item.Name = node.GetName(language) + item.URI = node.URIs[region][language] + return item +} + +func (node *RepoNode) GetParent() *RepoNode { + return node.parent +} + func (node *RepoNode) AddNode(name string, childNode *RepoNode) *RepoNode { node.Nodes[name] = childNode return node diff --git a/server/repo/content/siteContent.go b/server/repo/content/siteContent.go index 45ae775..94307f8 100644 --- a/server/repo/content/siteContent.go +++ b/server/repo/content/siteContent.go @@ -7,15 +7,14 @@ const ( ) type SiteContent struct { - Status int `json:"status"` - Region string `json:"region"` - Language string `json:"language"` - Content struct { - Item *Item `json:"item"` - Data interface{} `json:"data"` - } `json:"content"` - URIs map[string]string `json:"URIs"` - Nodes map[string]*Node `json:"nodes"` + Status int `json:"status"` + Region string `json:"region"` + Language string `json:"language"` + Item *Item `json:"item"` + Data interface{} `json:"data"` + Path map[string]*Item `json:"path"` + URIs map[string]string `json:"URIs"` + Nodes map[string]*Node `json:"nodes"` } func NewSiteContent() *SiteContent { diff --git a/server/repo/repo.go b/server/repo/repo.go index 01f3332..e699e28 100644 --- a/server/repo/repo.go +++ b/server/repo/repo.go @@ -23,14 +23,10 @@ func NewRepo(server string) *Repo { } func (repo *Repo) ResolveContent(URI string) (resolved bool, region string, language string, repoNode *content.RepoNode) { - if node, ok := repo.URIDirectory[URI]; ok { + if repoNode, ok := repo.URIDirectory[URI]; ok { resolved = true - resolvedURI, region, language := node.GetLanguageAndRegionForURI(URI) - if resolvedURI { - return true, region, language, node - } else { - resolved = false - } + _, region, language := repoNode.GetLanguageAndRegionForURI(URI) + return true, region, language, repoNode } else { resolved = false } @@ -53,9 +49,7 @@ func (repo *Repo) GetURI(region string, language string, id string) string { func (repo *Repo) GetNode(repoNode *content.RepoNode, expanded bool, mimeTypes []string, path []string, region string, language string) *content.Node { node := content.NewNode() - node.Item.Name = repoNode.GetName(language) - node.Item.URI = repoNode.URIs[region][language] - //fmt.Println(region, language, repoNode.URIs[region][language], repoNode.URIs) + node.Item = repoNode.ToItem(region, language) for id, childNode := range repoNode.Nodes { if expanded && !childNode.Hidden && childNode.IsOneOfTheseMimeTypes(mimeTypes) { // || in path and in region mimes @@ -73,9 +67,8 @@ func (repo *Repo) GetContent(r *requests.Content) *content.SiteContent { c.Region = region c.Language = language c.Status = content.STATUS_OK - c.Content.Item = content.NewItem() - c.Content.Item.Id = node.Id - c.Content.Item.Name = node.GetName(language) + c.Item = node.ToItem(region, language) + c.Path = node.GetPath(region, language) for treeName, treeRequest := range r.Nodes { // fmt.Println("getting tree", treeName, treeRequest) c.Nodes[treeName] = repo.GetNode(repo.Directory[treeRequest.Id], treeRequest.Expand, treeRequest.MimeTypes, []string{}, region, language) @@ -102,6 +95,7 @@ func (repo *Repo) builDirectory(dirNode *content.RepoNode) { func (repo *Repo) Update() { repo.Node = content.NewRepoNode() utils.Get(repo.server, repo.Node) + repo.Node.WireParents() repo.Directory = make(map[string]*content.RepoNode) repo.URIDirectory = make(map[string]*content.RepoNode) repo.builDirectory(repo.Node) diff --git a/server/server.go b/server/server.go index 10c3611..bf162c2 100644 --- a/server/server.go +++ b/server/server.go @@ -20,13 +20,11 @@ func contentHandler(w http.ResponseWriter, r *http.Request) { func uriHandler(w http.ResponseWriter, r *http.Request) { parts := strings.Split(r.RequestURI, "/") - //fmt.Println(parts, len(parts)) if len(parts) == 5 { utils.JsonResponse(w, contentRepo.GetURI(parts[2], parts[3], parts[4])) } else { wtfHandler(w, r) } - } func wtfHandler(w http.ResponseWriter, r *http.Request) { diff --git a/server/utils/utils.go b/server/utils/utils.go index d873695..597e20e 100644 --- a/server/utils/utils.go +++ b/server/utils/utils.go @@ -20,7 +20,7 @@ func toJson(obj interface{}) string { } } -func extractJsonFromRequest(r *http.Request) []byte { +func extractJsonFromRequestFileUpload(r *http.Request) []byte { file, _, err := r.FormFile("request") if err != nil { fmt.Println(err, r) @@ -31,6 +31,11 @@ func extractJsonFromRequest(r *http.Request) []byte { } return data } +func extractJsonFromRequest(r *http.Request) []byte { + + bytes := []byte(r.PostFormValue("request")) + return bytes +} func PopulateRequest(r *http.Request, obj interface{}) { json.Unmarshal(extractJsonFromRequest(r), obj)