private async Task ProcessListAsync(List <object> items, MutationActions action, IGraphRequestContext context, bool forceHandle) { var typeAccessor = TypeAccessor.Create(items.First().GetType()); var listMembers = typeAccessor.GetMembers().Where(x => x.IsList()); var connectionEdgeMembers = typeAccessor.GetMembers().Where(x => x.GetAttribute(typeof(ConnectionEdgeDestinationAttribute), false) != null); foreach (var x in _modelTransformers) { if (forceHandle || x.CanHandle(action)) { foreach (var item in items) { await x.TransformAsync(item, typeAccessor, context); foreach (var member in listMembers) { var value = typeAccessor[item, member.Name]; if (value != null) { List <object> memberItems = new List <object>(); var list = (IList)value; foreach (var item1 in list) { memberItems.Add(item1); } if (memberItems.Count > 0) { await ProcessListAsync(memberItems, action, context, true); } } } foreach (var member in connectionEdgeMembers) { var value = typeAccessor[item, member.Name]; if (value != null) { await ProcessListAsync(new List <object> { value }, action, context, true); } } } } } }
private async Task TransformObjects(List <object> items, IGraphRequestContext context, MutationActions mutationAction) { await _modelTransformerProvider.TransformAsync(new ModelTransformArguments { Models = items, Action = mutationAction, RequestContext = context }); }
private async Task TransformObject(object item, IGraphRequestContext context, MutationActions mutationAction) { await TransformObjects(new List <object> { item }, context, mutationAction); }
public bool CanHandle(MutationActions action) { return(action == MutationActions.BatchCreate); }
public bool CanHandle(MutationActions action) { return(action != MutationActions.DeleteAll && action != MutationActions.Delete); }