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 }