omada-api/device.go
2025-02-12 13:25:01 +01:00

64 lines
1.4 KiB
Go

package omadaapi
import (
"fmt"
"strconv"
"git.tordarus.net/tordarus/channel"
"git.tordarus.net/tordarus/ezhttp"
"git.tordarus.net/tordarus/omada-api/model"
)
func (api *Api) GetDevices(siteID model.SiteID) <-chan channel.Result[model.Device] {
out := make(chan channel.Result[model.Device], 1000)
go func() {
defer close(out)
for page := 1; ; page++ {
resp, err := api.getDevices(page, siteID)
if err != nil {
out <- channel.ResultOf[model.Device](nil, err)
return
}
for _, v := range resp.Result.Data {
out <- channel.ResultOfValue(v, nil)
}
if resp.Result.CurrentPage*resp.Result.CurrentSize >= resp.Result.TotalRows {
break
}
}
}()
return out
}
func (api *Api) getDevices(page int, siteID model.SiteID) (*model.PagedResponse[model.Device], error) {
req := ezhttp.Request(
ezhttp.Template(api.tmpl),
ezhttp.Method("GET"),
ezhttp.AppendPath(fmt.Sprintf("/openapi/v1/%s/sites/%s/devices", api.config.OmadaID, siteID)),
ezhttp.Query(
"page", strconv.Itoa(page),
"pageSize", "100",
),
)
resp, err := api.doRequest(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
response, err := ezhttp.ParseJsonResponse[model.PagedResponse[model.Device]](resp)
if err != nil {
return nil, err
}
return handlePagedResponseErrors(api, response, func() (*model.PagedResponse[model.Device], error) {
return api.getDevices(page, siteID)
})
}