added: pagination package

This commit is contained in:
nquidox 2025-07-06 18:16:03 +03:00
parent 995ea60f34
commit 6ea5edb017
2 changed files with 57 additions and 0 deletions

22
pkg/pagination/dto.go Normal file
View file

@ -0,0 +1,22 @@
package pagination
type QueryParams struct {
Query string
Page int
Limit int
}
type Response struct {
Pagination Pagination `json:"pagination"`
Data any `json:"data"`
}
type Pagination struct {
Page int `json:"page"`
PerPage int `json:"per_page"`
Total int `json:"total"`
TotalPages int `json:"total_pages"`
HasNext bool `json:"has_next"`
HasPrev bool `json:"has_prev"`
OverallCount int `json:"overall_count,omitempty"`
}

35
pkg/pagination/handler.go Normal file
View file

@ -0,0 +1,35 @@
package pagination
import "math"
type Params struct {
Page int
PerPage int
TotalCount int
TotalPages int
OverallCount int
}
func PrepareParams(params *Params) *Params {
totalPages := int(math.Ceil(float64(params.TotalCount) / float64(params.PerPage)))
params.TotalPages = totalPages
if params.Page > totalPages {
params.Page = totalPages
}
return params
}
func PaginatedResponse(data any, params *Params) *Response {
pagination := Pagination{
Page: params.Page,
PerPage: params.PerPage,
Total: params.TotalCount,
TotalPages: params.TotalPages,
HasNext: params.Page < params.TotalPages,
HasPrev: params.Page > 1,
OverallCount: params.OverallCount,
}
return &Response{Pagination: pagination, Data: data}
}