pagination.go 730 B

1234567891011121314151617181920212223242526272829303132333435
  1. package repository
  2. import "github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
  3. func paginationResultFromTotal(total int64, params pagination.PaginationParams) *pagination.PaginationResult {
  4. pages := int(total) / params.Limit()
  5. if int(total)%params.Limit() > 0 {
  6. pages++
  7. }
  8. return &pagination.PaginationResult{
  9. Total: total,
  10. Page: params.Page,
  11. PageSize: params.Limit(),
  12. Pages: pages,
  13. }
  14. }
  15. func paginateSlice[T any](items []T, params pagination.PaginationParams) []T {
  16. if len(items) == 0 {
  17. return []T{}
  18. }
  19. offset := params.Offset()
  20. if offset >= len(items) {
  21. return []T{}
  22. }
  23. limit := params.Limit()
  24. end := offset + limit
  25. if end > len(items) {
  26. end = len(items)
  27. }
  28. return items[offset:end]
  29. }