diff --git a/apiserver/pkg/application/application.go b/apiserver/pkg/application/application.go index 662a01a07..6b6a77c5f 100644 --- a/apiserver/pkg/application/application.go +++ b/apiserver/pkg/application/application.go @@ -308,22 +308,11 @@ func ListApplicationMeatadatas(ctx context.Context, c dynamic.Interface, input g filtered = append(filtered, m) } totalCount := len(filtered) - - end := page * pageSize - if end > totalCount { - end = totalCount - } - start := (page - 1) * pageSize - if start < totalCount { - filtered = filtered[start:end] - } else { - filtered = []generated.PageNode{} - } - + start, end := common.PagePosition(page, pageSize, totalCount) return &generated.PaginatedResult{ TotalCount: totalCount, HasNextPage: end < totalCount, - Nodes: filtered, + Nodes: filtered[start:end], Page: &page, PageSize: &pageSize, }, nil diff --git a/apiserver/pkg/common/common.go b/apiserver/pkg/common/common.go index 6ba2e3f92..ffe16345c 100644 --- a/apiserver/pkg/common/common.go +++ b/apiserver/pkg/common/common.go @@ -198,3 +198,26 @@ func SetCreator(ctx context.Context, common *v1alpha1.CommonSpec) { currentUser, _ := ctx.Value(auth.UserNameContextKey).(string) common.Creator = currentUser } + +func PagePosition(page, size, total int) (int, int) { + // if pageSize is -1 which means unlimited pageSize,return all + if size == UnlimitedPageSize { + page = 1 + size = total + } + if page <= 0 { + page = 1 + } + if size <= 0 { + size = 10 + } + start := (page - 1) * size + if start > total { + start = total + } + end := page * size + if end > total { + end = total + } + return start, end +} diff --git a/apiserver/pkg/dataset/dataset.go b/apiserver/pkg/dataset/dataset.go index a8b299ecd..21e275a57 100644 --- a/apiserver/pkg/dataset/dataset.go +++ b/apiserver/pkg/dataset/dataset.go @@ -159,20 +159,11 @@ func ListDatasets(ctx context.Context, c dynamic.Interface, input *generated.Lis result = append(result, uu) } total := len(result) - end := page * size - if end > total { - end = total - } - start := (page - 1) * size - if start < total { - result = result[start:end] - } else { - result = make([]generated.PageNode, 0) - } + start, end := common.PagePosition(page, size, total) return &generated.PaginatedResult{ TotalCount: total, HasNextPage: end < total, - Nodes: result, + Nodes: result[start:end], Page: &page, PageSize: &size, }, nil diff --git a/apiserver/pkg/datasource/datasource.go b/apiserver/pkg/datasource/datasource.go index 42cc5d90f..f3cd064e3 100644 --- a/apiserver/pkg/datasource/datasource.go +++ b/apiserver/pkg/datasource/datasource.go @@ -302,34 +302,21 @@ func ListDatasources(ctx context.Context, c dynamic.Interface, input generated.L return datasList.Items[i].GetCreationTimestamp().After(datasList.Items[j].GetCreationTimestamp().Time) }) - totalCount := len(datasList.Items) - - result := make([]generated.PageNode, 0, pageSize) + result := make([]generated.PageNode, 0, len(datasList.Items)) for _, u := range datasList.Items { m := datasource2model(&u) // filter based on `keyword` - if keyword != "" { - if !strings.Contains(m.Name, keyword) && !strings.Contains(*m.DisplayName, keyword) { - continue - } + if keyword != "" && !strings.Contains(m.Name, keyword) && !strings.Contains(*m.DisplayName, keyword) { + continue } result = append(result, m) - - // break if page size matches - if len(result) == pageSize { - break - } } - - end := page * pageSize - if end > totalCount { - end = totalCount - } - + totalCount := len(result) + start, end := common.PagePosition(page, pageSize, totalCount) return &generated.PaginatedResult{ TotalCount: totalCount, HasNextPage: end < totalCount, - Nodes: result, + Nodes: result[start:end], }, nil } diff --git a/apiserver/pkg/embedder/embedder.go b/apiserver/pkg/embedder/embedder.go index 4cac4fe03..bfc00630d 100644 --- a/apiserver/pkg/embedder/embedder.go +++ b/apiserver/pkg/embedder/embedder.go @@ -308,45 +308,21 @@ func ListEmbedders(ctx context.Context, c dynamic.Interface, input generated.Lis return us.Items[i].GetCreationTimestamp().After(us.Items[j].GetCreationTimestamp().Time) }) - totalCount := len(us.Items) - - // if pageSize is -1 which means unlimited pagesize,return all - if pageSize == common.UnlimitedPageSize { - page = 1 - pageSize = totalCount - } - - result := make([]generated.PageNode, 0, pageSize) - pageStart := (page - 1) * pageSize - for index, u := range us.Items { - // skip if smaller than the start index - if index < pageStart { - continue - } + result := make([]generated.PageNode, 0, len(us.Items)) + for _, u := range us.Items { m := Embedder2model(ctx, c, &u) // filter based on `keyword` - if keyword != "" { - if !strings.Contains(m.Name, keyword) && !strings.Contains(*m.DisplayName, keyword) { - continue - } + if keyword != "" && !strings.Contains(m.Name, keyword) && !strings.Contains(*m.DisplayName, keyword) { + continue } result = append(result, opts.ConvertFunc(m)) - - // break if page size matches - if len(result) == pageSize { - break - } } - - end := page * pageSize - if end > totalCount { - end = totalCount - } - + totalCount := len(result) + start, end := common.PagePosition(page, pageSize, totalCount) return &generated.PaginatedResult{ TotalCount: totalCount, HasNextPage: end < totalCount, - Nodes: result, + Nodes: result[start:end], }, nil } diff --git a/apiserver/pkg/knowledgebase/knowledgebase.go b/apiserver/pkg/knowledgebase/knowledgebase.go index 2dd83ebcb..70fc06dc9 100644 --- a/apiserver/pkg/knowledgebase/knowledgebase.go +++ b/apiserver/pkg/knowledgebase/knowledgebase.go @@ -290,13 +290,10 @@ func ListKnowledgeBases(ctx context.Context, c dynamic.Interface, input generate } totalCount := len(filteredResult) - end := page * pageSize - if end > totalCount { - end = totalCount - } + start, end := common.PagePosition(page, pageSize, totalCount) return &generated.PaginatedResult{ TotalCount: totalCount, HasNextPage: end < totalCount, - Nodes: filteredResult[(page-1)*pageSize : end], + Nodes: filteredResult[start:end], }, nil } diff --git a/apiserver/pkg/llm/llm.go b/apiserver/pkg/llm/llm.go index ca16f7d34..2f8bc578b 100644 --- a/apiserver/pkg/llm/llm.go +++ b/apiserver/pkg/llm/llm.go @@ -134,48 +134,20 @@ func ListLLMs(ctx context.Context, c dynamic.Interface, input generated.ListComm return us.Items[i].GetCreationTimestamp().After(us.Items[j].GetCreationTimestamp().Time) }) - totalCount := len(us.Items) - - // if pageSize is -1 which means unlimited pagesize,return all - if pageSize == common.UnlimitedPageSize { - page = 1 - pageSize = totalCount - } - - result := make([]generated.PageNode, 0, pageSize) - pageStart := (page - 1) * pageSize - - for index, u := range us.Items { - // skip if smaller than the start index - if index < pageStart { - continue - } + result := make([]generated.PageNode, 0, len(us.Items)) + for _, u := range us.Items { m := LLM2model(ctx, c, &u) - // filter based on `keyword` - if keyword != "" { - if !strings.Contains(m.Name, keyword) && !strings.Contains(*m.DisplayName, keyword) { - continue - } + if keyword != "" && !strings.Contains(m.Name, keyword) && !strings.Contains(*m.DisplayName, keyword) { + continue } - - // convertFunc result = append(result, opts.ConvertFunc(m)) - - // break if page size matches - if len(result) == pageSize { - break - } } - - end := page * pageSize - if end > totalCount { - end = totalCount - } - + totalCount := len(result) + pageStart, end := common.PagePosition(page, pageSize, totalCount) return &generated.PaginatedResult{ TotalCount: totalCount, HasNextPage: end < totalCount, - Nodes: result, + Nodes: result[pageStart:end], }, nil } diff --git a/apiserver/pkg/model/model.go b/apiserver/pkg/model/model.go index 4b43bc2e0..bfa7962d1 100644 --- a/apiserver/pkg/model/model.go +++ b/apiserver/pkg/model/model.go @@ -238,17 +238,7 @@ func ListModels(ctx context.Context, c dynamic.Interface, input generated.ListMo result = append(result, m) } totalCount := len(result) - pageStart := (page - 1) * pageSize - if pageStart < 0 { - pageStart = 0 - } - if pageStart > totalCount { - pageStart = totalCount - } - end := page * pageSize - if end > totalCount { - end = totalCount - } + pageStart, end := common.PagePosition(page, pageSize, totalCount) return &generated.PaginatedResult{ TotalCount: totalCount, HasNextPage: end < totalCount, diff --git a/apiserver/pkg/versioneddataset/versioned_dataset.go b/apiserver/pkg/versioneddataset/versioned_dataset.go index 06ee1769c..d36fbf6eb 100644 --- a/apiserver/pkg/versioneddataset/versioned_dataset.go +++ b/apiserver/pkg/versioneddataset/versioned_dataset.go @@ -243,20 +243,11 @@ func ListVersionedDatasets(ctx context.Context, c dynamic.Interface, input *gene result = append(result, uu) } total := len(result) - end := page * size - if end > total { - end = total - } - start := (page - 1) * size - if start < total { - result = result[start:end] - } else { - result = make([]generated.PageNode, 0) - } + start, end := common.PagePosition(page, size, total) return &generated.PaginatedResult{ TotalCount: total, HasNextPage: end < total, - Nodes: result, + Nodes: result[start:end], Page: &page, PageSize: &size, }, nil diff --git a/apiserver/pkg/worker/worker.go b/apiserver/pkg/worker/worker.go index 372eb24d5..6fc963379 100644 --- a/apiserver/pkg/worker/worker.go +++ b/apiserver/pkg/worker/worker.go @@ -345,51 +345,25 @@ func ListWorkers(ctx context.Context, c dynamic.Interface, input generated.ListW return us.Items[i].GetCreationTimestamp().After(us.Items[j].GetCreationTimestamp().Time) }) - totalCount := len(us.Items) - - // if pageSize is -1 which means unlimited pagesize,return all - if pageSize == common.UnlimitedPageSize { - page = 1 - pageSize = totalCount - } - - result := make([]generated.PageNode, 0, pageSize) - pageStart := (page - 1) * pageSize - for index, u := range us.Items { - // skip if smaller than the start index - if index < pageStart { - continue - } + result := make([]generated.PageNode, 0, len(us.Items)) + for _, u := range us.Items { m := Worker2model(ctx, c, &u) // filter based on `keyword` - if keyword != "" { - if !strings.Contains(m.Name, keyword) && !strings.Contains(*m.DisplayName, keyword) { - continue - } + if keyword != "" && !strings.Contains(m.Name, keyword) && !strings.Contains(*m.DisplayName, keyword) { + continue } - if modelTypes != "" { - if !strings.Contains(m.ModelTypes, modelTypes) { - continue - } + // filter based on `modelTypes` + if modelTypes != "" && !strings.Contains(m.ModelTypes, modelTypes) { + continue } - result = append(result, opts.ConvertFunc(m)) - - // break if page size matches - if len(result) == pageSize { - break - } } - - end := page * pageSize - if end > totalCount { - end = totalCount - } - + totalCount := len(result) + start, end := common.PagePosition(page, pageSize, totalCount) return &generated.PaginatedResult{ TotalCount: totalCount, HasNextPage: end < totalCount, - Nodes: result, + Nodes: result[start:end], }, nil }