in api/internal/handler/data_loader/route_export.go [469:503]
func (h *Handler) ParseRouteUpstream(c droplet.Context, route *entity.Route) (interface{}, error) {
// The upstream data of route has the highest priority.
// If there is one, it will be used directly.
// If there is no route, the upstream data of service will be used.
// If there is no route, the upstream data of service will not be used normally.
if route.Upstream != nil {
return route.Upstream, nil
} else if route.UpstreamID != nil && route.Upstream == nil {
upstreamID := utils.InterfaceToString(route.UpstreamID)
upstream, err := h.upstreamStore.Get(c.Context(), upstreamID)
if err != nil {
if err == data.ErrNotFound {
return nil, fmt.Errorf(consts.IDNotFound, "upstream", route.UpstreamID)
}
return nil, err
}
return upstream, nil
} else if route.UpstreamID == nil && route.Upstream == nil && route.ServiceID != nil {
_service := service.(*entity.Service)
if _service.Upstream != nil {
return _service.Upstream, nil
} else if _service.Upstream == nil && _service.UpstreamID != nil {
upstreamID := utils.InterfaceToString(_service.UpstreamID)
upstream, err := h.upstreamStore.Get(c.Context(), upstreamID)
if err != nil {
if err == data.ErrNotFound {
return nil, fmt.Errorf(consts.IDNotFound, "upstream", _service.UpstreamID)
}
return nil, err
}
return upstream, nil
}
}
return nil, nil
}