package sqlserverFlexBetaFlavor import ( "context" "fmt" "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex/v3beta1api" ) type flavorsClientReader interface { GetFlavorsRequest( ctx context.Context, projectId, region string, ) v3beta1api.ApiGetFlavorsRequestRequest } func getAllFlavors(ctx context.Context, client flavorsClientReader, projectId, region string) ( []v3beta1api.ListFlavors, error, ) { getAllFilter := func(_ v3beta1api.ListFlavors) bool { return true } flavorList, err := getFlavorsByFilter(ctx, client, projectId, region, getAllFilter) if err != nil { return nil, err } return flavorList, nil } // getFlavorsByFilter is a helper function to retrieve flavors using a filtern function. // Hint: The API does not have a GetFlavors endpoint, only ListFlavors func getFlavorsByFilter( ctx context.Context, client flavorsClientReader, projectId, region string, filter func(db v3beta1api.ListFlavors) bool, ) ([]v3beta1api.ListFlavors, error) { if projectId == "" || region == "" { return nil, fmt.Errorf("listing v3beta1api flavors: projectId and region are required") } const pageSize = 25 var result = make([]v3beta1api.ListFlavors, 0) for page := int64(1); ; page++ { res, err := client.GetFlavorsRequest(ctx, projectId, region). Page(page).Size(pageSize).Sort(v3beta1api.FLAVORSORT_INDEX_ASC).Execute() if err != nil { return nil, fmt.Errorf("requesting flavors list (page %d): %w", page, err) } // If the API returns no flavors, we have reached the end of the list. if len(res.Flavors) == 0 { break } for _, flavor := range res.Flavors { if filter(flavor) { result = append(result, flavor) } } } return result, nil }