62 lines
1.0 KiB
Go
62 lines
1.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"net/url"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func GetQueryParam(query url.Values, key string, defaultVal string) string {
|
|
data := query.Get(key)
|
|
|
|
if data == "" {
|
|
return defaultVal
|
|
}
|
|
|
|
return data
|
|
}
|
|
|
|
func GetPaginationParams(query url.Values) (int, int) {
|
|
offset := GetQueryParam(query, "offset", "0")
|
|
limit := GetQueryParam(query, "limit", "10")
|
|
|
|
limitInt, err := strconv.Atoi(limit)
|
|
|
|
if err != nil {
|
|
limitInt = 10
|
|
}
|
|
|
|
offsetInt, err := strconv.Atoi(offset)
|
|
|
|
if err != nil {
|
|
offsetInt = 0
|
|
}
|
|
|
|
return limitInt, offsetInt
|
|
}
|
|
|
|
func GetFilterParams(query url.Values) (string, bool, map[string]string) {
|
|
sort := GetQueryParam(query, "sort", "id:asc")
|
|
filter := GetQueryParam(query, "filter", "")
|
|
|
|
filtersMap := make(map[string]string)
|
|
|
|
filters := strings.Split(filter, "|")
|
|
sorts := strings.Split(sort, ":")
|
|
|
|
for _, filter := range filters {
|
|
tmp := strings.Split(filter, "=")
|
|
if len(tmp) == 2 {
|
|
filtersMap[tmp[0]] = tmp[1]
|
|
}
|
|
}
|
|
|
|
isDesc := false
|
|
|
|
if sorts[1] == "desc" {
|
|
isDesc = true
|
|
}
|
|
|
|
return sorts[0], isDesc, filtersMap
|
|
}
|