in api/internal/handler/route/route.go [216:286]
func (h *Handler) List(c droplet.Context) (interface{}, error) {
input := c.Input().(*ListInput)
labelMap, err := utils.GenLabelMap(input.Label)
if err != nil {
return &data.SpecCodeResponse{StatusCode: http.StatusBadRequest},
fmt.Errorf("%s: \"%s\"", err.Error(), input.Label)
}
ret, err := h.routeStore.List(c.Context(), store.ListInput{
Predicate: func(obj interface{}) bool {
if input.Name != "" && !strings.Contains(obj.(*entity.Route).Name, input.Name) {
return false
}
if input.URI != "" && !uriContains(obj.(*entity.Route), input.URI) {
return false
}
if input.Label != "" && !utils.LabelContains(obj.(*entity.Route).Labels, labelMap) {
return false
}
if input.Status != "" && strconv.Itoa(int(obj.(*entity.Route).Status)) != input.Status {
return false
}
if input.Host != "" && !strings.Contains(obj.(*entity.Route).Host, input.Host) {
return false
}
if input.Desc != "" && !strings.Contains(obj.(*entity.Route).Desc, input.Desc) {
return false
}
if obj != nil && obj.(*entity.Route) != nil && obj.(*entity.Route).ID != nil && input.ID != "" {
if !strings.Contains(utils.InterfaceToString(obj.(*entity.Route).ID), input.ID) {
return false // IDs do not match, so object should not be included in the filtered result
}
}
return true
},
Format: func(obj interface{}) interface{} {
route := obj.(*entity.Route)
if route.Upstream != nil && route.Upstream.Nodes != nil {
route.Upstream.Nodes = entity.NodesFormat(route.Upstream.Nodes)
}
return route
},
PageSize: input.PageSize,
PageNumber: input.PageNumber,
})
if err != nil {
return nil, err
}
//format respond
var route *entity.Route
for i, item := range ret.Rows {
route = item.(*entity.Route)
id := utils.InterfaceToString(route.ID)
script, _ := h.scriptStore.Get(c.Context(), id)
if script != nil {
route.Script = script.(*entity.Script).Script
}
ret.Rows[i] = route
}
return ret, nil
}