smon/area.go
2024-04-29 08:36:13 +02:00

63 lines
975 B
Go

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
}// }}}