feat: add utility functions and helpers

- 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
This commit is contained in:
Björn Benouarets
2025-09-25 23:24:18 +02:00
parent 9a8a93061d
commit f509f6e524
6 changed files with 297 additions and 0 deletions

46
utils/pagination.go Normal file
View File

@@ -0,0 +1,46 @@
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
}