
- Add JWT token generation and validation utilities - Add password hashing with bcrypt for secure authentication - Add pagination helper for API responses - Add random string generation for tokens and IDs - Add session management utilities - Add admin user initialization functionality
47 lines
1.0 KiB
Go
47 lines
1.0 KiB
Go
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
|
|
}
|