36 lines
730 B
Go
36 lines
730 B
Go
package repository
|
|
|
|
import "github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
|
|
|
|
func paginationResultFromTotal(total int64, params pagination.PaginationParams) *pagination.PaginationResult {
|
|
pages := int(total) / params.Limit()
|
|
if int(total)%params.Limit() > 0 {
|
|
pages++
|
|
}
|
|
return &pagination.PaginationResult{
|
|
Total: total,
|
|
Page: params.Page,
|
|
PageSize: params.Limit(),
|
|
Pages: pages,
|
|
}
|
|
}
|
|
|
|
func paginateSlice[T any](items []T, params pagination.PaginationParams) []T {
|
|
if len(items) == 0 {
|
|
return []T{}
|
|
}
|
|
|
|
offset := params.Offset()
|
|
if offset >= len(items) {
|
|
return []T{}
|
|
}
|
|
|
|
limit := params.Limit()
|
|
end := offset + limit
|
|
if end > len(items) {
|
|
end = len(items)
|
|
}
|
|
|
|
return items[offset:end]
|
|
}
|