transmet/tags/tags.go

46 lines
1.1 KiB
Go

package tags
import (
"database/sql"
_ "github.com/lib/pq"
"fmt"
)
type Tag struct {
Id int
Name string
Parent sql.NullInt64
Children []*Tag
}
var Tags []*Tag
func LoadTags(db *sql.DB) {
Tags = []*Tag{}
//rows, err := db.Query("select tags.tag_id, tags.name, tags.parent_id, array_agg(distinct(parent_of.tag_id)) as children from tags left join tags as parent_of on parent_of.parent_id=tags.tag_id group by tags.tag_id")
rows, err := db.Query("select tags.tag_id, tags.name, tags.parent_id from tags order by tag_id,tags.parent_id desc")
if err != nil {
fmt.Println("DB Error loading tags:", err)
return
}
var flatMap map[int]*Tag = make(map[int]*Tag)
for rows.Next() {
tag := &Tag{Children: []*Tag{}}
err = rows.Scan(&tag.Id, &tag.Name, &tag.Parent)
if err != nil {
fmt.Println("tags DB Error: ", err)
}
flatMap[tag.Id] = tag
if tag.Parent.Valid {
pid := int(tag.Parent.Int64)
flatMap[pid].Children = append(flatMap[pid].Children, tag)
} else {
Tags = append(Tags, tag)
}
}
}