Esempio n. 1
0
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
 private async Task TransformObjects(List <object> items, IGraphRequestContext context, MutationActions mutationAction)
 {
     await _modelTransformerProvider.TransformAsync(new ModelTransformArguments
     {
         Models         = items,
         Action         = mutationAction,
         RequestContext = context
     });
 }
Esempio n. 3
0
 private async Task TransformObject(object item, IGraphRequestContext context, MutationActions mutationAction)
 {
     await TransformObjects(new List <object> {
         item
     }, context, mutationAction);
 }
Esempio n. 4
0
 public bool CanHandle(MutationActions action)
 {
     return(action == MutationActions.BatchCreate);
 }
Esempio n. 5
0
 public bool CanHandle(MutationActions action)
 {
     return(action != MutationActions.DeleteAll &&
            action != MutationActions.Delete);
 }