Exemplo n.º 1
0
        private async Task <List <GlobalSearchHit> > SearchForAddresses(string searchString, int maxHits)
        {
            var query = new SearchParameters
            {
                Text           = searchString,
                QueryBy        = "roadNameHouseNumber,postDistrictCode,postDistrictName,townName",
                PerPage        = maxHits.ToString(),
                LimitHits      = maxHits.ToString(),
                QueryByWeights = "5,3,3,2"
            };

            var searchResult = await _typesenseClient.Search <OfficialAccessAddressSearchHit>("Addresses", query).ConfigureAwait(false);

            List <GlobalSearchHit> result = new();

            foreach (var hit in searchResult.Hits)
            {
                var xEtrs = Double.Parse(hit.Document.EastCoordinate, CultureInfo.InvariantCulture);
                var yEtrs = Double.Parse(hit.Document.NorthCoordinate, CultureInfo.InvariantCulture);

                var wgs84Coord = UTM32WGS84Converter.ConvertFromUTM32NToWGS84(xEtrs, yEtrs);

                var globalHit = new GlobalSearchHit(hit.Document.Id, "accessAddress", GetAddressLabel(hit.Document), wgs84Coord[0], wgs84Coord[1], xEtrs, yEtrs);

                result.Add(globalHit);
            }

            return(result);
        }
Exemplo n.º 2
0
        public void TestWgs84ConversionAlgorithm()
        {
            var result = UTM32WGS84Converter.ConvertFromUTM32NToWGS84(552000, 6190000);

            Math.Round(result[0], 2).Should().Be(9.83);
            Math.Round(result[1], 2).Should().Be(55.85);
        }
Exemplo n.º 3
0
        public void TestLineStringConverter()
        {
            string[] lines = new string[] { "[[552000,6190000], [552001,6190001]]", "[[552000,6190000], [552001,6190001]]" };

            var result = UTM32WGS84Converter.ConvertGeoJsonLineStringsToWgs84(lines);

            result.Length.Should().Be(2);
            result[0].Should().Contain("9.83");
            result[0].Should().NotContain("{");
        }
Exemplo n.º 4
0
        private async Task <List <GlobalSearchHit> > SearchForNodes(string searchString, int maxHits)
        {
            var query = new SearchParameters
            {
                Text          = searchString,
                QueryBy       = "name",
                PerPage       = maxHits.ToString(),
                LimitHits     = maxHits.ToString(),
                NumberOfTypos = "0"
            };

            var searchResult = await _typesenseClient.Search <RouteNodeSearchHit>("RouteNodes", query).ConfigureAwait(false);

            RouteNetworkElementIdList routeNodeIds = new();

            foreach (var hit in searchResult.Hits)
            {
                routeNodeIds.Add(hit.Document.Id);
            }

            var routeNodeQueryResult = await _queryDispatcher.HandleAsync <GetRouteNetworkDetails, Result <GetRouteNetworkDetailsResult> >(
                new GetRouteNetworkDetails(routeNodeIds)
            {
                RouteNetworkElementFilter = new RouteNetworkElementFilterOptions()
                {
                    IncludeCoordinates = true
                }
            }
                ).ConfigureAwait(false);

            List <GlobalSearchHit> result = new();

            if (routeNodeQueryResult.IsSuccess)
            {
                foreach (var hit in searchResult.Hits)
                {
                    var etrsCoord  = ConvertPointGeojsonToCoordArray(routeNodeQueryResult.Value.RouteNetworkElements[hit.Document.Id].Coordinates);
                    var wgs84Coord = UTM32WGS84Converter.ConvertFromUTM32NToWGS84(etrsCoord[0], etrsCoord[1]);

                    var globalHit = new GlobalSearchHit(hit.Document.Id, "routeNode", hit.Document.Name, wgs84Coord[0], wgs84Coord[1], etrsCoord[0], etrsCoord[1]);
                    result.Add(globalHit);
                }
            }

            return(result);
        }
        public SpanEquipmentPassageViewLineInfoType(ILogger <SpanEquipmentPassageViewLineInfoType> logger)
        {
            Field(x => x.SpanSegmentId, type: typeof(IdGraphType)).Description("Span segment id");
            Field(x => x.From, type: typeof(StringGraphType)).Description("From");
            Field(x => x.To, type: typeof(StringGraphType)).Description("To");
            Field(x => x.ConduitId, type: typeof(StringGraphType)).Description("Span equipment name");
            Field(x => x.OuterConduitInfo, type: typeof(StringGraphType)).Description("Outer conduit info");
            Field(x => x.InnerConduitInfo, type: typeof(StringGraphType)).Description("Inner conduit info");

            Field <FloatGraphType>(
                name: "SegmentLength",
                description: "Segment length",
                resolve: context =>
            {
                return(Math.Round(context.Source.SegmentLength, 2));
            }
                );

            Field <FloatGraphType>(
                name: "CumulativeDistance",
                description: "Cumulative distance",
                resolve: context =>
            {
                return(Math.Round(context.Source.CumulativeDistance, 2));
            }
                );

            Field(x => x.RouteSegmentIds, type: typeof(ListGraphType <IdGraphType>)).Description("Route network segment ids of the span segment traversal");

            Field <ListGraphType <StringGraphType> >(
                name: "RouteSegmentGeometries",
                description: "Route network segment geometries of the span segment traversal",
                resolve: context =>
            {
                return(UTM32WGS84Converter.ConvertGeoJsonLineStringsToWgs84(context.Source.RouteSegmentGeometries));
            }
                );
        }
        public static AccessAddressData MapAccessAddress(Guid accessAddressId, GetAddressInfoResult addressQueryResult)
        {
            var searchAccessAddress = addressQueryResult.AccessAddresses[accessAddressId];

            var wgs84Coord = UTM32WGS84Converter.ConvertFromUTM32NToWGS84(searchAccessAddress.AddressPoint.X, searchAccessAddress.AddressPoint.Y);

            List <UnitAddress> unitAddresses = new();

            foreach (var unitAddress in addressQueryResult.UnitAddresses)
            {
                if (unitAddress.AccessAddressId == searchAccessAddress.Id)
                {
                    unitAddresses.Add(unitAddress);
                }
            }

            var mappedAccessAddress = new AccessAddressData()
            {
                Id               = searchAccessAddress.Id,
                ExternalId       = searchAccessAddress.ExternalId,
                HouseNumber      = searchAccessAddress.HouseNumber,
                PostDistrictCode = searchAccessAddress.PostDistrictCode,
                PostDistrict     = searchAccessAddress.PostDistrict,
                RoadCode         = searchAccessAddress.RoadCode,
                RoadName         = searchAccessAddress.RoadName,
                TownName         = searchAccessAddress.TownName,
                MunicipalCode    = searchAccessAddress.MunicipalCode,
                Xetrs            = searchAccessAddress.AddressPoint.X,
                Yetrs            = searchAccessAddress.AddressPoint.Y,
                Xwgs             = wgs84Coord[0],
                Ywgs             = wgs84Coord[1],
                UnitAddresses    = unitAddresses
            };

            return(mappedAccessAddress);
        }
Exemplo n.º 7
0
        public UtilityNetworkServiceQueries(ILogger <UtilityNetworkServiceQueries> logger, IQueryDispatcher queryDispatcher)
        {
            Description = "GraphQL API for querying data owned by utility network service";

            FieldAsync <ListGraphType <ManufacturerType> >(
                name: "manufacturers",
                description: "Retrieve all manufacturers.",
                resolve: async context =>
            {
                var queryResult = await queryDispatcher.HandleAsync <GetManufacturer, Result <LookupCollection <Manufacturer> > >(new GetManufacturer());

                return(queryResult.Value);
            }
                );

            FieldAsync <ListGraphType <SpanEquipmentSpecificationType> >(
                name: "spanEquipmentSpecifications",
                description: "Retrieve all span equipment specifications.",
                resolve: async context =>
            {
                var queryResult = await queryDispatcher.HandleAsync <GetSpanEquipmentSpecifications,
                                                                     Result <LookupCollection <SpanEquipmentSpecification> > >(new GetSpanEquipmentSpecifications());

                return(queryResult.Value.OrderBy(s => s.Description));
            }
                );

            FieldAsync <ListGraphType <TerminalEquipmentSpecificationType> >(
                name: "terminalEquipmentSpecifications",
                description: "Retrieve all terminal equipment specifications.",
                resolve: async context =>
            {
                var queryResult = await queryDispatcher.HandleAsync <GetTerminalEquipmentSpecifications,
                                                                     Result <LookupCollection <TerminalEquipmentSpecification> > >(new GetTerminalEquipmentSpecifications());

                return(queryResult.Value.OrderBy(s => s.Description));
            }
                );

            FieldAsync <ListGraphType <NodeContainerSpecificationType> >(
                name: "nodeContainerSpecifications",
                description: "Retrieve all node container specifications.",
                resolve: async context =>
            {
                var queryResult = await queryDispatcher.HandleAsync <GetNodeContainerSpecifications,
                                                                     Result <LookupCollection <NodeContainerSpecification> > >(new GetNodeContainerSpecifications());

                return(queryResult.Value.OrderBy(s => s.Description));
            }
                );

            FieldAsync <ListGraphType <RackSpecificationType> >(
                name: "rackSpecifications",
                description: "Retrieve all rack specifications.",
                resolve: async context =>
            {
                var queryResult = await queryDispatcher.HandleAsync <GetRackSpecifications, Result <LookupCollection <RackSpecification> > >(new GetRackSpecifications());

                return(queryResult.Value.OrderBy(s => s.Description));
            }
                );

            FieldAsync <SpanSegmentTraceType>(
                name: "spanSegmentTrace",
                description: "Trace a specific span segment",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "spanSegmentId"
            }
                    ),
                resolve: async context =>
            {
                var spanSegmentId = context.GetArgument <Guid>("spanSegmentId");

                // Get equipment information
                var equipmentQueryResult = await queryDispatcher.HandleAsync <GetEquipmentDetails, FluentResults.Result <GetEquipmentDetailsResult> >(
                    new GetEquipmentDetails(new EquipmentIdList()
                {
                    spanSegmentId
                })
                {
                    EquipmentDetailsFilter = new EquipmentDetailsFilterOptions {
                        IncludeRouteNetworkTrace = true
                    }
                }
                    );

                if (equipmentQueryResult.IsFailed)
                {
                    foreach (var error in equipmentQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                if (equipmentQueryResult.Value.SpanEquipment == null || equipmentQueryResult.Value.SpanEquipment.Count == 0)
                {
                    context.Errors.Add(new ExecutionError($"Cannot find any span equipment containing a span segment with id: {spanSegmentId}"));
                    return(null);
                }

                if (equipmentQueryResult.Value.RouteNetworkTraces == null)
                {
                    context.Errors.Add(new ExecutionError($"No trace information returned for span segment with id: {spanSegmentId}"));
                    return(null);
                }

                if (equipmentQueryResult.Value.RouteNetworkTraces.Count != 1)
                {
                    //context.Errors.Add(new ExecutionError($"Expected only one trace returned for span segment with id: {spanSegmentId}. Are you sure you did a query on a span segment id and not a span equipment id?"));
                    //return null;
                    logger.LogWarning($"Got {equipmentQueryResult.Value.RouteNetworkTraces.Count} trace results tracing span segment or equipment with id: {spanSegmentId}. Will just use the first trace returned.");
                }

                var theTrace = equipmentQueryResult.Value.RouteNetworkTraces.First();

                return(new SpanSegmentTrace()
                {
                    RouteNetworkSegmentIds = theTrace.RouteSegmentIds,
                    RouteNetworkSegmentGeometries = UTM32WGS84Converter.ConvertGeoJsonLineStringsToWgs84(theTrace.RouteSegmentGeometries)
                });
            });

            FieldAsync <TerminalEquipmentType>(
                name: "terminalEquipment",
                description: "Query information related to a specific terminal equipment",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "terminalEquipmentOrTerminalId"
            }
                    ),
                resolve: async context =>
            {
                var terminalEquipmentOrTerminalId = context.GetArgument <Guid>("terminalEquipmentOrTerminalId");

                // Get equipment information
                var equipmentQueryResult = await queryDispatcher.HandleAsync <GetEquipmentDetails, FluentResults.Result <GetEquipmentDetailsResult> >(
                    new GetEquipmentDetails(new EquipmentIdList()
                {
                    terminalEquipmentOrTerminalId
                })
                    );

                if (equipmentQueryResult.IsFailed)
                {
                    foreach (var error in equipmentQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                if (equipmentQueryResult.Value.TerminalEquipment == null || equipmentQueryResult.Value.TerminalEquipment.Count == 0)
                {
                    context.Errors.Add(new ExecutionError($"Cannot find any terminal equipment or terminal with id: {terminalEquipmentOrTerminalId}"));

                    return(null);
                }

                var terminalEquipment = equipmentQueryResult.Value.TerminalEquipment.First();

                return(terminalEquipment);
            });

            FieldAsync <SpanEquipmentType>(
                name: "spanEquipment",
                description: "Query information related to a specific span equipment",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "spanEquipmentOrSegmentId"
            }
                    ),
                resolve: async context =>
            {
                var spanEquipmentOrSegmentId = context.GetArgument <Guid>("spanEquipmentOrSegmentId");

                // Get equipment information
                var equipmentQueryResult = await queryDispatcher.HandleAsync <GetEquipmentDetails, FluentResults.Result <GetEquipmentDetailsResult> >(
                    new GetEquipmentDetails(new EquipmentIdList()
                {
                    spanEquipmentOrSegmentId
                })
                    );

                if (equipmentQueryResult.IsFailed)
                {
                    foreach (var error in equipmentQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                if (equipmentQueryResult.Value.SpanEquipment == null || equipmentQueryResult.Value.SpanEquipment.Count == 0)
                {
                    context.Errors.Add(new ExecutionError($"Cannot find any span equipment containing a span segment with id: {spanEquipmentOrSegmentId}"));

                    return(null);
                }

                var spanEquipment = equipmentQueryResult.Value.SpanEquipment.First();

                return(spanEquipment);
            });

            FieldAsync <NodeContainerType>(
                name: "nodeContainer",
                description: "Query information related to a specific node container",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "nodeContainerId"
            }
                    ),
                resolve: async context =>
            {
                var nodeContainerId = context.GetArgument <Guid>("nodeContainerId");

                // Get equipment information
                var equipmentQueryResult = await queryDispatcher.HandleAsync <GetEquipmentDetails, FluentResults.Result <GetEquipmentDetailsResult> >(
                    new GetEquipmentDetails(new InterestIdList()
                {
                    nodeContainerId
                })
                    );

                if (equipmentQueryResult.IsFailed)
                {
                    foreach (var error in equipmentQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                if (equipmentQueryResult.Value.NodeContainers == null || equipmentQueryResult.Value.NodeContainers.Count == 0)
                {
                    context.Errors.Add(new ExecutionError($"Cannot find any node container with id: {nodeContainerId}"));

                    return(null);
                }

                var nodeContainer = equipmentQueryResult.Value.NodeContainers.First();

                return(nodeContainer);
            }
                );

            Field <RackType>(
                name: "rack",
                description: "Query information related to a specific rack residing within a node",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "routeNodeId"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "rackId"
            }
                    ),
                resolve: context =>
            {
                var routeNodeId = context.GetArgument <Guid>("routeNodeId");
                var rackId      = context.GetArgument <Guid>("rackId");

                var getNodeContainerResult = QueryHelper.GetNodeContainerFromRouteNodeId(queryDispatcher, routeNodeId);

                if (getNodeContainerResult.IsFailed)
                {
                    foreach (var error in getNodeContainerResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                var nodeContainer = getNodeContainerResult.Value;

                if (nodeContainer.Racks == null || !nodeContainer.Racks.Any(r => r.Id == rackId))
                {
                    context.Errors.Add(new ExecutionError($"Cannot find any rack with id: {rackId} within node container with id: {nodeContainer.Id}"));
                    return(null);
                }

                return(nodeContainer.Racks.First(r => r.Id == rackId));
            }
                );

            Field <ListGraphType <RackType> >(
                name: "racks",
                description: "Query all racks within node",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "routeNodeId"
            }
                    ),
                resolve: context =>
            {
                var routeNodeId = context.GetArgument <Guid>("routeNodeId");

                var getNodeContainerResult = QueryHelper.GetNodeContainerFromRouteNodeId(queryDispatcher, routeNodeId);

                if (getNodeContainerResult.IsFailed)
                {
                    foreach (var error in getNodeContainerResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                var nodeContainer = getNodeContainerResult.Value;

                if (nodeContainer.Racks == null)
                {
                    return(new Rack[] { });
                }

                return(nodeContainer.Racks);
            }
                );

            FieldAsync <TerminalEquipmentAZConnectivityViewModelType>(
                name: "terminalEquipmentConnectivityView",
                description: "Query connectivity information related to ",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "routeNodeId"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "terminalEquipmentOrRackId"
            }
                    ),
                resolve: async context =>
            {
                var routeNodeId = context.GetArgument <Guid>("routeNodeId");
                var terminalEquipmentOrRackId = context.GetArgument <Guid>("terminalEquipmentOrRackId");

                var connectivityQuery = new GetTerminalEquipmentConnectivityView(routeNodeId, terminalEquipmentOrRackId);

                var connectivityQueryResult = await queryDispatcher.HandleAsync <GetTerminalEquipmentConnectivityView, Result <TerminalEquipmentAZConnectivityViewModel> >(
                    connectivityQuery
                    );

                if (connectivityQueryResult.IsFailed)
                {
                    foreach (var error in connectivityQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                return(connectivityQueryResult.Value);
            }
                );

            FieldAsync <ConnectivityTraceViewType>(
                name: "connectivityTraceView",
                description: "Trace connectivity",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "routeNetworkElementId"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "terminalOrSpanEquipmentId"
            }
                    ),
                resolve: async context =>
            {
                var routeNetworkElementId     = context.GetArgument <Guid>("routeNetworkElementId");
                var terminalOrSpanEquipmentId = context.GetArgument <Guid>("terminalOrSpanEquipmentId");

                var connectivityQuery = new GetConnectivityTraceView(routeNetworkElementId, terminalOrSpanEquipmentId);

                var connectivityQueryResult = await queryDispatcher.HandleAsync <GetConnectivityTraceView, Result <ConnectivityTraceView> >(
                    connectivityQuery
                    );

                if (connectivityQueryResult.IsFailed)
                {
                    foreach (var error in connectivityQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }
                    return(null);
                }

                return(connectivityQueryResult.Value);
            }
                );

            FieldAsync <SpanEquipmentAZConnectivityViewModelType>(
                name: "spanEquipmentConnectivityView",
                description: "Query connectivity information related to span equipment",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "routeNetworkElementId"
            },
                    new QueryArgument <NonNullGraphType <ListGraphType <IdGraphType> > > {
                Name = "spanEquipmentOrSegmentIds"
            }
                    ),
                resolve: async context =>
            {
                var routeNetworkElementId     = context.GetArgument <Guid>("routeNetworkElementId");
                var spanEquipmentOrSegmentIds = context.GetArgument <Guid[]>("spanEquipmentOrSegmentIds");

                var connectivityQuery = new GetSpanEquipmentConnectivityView(routeNetworkElementId, spanEquipmentOrSegmentIds);

                var connectivityQueryResult = await queryDispatcher.HandleAsync <GetSpanEquipmentConnectivityView, Result <SpanEquipmentAZConnectivityViewModel> >(
                    connectivityQuery
                    );

                if (connectivityQueryResult.IsFailed)
                {
                    foreach (var error in connectivityQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                return(connectivityQueryResult.Value);
            }
                );

            FieldAsync <SpanEquipmentPassageViewModelType>(
                name: "spanEquipmentPassageView",
                description: "Query passage information related to span equipment",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "routeNetworkElementId"
            },
                    new QueryArgument <NonNullGraphType <ListGraphType <IdGraphType> > > {
                Name = "spanEquipmentOrSegmentIds"
            }
                    ),
                resolve: async context =>
            {
                var routeNetworkElementId     = context.GetArgument <Guid>("routeNetworkElementId");
                var spanEquipmentOrSegmentIds = context.GetArgument <Guid[]>("spanEquipmentOrSegmentIds");

                var connectivityQuery = new GetSpanEquipmentPassageView(routeNetworkElementId, spanEquipmentOrSegmentIds);

                var connectivityQueryResult = await queryDispatcher.HandleAsync <GetSpanEquipmentPassageView, Result <SpanEquipmentPassageViewModel> >(
                    connectivityQuery
                    );

                if (connectivityQueryResult.IsFailed)
                {
                    foreach (var error in connectivityQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                return(connectivityQueryResult.Value);
            }
                );

            FieldAsync <ListGraphType <ConnectivityFaceType> >(
                name: "connectivityFaces",
                description: "Query terminal equipment sides and fiber cable ends available for connectivity (aka connectivity faces)",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "routeNodeId"
            }
                    ),
                resolve: async context =>
            {
                var routeNodeId = context.GetArgument <Guid>("routeNodeId");

                var connectivityFacesQuery = new GetConnectivityFaces(routeNodeId);

                var connectivityFacesQueryResult = await queryDispatcher.HandleAsync <GetConnectivityFaces, Result <List <ConnectivityFace> > >(
                    connectivityFacesQuery
                    );

                if (connectivityFacesQueryResult.IsFailed)
                {
                    foreach (var error in connectivityFacesQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                return(connectivityFacesQueryResult.Value);
            }
                );

            FieldAsync <ListGraphType <ConnectivityFaceConnectionType> >(
                name: "connectivityFaceConnections",
                description: "Query the connections available in a connectivity face",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "routeNodeId"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "spanOrTerminalEquipmentId"
            },
                    new QueryArgument <NonNullGraphType <FaceKindEnumType> > {
                Name = "faceType"
            }
                    ),
                resolve: async context =>
            {
                var routeNodeId = context.GetArgument <Guid>("routeNodeId");
                var spanOrTerminalEquipmentId = context.GetArgument <Guid>("spanOrTerminalEquipmentId");
                var faceType = context.GetArgument <FaceKindEnum>("faceType");

                var connectivityFacesConnectionsQuery = new GetConnectivityFaceConnections(routeNodeId, spanOrTerminalEquipmentId, faceType);

                var connectivityFaceConnectionsQueryResult = await queryDispatcher.HandleAsync <GetConnectivityFaceConnections, Result <List <ConnectivityFaceConnection> > >(
                    connectivityFacesConnectionsQuery
                    );

                if (connectivityFaceConnectionsQueryResult.IsFailed)
                {
                    foreach (var error in connectivityFaceConnectionsQueryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }

                    return(null);
                }

                return(connectivityFaceConnectionsQueryResult.Value);
            }
                );


            FieldAsync <DisconnectSpanEquipmentFromTerminalViewType>(
                name: "disconnectSpanEquipmentFromTerminalView",
                description: "Information needed to show disconnect information to user",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "spanSegmentId"
            },
                    new QueryArgument <NonNullGraphType <IdGraphType> > {
                Name = "terminalId"
            }
                    ),
                resolve: async context =>
            {
                var spanSegmentId = context.GetArgument <Guid>("spanSegmentId");
                var terminalId    = context.GetArgument <Guid>("terminalId");

                var query = new GetDisconnectSpanEquipmentFromTerminalView(spanSegmentId, terminalId);

                var queryResult = await queryDispatcher.HandleAsync <GetDisconnectSpanEquipmentFromTerminalView, Result <DisconnectSpanEquipmentFromTerminalView> >(
                    query
                    );

                if (queryResult.IsFailed)
                {
                    foreach (var error in queryResult.Errors)
                    {
                        context.Errors.Add(new ExecutionError(error.Message));
                    }
                    return(null);
                }

                return(queryResult.Value);
            }
                );
        }