package main import ( // External re "git.gibonuddevalla.se/go/wrappederror" // Standard "encoding/json" "sort" ) type Area struct { ID int Name string Sections []Section } func AreaRetrieve() (areas []Area, err error) {// {{{ areas = []Area{} row := service.Db.Conn.QueryRow(` SELECT jsonb_agg(jsonsections) FROM ( SELECT a.id, a.name, jsonb_agg( jsonb_build_object( 'id', s.id, 'name', s.name ) ) AS sections FROM area a INNER JOIN section s ON s.area_id = a.id GROUP BY a.id, a.name ) jsonsections`, ) var jsonData []byte err = row.Scan(&jsonData) if err != nil { err = re.Wrap(err) return } err = json.Unmarshal(jsonData, &areas) if err != nil { err = re.Wrap(err) return } return }// }}} func (a Area) SortedSections() []Section {// {{{ sort.SliceStable(a.Sections, func (i, j int) bool { return a.Sections[i].Name < a.Sections[j].Name }) return a.Sections }// }}}