gis/internal/transport/http/pagination.go

30 lines
723 B
Go

package http
// Paginated is the generic list response envelope.
type Paginated[T any] struct {
Data []T `json:"data"`
Page int `json:"page"`
PageSize int `json:"page_size"`
Total int `json:"total"`
TotalPages int `json:"total_pages"`
}
// newPaginated builds a Paginated envelope, computing total pages and
// normalizing a nil slice to an empty array.
func newPaginated[T any](items []T, page, pageSize, total int) Paginated[T] {
totalPages := 0
if pageSize > 0 {
totalPages = (total + pageSize - 1) / pageSize
}
if items == nil {
items = []T{}
}
return Paginated[T]{
Data: items,
Page: page,
PageSize: pageSize,
Total: total,
TotalPages: totalPages,
}
}