From 07d7de60d8c3c641a78b88f937fd9269264ac6df Mon Sep 17 00:00:00 2001 From: BroodjeAap Date: Mon, 29 Aug 2022 16:31:06 +0000 Subject: [PATCH] working recursive filters --- main.go | 79 +++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/main.go b/main.go index 3702b43..3d33523 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "fmt" "log" "net/http" @@ -61,10 +60,18 @@ func (web Web) deleteWatch(c *gin.Context) { } type FilterDepth struct { - Filter Filter + Filter *Filter Depth int } +func FilterPrint(filter *Filter, depth int) { + for _, f := range filter.Filters { + log.Println("----") + log.Println(depth, f) + FilterPrint(&f, depth+1) + } +} + func (web Web) viewWatch(c *gin.Context) { id := c.Param("id") @@ -72,47 +79,59 @@ func (web Web) viewWatch(c *gin.Context) { web.db.Model(&Watch{}).First(&watch, id) var filters []Filter - web.db.Model(&Filter{}).Find(&filters) + web.db.Model(&Filter{}).Where("watch_id = ?", watch.ID).Find(&filters) + + filterMap := make(map[uint]*Filter) + for i := range filters { + filterMap[filters[i].ID] = &filters[i] + } queuedFilters := []*Filter{} - filterMap := make(map[uint]*Filter) - for _, filter := range filters { - filterMap[filter.ID] = &filter - if filter.ParentID == nil { - queuedFilters = append(queuedFilters, &filter) - } - s, _ := json.MarshalIndent(filter, "", "\t") - fmt.Println(s) - } - - for _, filter := range filterMap { - if filter.Parent != nil { + for i := range filters { + filter := &filters[i] + if filter.ParentID != nil { parent := filterMap[*filter.ParentID] parent.Filters = append(parent.Filters, *filter) + } else { + queuedFilters = append(queuedFilters, filter) } } - nextFilters := []*Filter{} bftFilters := []FilterDepth{} depth := 0 for len(queuedFilters) > 0 { - for _, f1 := range queuedFilters { - bftFilters = append(bftFilters, FilterDepth{ - Filter: *f1, - Depth: depth, - }) - for _, f2 := range f1.Filters { - nextFilters = append(nextFilters, &f2) - } + filter := queuedFilters[0] + bftFilters = append(bftFilters, FilterDepth{ + Filter: filter, + Depth: depth, + }) + for _, filter := range filter.Filters { + queuedFilters = append(queuedFilters, &filter) } - log.Println(nextFilters) - queuedFilters = nextFilters - log.Println(queuedFilters) - nextFilters = []*Filter{} - log.Println(nextFilters) - depth += 1 + queuedFilters = queuedFilters[1:] } + /* + nextFilters := []*Filter{} + depth := 0 + for len(queuedFilters) > 0 { + for _, f1 := range queuedFilters { + bftFilters = append(bftFilters, FilterDepth{ + Filter: *f1, + Depth: depth, + }) + for _, f2 := range f1.Filters { + nextFilters = append(nextFilters, &f2) + } + } + queuedFilters = nextFilters + nextFilters = []*Filter{} + depth += 1 + } + for _, f := range bftFilters { + FilterPrint(&f.Filter, 0) + } + */ c.HTML(http.StatusOK, "viewWatch", gin.H{ "Watch": watch, "Filters": bftFilters,