Files
2022-11-17 11:48:58 +01:00

49 lines
1007 B
Go

package pagination
import (
"fmt"
"net/url"
"strings"
)
func CreateHeader(u *url.URL, total int, page int, itemsPerPage int) string {
var lastPage int
if total%itemsPerPage == 0 {
lastPage = total / itemsPerPage
} else {
lastPage = total/itemsPerPage + 1
}
if lastPage == 0 {
lastPage = 1
}
var links []string
if page != 1 || page == lastPage {
links = append(links, formatter(u, "first", itemsPerPage, 1))
}
if page != lastPage {
links = append(links, formatter(u, "last", itemsPerPage, lastPage))
}
if page < lastPage {
links = append(links, formatter(u, "next", itemsPerPage, page+1))
}
if page > 1 {
links = append(links, formatter(u, "prev", itemsPerPage, page-1))
}
return strings.Join(links, ",")
}
func formatter(u *url.URL, rel string, perPage int, page int) string {
q := u.Query()
q.Set("page", fmt.Sprintf("%d", page))
q.Set("per_page", fmt.Sprintf("%d", perPage))
u.RawQuery = q.Encode()
return fmt.Sprintf("<%s>; rel=\"%s\"", u.String(), rel)
}