package utils import ( "fmt" "math" "github.com/gofiber/fiber/v2" ) func Pagination(c *fiber.Ctx, total int64, page int, limit int) (*fiber.Map, *fiber.Map) { totalPages := int(math.Ceil(float64(total) / float64(limit))) paginationInformation := fiber.Map{ "page": page, "limit": limit, "total": total, "total_pages": totalPages, } paginationLinks := fiber.Map{ "self": fiber.Map{ "href": fmt.Sprintf("%s?page=%d&limit=%d", c.Path(), page, limit), }, "first": fiber.Map{ "href": fmt.Sprintf("%s?page=1&limit=%d", c.Path(), limit), }, "last": fiber.Map{ "href": fmt.Sprintf("%s?page=%d&limit=%d", c.Path(), totalPages, limit), }, "next": nil, "prev": nil, } if page > 1 { paginationLinks["prev"] = fiber.Map{ "href": fmt.Sprintf("%s?page=%d&limit=%d", c.Path(), page-1, limit), } } if page < totalPages { paginationLinks["next"] = fiber.Map{ "href": fmt.Sprintf("%s?page=%d&limit=%d", c.Path(), page+1, limit), } } return &paginationInformation, &paginationLinks }