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