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) GetClients(siteID model.SiteID) <-chan channel.Result[model.Client] { out := make(chan channel.Result[model.Client], 1000) go func() { defer close(out) for page := 1; ; page++ { resp, err := api.getClients(page, siteID) if err != nil { out <- channel.ResultOf[model.Client](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) getClients(page int, siteID model.SiteID) (*model.PagedResponse[model.Client], error) { req := ezhttp.Request( ezhttp.Template(api.tmpl), ezhttp.Method("GET"), ezhttp.AppendPath(fmt.Sprintf("/openapi/v1/%s/sites/%s/clients", 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.Client]](resp) if err != nil { return nil, err } return handlePagedResponseErrors(api, response, func() (*model.PagedResponse[model.Client], error) { return api.getClients(page, siteID) }) }