30 lines
723 B
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,
|
|
}
|
|
}
|