Add filtration for GET /catalog EP.
Filtration enables where passing in template like this isFilter=1&<property_code>=<value1>,<value2>features/feature-catalog-redis
parent
54856057c2
commit
32efec31e2
|
@ -12,8 +12,11 @@ func (h *handlers) GetCatalogItems(c *gin.Context) {
|
|||
limit, _ := strconv.Atoi(c.DefaultQuery("limit", "10"))
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
offset := (page - 1) * limit
|
||||
|
||||
c.JSON(200, services.GetCatalogItems(limit, offset))
|
||||
if c.DefaultQuery("isFilter", "0") == "0" {
|
||||
c.JSON(200, services.GetCatalogItems(limit, offset))
|
||||
return
|
||||
}
|
||||
c.JSON(200, services.FilterCatalogItems(c.Request.URL.Query()))
|
||||
}
|
||||
|
||||
func (h *handlers) GetCatalogItem(c *gin.Context) {
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"fmt"
|
||||
"relynolli-server/internal"
|
||||
"relynolli-server/models"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func retrieveItems(stmt string, structure interface{}) {
|
||||
|
@ -55,3 +56,37 @@ func GetCatalogItemById(id int) (models.CatalogStructWeb, error) {
|
|||
}
|
||||
return retrieveCatalogItems(stmt)[0], nil
|
||||
}
|
||||
|
||||
func FilterCatalogItems(filters map[string][]string) []models.CatalogStructWeb {
|
||||
// Generate stmt
|
||||
propertiesSubStmt := "properties->>'$.%s' = '%s'"
|
||||
|
||||
stmt := "select * from api_catalog where %s"
|
||||
|
||||
sample := "(%s)"
|
||||
|
||||
filterList := [][]string{}
|
||||
|
||||
for key, filter := range filters {
|
||||
if key == "isFilter" {
|
||||
continue
|
||||
}
|
||||
subFilterArr := []string{}
|
||||
values := strings.Split(filter[0], ",")
|
||||
for _, val := range values {
|
||||
subFilterArr = append(subFilterArr, fmt.Sprintf(propertiesSubStmt, key, val))
|
||||
}
|
||||
filterList = append(filterList, subFilterArr)
|
||||
}
|
||||
|
||||
samples := []string{}
|
||||
|
||||
for _, arr := range filterList {
|
||||
samples = append(samples, fmt.Sprintf(sample, strings.Join(arr, " or ")))
|
||||
}
|
||||
|
||||
stmt = fmt.Sprintf(stmt, strings.Join(samples, " and "))
|
||||
println(stmt)
|
||||
|
||||
return retrieveCatalogItems(stmt)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue