60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
package utils
|
|
|
|
import (
|
|
"jannex/admin-dashboard-backend/modules/database"
|
|
"jannex/admin-dashboard-backend/modules/structs"
|
|
"math"
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/rs/zerolog/log"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func GetXAuhorizationHeader(c *fiber.Ctx) string {
|
|
return c.GetReqHeaders()[HeaderXAuthorization]
|
|
}
|
|
|
|
func GetXApiKeyHeader(c *fiber.Ctx) string {
|
|
return c.GetReqHeaders()[HeaderXApiKey]
|
|
}
|
|
|
|
func GetSessionExpiresAtTime() time.Time {
|
|
return time.Now().Add(time.Second * SessionExpiresAtTime)
|
|
}
|
|
|
|
func IsPasswordLengthValid(password string) bool {
|
|
lenPassword := len(password)
|
|
|
|
if lenPassword < MinPassword || lenPassword > MaxPassword {
|
|
log.Error().Msg("Password length not valid")
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// GetTotalPages returns total pages for pagination
|
|
// Example whereQuery = "stock_item_id = ?" and args = stockItemId is Where("stock_item_id = ?", stockItemId)
|
|
func GetTotalPages(paginationLimit int, any interface{}, whereQuery interface{}, args ...interface{}) int {
|
|
var totalPages int64
|
|
|
|
database.DB.Model(any).
|
|
Where(whereQuery, args).
|
|
Count(&totalPages)
|
|
|
|
return int(math.Ceil(float64(totalPages) / float64(paginationLimit)))
|
|
}
|
|
|
|
func GetPageOffset(page int, paginationLimit int) int {
|
|
return (page - 1) * paginationLimit
|
|
}
|
|
|
|
func DbPageQuery(query structs.PageQuery, paginationLimit int, result any, orderBy, whereQuery interface{}, args ...interface{}) *gorm.DB {
|
|
return database.DB.Limit(paginationLimit).
|
|
Offset(GetPageOffset(query.Page, paginationLimit)).
|
|
Where(whereQuery, args).
|
|
Order(orderBy).
|
|
Find(result)
|
|
}
|