Path: blob/main/components/public-api-server/pkg/apiv1/pagination.go
2499 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package apiv156import (7db "github.com/gitpod-io/gitpod/components/gitpod-db/go"8v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"9)1011func validatePagination(p *v1.Pagination) *v1.Pagination {12pagination := &v1.Pagination{13PageSize: 25,14Page: 1,15}1617if p == nil {18return pagination19}2021if p.Page > 0 {22pagination.Page = p.Page23}24if p.PageSize > 0 && p.PageSize <= 100 {25pagination.PageSize = p.PageSize26}2728return pagination29}3031func paginationToDB(p *v1.Pagination) db.Pagination {32validated := validatePagination(p)33return db.Pagination{34Page: int(validated.GetPage()),35PageSize: int(validated.GetPageSize()),36}37}3839func pageFromResults[T any](results []T, p *v1.Pagination) []T {40pagination := validatePagination(p)4142size := len(results)4344start := int((pagination.Page - 1) * pagination.PageSize)45end := int(pagination.Page * pagination.PageSize)4647if start > size {48return nil49}5051if end > size {52end = size53}5455return results[start:end]56}575859