Skip to content

Commit

Permalink
refactor(api) simplify HandleGenericObjects()
Browse files Browse the repository at this point in the history
  • Loading branch information
Cedrok committed Aug 7, 2024
1 parent 17def7d commit c3a9bd8
Showing 1 changed file with 40 additions and 30 deletions.
70 changes: 40 additions & 30 deletions API/controllers/entity.go
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,6 @@ func HandleGenericObjects(w http.ResponseWriter, r *http.Request) {
fmt.Println("FUNCTION CALL: HandleGenericObjects ")
fmt.Println(u.AsteriskLine)
DispRequestMetaData(r)
matchingObjects := []map[string]interface{}{}

// Get user roles for permissions
user := getUserFromToken(w, r)
Expand All @@ -466,35 +465,9 @@ func HandleGenericObjects(w http.ResponseWriter, r *http.Request) {
}

// Get objects
filters := getFiltersFromQueryParams(r)
req := u.FilteredReqFromQueryParams(r.URL)
entities := u.GetEntitiesById(filters.Namespace, filters.Id)

for _, entStr := range entities {
// Get objects
entData, err := models.GetManyObjects(entStr, req, filters, "", user.Roles)
if err != nil {
u.ErrLog("Error while looking for objects at "+entStr, "HandleGenericObjects", err.Message, r)
u.RespondWithError(w, err)
return
}

// Save entity to help delete and respond
for _, obj := range entData {
obj["entity"] = entStr
}

if nLimit, e := strconv.Atoi(filters.Limit); e == nil && nLimit > 0 && req["id"] != nil {
// Get children until limit level (only for GET)
for _, obj := range entData {
obj["children"], err = models.GetHierarchyByName(entStr, obj["id"].(string), nLimit, filters)
if err != nil {
u.ErrLog("Error while getting "+entStr, "GET "+entStr, err.Message, r)
u.RespondWithError(w, err)
}
}
}
matchingObjects = append(matchingObjects, entData...)
matchingObjects, ok := getGenericObjects(w, r, user)
if !ok {
return
}

// Respond
Expand Down Expand Up @@ -532,6 +505,43 @@ func HandleGenericObjects(w http.ResponseWriter, r *http.Request) {
}
}

func getGenericObjects(w http.ResponseWriter, r *http.Request, user *models.Account) ([]map[string]interface{}, bool) {
matchingObjects := []map[string]interface{}{}

filters := getFiltersFromQueryParams(r)
req := u.FilteredReqFromQueryParams(r.URL)
entities := u.GetEntitiesById(filters.Namespace, filters.Id)

for _, entStr := range entities {
// Get objects
entData, err := models.GetManyObjects(entStr, req, filters, "", user.Roles)
if err != nil {
u.ErrLog("Error while looking for objects at "+entStr, "HandleGenericObjects", err.Message, r)
u.RespondWithError(w, err)
return nil, false
}

// Save entity to help delete and respond
for _, obj := range entData {
obj["entity"] = entStr
}

if nLimit, e := strconv.Atoi(filters.Limit); e == nil && nLimit > 0 && req["id"] != nil {
// Get children until limit level (only for GET)
for _, obj := range entData {
obj["children"], err = models.GetHierarchyByName(entStr, obj["id"].(string), nLimit, filters)
if err != nil {
u.ErrLog("Error while getting "+entStr, "GET "+entStr, err.Message, r)
u.RespondWithError(w, err)
}
}
}
matchingObjects = append(matchingObjects, entData...)
}

return matchingObjects, true
}

// swagger:operation POST /api/objects/search Objects HandleComplexFilters
// Get all objects from any entity that match the complex filter. Return as a list.
// Wildcards can be used on any of the parameters present in query with equality and inequality operations.
Expand Down

0 comments on commit c3a9bd8

Please sign in to comment.