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 LEFT 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 AreaCreate(name string) (err error) {// {{{ _, err = service.Db.Conn.Exec(`INSERT INTO area(name) VALUES($1)`, name) return }// }}} func AreaRename(id int, name string) (err error) {// {{{ _, err = service.Db.Conn.Exec(`UPDATE area SET name=$2 WHERE id=$1`, id, name) 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 } // }}}