protected override UpdateBusDetailsResponse Resolve(ResolveFieldContext context) { UpdateBusDetailsResponse response = new UpdateBusDetailsResponse(true); var details = context.GetArgument <MyBusDetails>(DetailsParameterName); // Database update goes here. response.BusVersion = details.Version + 100; return(response); }
public Task<object> Resolve(ResolveFieldContext context, FieldMiddlewareDelegate next) { var metadata = new Dictionary<string, object> { {"typeName", context.ParentType.Name}, {"fieldName", context.FieldName} }; using (context.Metrics.Subject("field", context.FieldName, metadata)) { return next(context); } }
public FieldMiddlewareBuilderTests() { _builder = new FieldMiddlewareBuilder(); _context = new ResolveFieldContext(); _context.FieldName = "Name"; _context.FieldAst = new Field(null, new NameNode("Name")); _context.Source = new Person { Name = "Quinn" }; _context.Metrics = new Metrics(); }
public object Resolve(ResolveFieldContext context) { var source = context.Source; if (source == null) { return null; } var prop = source.GetType() .GetProperty(context.FieldAst.Name, _flags); if (prop == null) { throw new InvalidOperationException($"Expected to find property {context.FieldAst.Name} on {context.Source.GetType().Name} but it does not exist."); } return prop.GetValue(source, null); }
protected override BusDetailsResponse Resolve(ResolveFieldContext context) { if (context.HasArgument(ApiConstants.GraphqlArgumentNames.PATH)) { var value = context.Arguments[ApiConstants.GraphqlArgumentNames.PATH]; if (value != null && value == "Scrap") { return(new BusDetailsResponse(true) { Result = false }); } } return(new BusDetailsResponse(true) { Model = "Suzuki", Passengers = 50, Result = true }); }
protected override CarDetailsResponse Resolve(ResolveFieldContext context) { CarDetailsResponse response = null; if (context.HasArgument(ApiConstants.GraphqlArgumentNames.PATH)) { var value = context.Arguments[ApiConstants.GraphqlArgumentNames.PATH]; if (value != null && value == "Blue") { response = new CarDetailsResponse(true) { HousedAddress = new Address() { AddressLineOne = "Blue HousedAddress", Postcode = "4000", State = "QLD", Suburb = "Brisbane" } }; } } response = new CarDetailsResponse(true) { HousedAddress = new Address() { AddressLineOne = "Unknown HousedAddress", Postcode = "2000", State = "NSW", Suburb = "Sydney" } }; response.Make = "Toyota"; response.Model = "Tarago"; response.HasAlarm = true; return(response); }
public async Task<ResolveFieldResult<object>> ResolveFieldAsync(ExecutionContext context, IObjectGraphType parentType, object source, Fields fields) { context.CancellationToken.ThrowIfCancellationRequested(); var resolveResult = new ResolveFieldResult<object> { Skip = false }; var field = fields.First(); var fieldDefinition = GetFieldDefinition(context.Schema, parentType, field); if (fieldDefinition == null) { resolveResult.Skip = true; return resolveResult; } var arguments = GetArgumentValues(context.Schema, fieldDefinition.Arguments, field.Arguments, context.Variables); try { var resolveContext = new ResolveFieldContext(); resolveContext.FieldName = field.Name; resolveContext.FieldAst = field; resolveContext.FieldDefinition = fieldDefinition; resolveContext.ReturnType = fieldDefinition.ResolvedType; resolveContext.ParentType = parentType; resolveContext.Arguments = arguments; resolveContext.Source = source; resolveContext.Schema = context.Schema; resolveContext.Document = context.Document; resolveContext.Fragments = context.Fragments; resolveContext.RootValue = context.RootValue; resolveContext.UserContext = context.UserContext; resolveContext.Operation = context.Operation; resolveContext.Variables = context.Variables; resolveContext.CancellationToken = context.CancellationToken; resolveContext.Metrics = context.Metrics; var resolver = fieldDefinition.Resolver ?? new NameFieldResolver(); var result = resolver.Resolve(resolveContext); if (result is Task) { var task = result as Task; await task.ConfigureAwait(false); result = task.GetProperyValue("Result"); } resolveResult.Value = await CompleteValueAsync(context, fieldDefinition.ResolvedType, fields, result).ConfigureAwait(false); return resolveResult; } catch (Exception exc) { var error = new ExecutionError("Error trying to resolve {0}.".ToFormat(field.Name), exc); error.AddLocation(field, context.Document); context.Errors.Add(error); resolveResult.Skip = false; return resolveResult; } }
public ResolveFieldContextTests() { _context = new ResolveFieldContext(); _context.Arguments = new Dictionary<string, object>(); }
public void should_return_the_right_type() { var objectType = new ObjectGraphType(); objectType.Field<StringGraphType>() .Name("TheName") .Returns<string>() .Resolve(_ => "SomeString"); var fields = objectType.Fields.ToList(); fields.Count.ShouldEqual(1); fields[0].Name.ShouldEqual("TheName"); fields[0].Type.ShouldEqual(typeof(StringGraphType)); var context = new ResolveFieldContext(); fields[0].Resolve(context).GetType().ShouldEqual(typeof(string)); fields[0].Resolve(context).ShouldEqual("SomeString"); }
public abstract TOut MutateAndGetPayload(MutationInputs inputs, ResolveFieldContext <object> context);
public Task<object> Resolve(ResolveFieldContext context, FieldMiddlewareDelegate next) { using (context.Metrics.Subject("class", "from class")) { return next(context); } }
private void ThrowIfPluralIdentifyingRootFieldRequirementsNotMet( object result, ResolveFieldContext context ) { IEnumerable<object> resultAsIEnumerable = result as IEnumerable<object>; if( resultAsIEnumerable == null || context.Arguments == null || context.Arguments.Count != 1 || resultAsIEnumerable.Count() != ((object[])context.Arguments.First().Value).Length ) { throw new InvalidOperationException( "The number of elements in the returned data set must match the number of arguments passed into the query." ); } }
private async Task<object> ResolveField( ExecutionContext context, ObjectGraphType parentType, object source, IEnumerable<Field> fields, List<ExecutionError> executionErrors ) { context.CancellationToken.ThrowIfCancellationRequested(); IReadOnlyList<Field> fieldsAsReadOnlyList = fields.ToReadOnlyList(); Field field = fieldsAsReadOnlyList.First(); FieldType fieldDefinition = GetFieldDefinition(context.Schema, parentType, field); if (fieldDefinition == null) { return null; } IReadOnlyDictionary<string, object> arguments = GetArgumentValues(context.Schema, fieldDefinition.Arguments, field.Arguments, context.Variables); Func<ResolveFieldContext, object> defaultResolve = ctx => { return ctx.Source != null ? GetProperyValue(ctx.Source, ctx.FieldAst.Name) : null; }; try { ResolveFieldContext resolveContext = new ResolveFieldContext( field.Name, field, fieldDefinition, context.Schema.FindType( fieldDefinition.Type ), parentType, arguments, context.RootValue, source, context.Schema, context.Operation, context.Fragments, context.Variables, context.CancellationToken, context.UserContext ); Func<ResolveFieldContext, object> resolve = fieldDefinition.Resolve ?? defaultResolve; object result = resolve( resolveContext ); Task resultAsTask = result as Task; if( resultAsTask != null ) { await resultAsTask; result = GetProperyValue( resultAsTask, "Result" ); } if ( fieldDefinition.IsPluralIdentifyingRootField ) { ThrowIfPluralIdentifyingRootFieldRequirementsNotMet( result, resolveContext ); } __Field parentTypeAsField = parentType as __Field; Type resultAsType = result as Type; if ( parentTypeAsField != null && resultAsType != null ) { result = context.Schema.FindType( resultAsType ); } return await CompleteValue( context, context.Schema.FindType( fieldDefinition.Type ), fieldsAsReadOnlyList, result, executionErrors ); } catch( Exception exception ) { executionErrors.Add( new ExecutionError( string.Format( "Error trying to resolve {0}.", field.Name ), exception ) ); return null; } }
public object ResolveField(ExecutionContext context, ObjectGraphType parentType, object source, Fields fields) { var field = fields.First(); var fieldDefinition = GetFieldDefinition(context.Schema, parentType, field); if (fieldDefinition == null) { return null; } var arguments = GetArgumentValues(fieldDefinition.Arguments, field.Arguments, context.Variables); Func<ResolveFieldContext, object> defaultResolve = (ctx) => { return ctx.Source != null ? GetProperyValue(ctx.Source, ctx.FieldAst.Name) : null; }; try { var resolveContext = new ResolveFieldContext(); resolveContext.FieldAst = field; resolveContext.FieldDefinition = fieldDefinition; resolveContext.Schema = context.Schema; resolveContext.ParentType = parentType; resolveContext.Arguments = arguments; resolveContext.Source = source; var resolve = fieldDefinition.Resolve ?? defaultResolve; var result = resolve(resolveContext); return CompleteValue(context, fieldDefinition.Type, fields, result); } catch (Exception exc) { context.Errors.Add(new ExecutionError("Error trying to resolve {0}.".ToFormat(field.Name), exc)); return null; } }
private bool IsCorrectSelection(ResolveFieldContext <TSource> context, Field field) { return(Enumerable.Any(field.SelectionSet.Selections, s => s.SourceLocation.Equals(context.FieldAst.SourceLocation))); }
public async Task<object> ResolveField(ExecutionContext context, ObjectGraphType parentType, object source, Fields fields) { context.CancellationToken.ThrowIfCancellationRequested(); var field = fields.First(); var fieldDefinition = GetFieldDefinition(context.Schema, parentType, field); if (fieldDefinition == null) { return null; } var arguments = GetArgumentValues(context.Schema, fieldDefinition.Arguments, field.Arguments, context.Variables); Func<ResolveFieldContext, object> defaultResolve = (ctx) => { return ctx.Source != null ? GetProperyValue(ctx.Source, ctx.FieldAst.Name) : null; }; try { var resolveContext = new ResolveFieldContext(); resolveContext.FieldAst = field; resolveContext.FieldDefinition = fieldDefinition; resolveContext.Schema = context.Schema; resolveContext.ParentType = parentType; resolveContext.Arguments = arguments; resolveContext.Source = source; resolveContext.CancellationToken = context.CancellationToken; var resolve = fieldDefinition.Resolve ?? defaultResolve; var result = resolve(resolveContext); if(result is Task) { var task = result as Task; await task; result = GetProperyValue(task, "Result"); } if (parentType is __Field && result is Type) { result = context.Schema.FindType(result as Type); } return await CompleteValue(context, context.Schema.FindType(fieldDefinition.Type), fields, result); } catch (Exception exc) { context.Errors.Add(new ExecutionError("Error trying to resolve {0}.".ToFormat(field.Name), exc)); return null; } }
public async Task<ResolveFieldResult<object>> ResolveFieldAsync(ExecutionContext context, ObjectGraphType parentType, object source, Fields fields) { context.CancellationToken.ThrowIfCancellationRequested(); var resolveResult = new ResolveFieldResult<object> { Skip = false }; var field = fields.First(); var fieldDefinition = GetFieldDefinition(context.Schema, parentType, field); if (fieldDefinition == null) { resolveResult.Skip = true; return resolveResult; } var arguments = GetArgumentValues(context.Schema, fieldDefinition.Arguments, field.Arguments, context.Variables); Func<ResolveFieldContext, object> defaultResolve = ctx => ctx.Source != null ? GetProperyValue(ctx.Source, ctx.FieldAst.Name) : null; try { var resolveContext = new ResolveFieldContext(); resolveContext.FieldName = field.Name; resolveContext.FieldAst = field; resolveContext.FieldDefinition = fieldDefinition; resolveContext.ReturnType = context.Schema.FindType(fieldDefinition.Type); resolveContext.ParentType = parentType; resolveContext.Arguments = arguments; resolveContext.Source = source; resolveContext.Schema = context.Schema; resolveContext.Fragments = context.Fragments; resolveContext.RootValue = context.RootValue; resolveContext.Operation = context.Operation; resolveContext.Variables = context.Variables; resolveContext.CancellationToken = context.CancellationToken; var resolve = fieldDefinition.Resolve ?? defaultResolve; var result = resolve(resolveContext); if(result is Task) { var task = result as Task; await task.ConfigureAwait(false); result = GetProperyValue(task, "Result"); } if (parentType is __Field && result is Type) { result = context.Schema.FindType(result as Type); } resolveResult.Value = await CompleteValueAsync(context, context.Schema.FindType(fieldDefinition.Type), fields, result).ConfigureAwait(false); return resolveResult; } catch (Exception exc) { var error = new ExecutionError("Error trying to resolve {0}.".ToFormat(field.Name), exc); error.AddLocation(field.SourceLocation.Line, field.SourceLocation.Column); context.Errors.Add(error); resolveResult.Skip = false; return resolveResult; } }