Created
June 12, 2020 09:28
-
-
Save har07/a763e9e038a1dfc71d8c0494643b4056 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func filterGridParamsPostgre(params *query.GridParams) (state bool, fullQuery string, fullSorter string) { | |
var values []string | |
var query string | |
var sign string | |
var complementArg string | |
var connector string | |
var queries string | |
var fullQueries []string | |
var argument string | |
var sorter []string | |
if len(params.Sort) > 0 { | |
for _, srt := range params.Sort { | |
sorter = append(sorter, `data->`+`'`+srt.Field+`'`+" "+srt.Dir) | |
} | |
fullSorter = strings.Join(sorter, ",") | |
} | |
// if filter is not set, we might want all data to return | |
if params.HasFilter == false && len(params.Filter.Filters) == 0 { | |
return true, "", fullSorter | |
} | |
// if filter is set, but no actual filters, we might to return none | |
if params.HasFilter == true && len(params.Filter.Filters) == 0 { | |
return false, "", fullSorter | |
} | |
for _, gf := range params.Filter.Filters { | |
if len(gf.Filters) > 0 { | |
var parent string | |
parent = gf.Field | |
for _, gf := range gf.Filters { | |
switch gf.Operator { | |
case "eq": | |
queries = `data->` + `'` + parent + `'` + `->>` + `'` + gf.Field + `'` + `=` + `'` + gf.Value.(string) + `'` | |
fullQueries = append(fullQueries, queries) | |
case "contains": | |
queries = `data->` + `'` + parent + `'` + `->>` + `'` + gf.Field + `'` + `like` + `'%` + gf.Value.(string) + `%'` | |
fullQueries = append(fullQueries, queries) | |
case "neq": | |
queries = `data->` + `'` + parent + `'` + `->>` + `'` + gf.Field + `'` + `<>` + `'` + gf.Value.(string) + `'` | |
fullQueries = append(fullQueries, queries) | |
} | |
} | |
} else { | |
q, y, x, z := stateGridFilterPostgre(&gf, params) | |
complementArg = x | |
sign = y | |
query = q | |
connector = z | |
switch gf.Operator { | |
case "inarray": | |
switch val := gf.Value.(type) { | |
case string: | |
values = append(values, val) | |
case []string: | |
values = append(values, val...) | |
} | |
t, _ := json.Marshal(values) | |
argument = strings.Replace(string(t), `"`, "'", -1) | |
queries = query + sign + complementArg + argument | |
fullQueries = append(fullQueries, queries) | |
case "contains": | |
var subQuery string | |
subQuery = query + sign + complementArg + `'%` + gf.Value.(string) + `%'` | |
fullQueries = append(fullQueries, subQuery) | |
default: | |
var subQuery string | |
subQuery = query + sign + complementArg + `'` + gf.Value.(string) + `'` | |
fullQueries = append(fullQueries, subQuery) | |
/* | |
case "eq": | |
var subQuery string | |
subQuery = query + sign + complementArg + `'` + gf.Value.(string) + `'` | |
fullQueries = append(fullQueries, subQuery) | |
case "neq": | |
var subQuery string | |
subQuery = query + sign + complementArg + `'` + gf.Value.(string) + `'` | |
fullQueries = append(fullQueries, subQuery) | |
*/ | |
} | |
} | |
} | |
fullQuery = "AND" + " (" + strings.Join(fullQueries, " "+connector+" ") + ")" | |
return true, fullQuery, fullSorter | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func (h *PolicyHandler) listUsersGrid(c echo.Context) error { | |
tenant := c.Param("tenant") | |
id := c.Param("id") | |
gridParams := c.Get("gridParams").(*query.GridParams) | |
policy, err := h.PolicyStorage.GetPolicy(tenant, id) | |
if err != nil { | |
return response.JSONError(c, http.StatusBadRequest, err) | |
} | |
// because groups can contain users, we list users in groups too | |
groupMembers, _ := h.GroupStorage.GetGroupsMembers(tenant, policy.GroupIDs) | |
groupMembers, _ = array.AddElementStringArray(groupMembers, policy.UserIDs) | |
gridParams.HasFilter = true | |
// gridParams.Filter.Logic = "or" | |
// filter | |
// for _, v := range groupMembers { | |
// gf := &query.GridFilter{} | |
// gf.Field = "id" | |
// gf.Operator = "eq" | |
// gf.Value = v | |
// gridParams.Filter.Filters = append(gridParams.Filter.Filters, *gf) | |
// } | |
gridParams.Filter.Logic = "and" | |
gf := &query.GridFilter{ | |
Field: "id", | |
Operator: "inarray", | |
} | |
var value []string | |
for _, v := range groupMembers { | |
value = append(value, v) | |
} | |
gf.Value = value | |
gridParams.Filter.Filters = append(gridParams.Filter.Filters, *gf) | |
data, count, err := h.ProfileStorage.GridProfiles(tenant, gridParams) | |
if err != nil { | |
return response.JSONError(c, http.StatusBadRequest, err) | |
} | |
return response.JSONGrid(c, http.StatusOK, data, len(data), count) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment