public async Task TryHandlePreItem <TSource>(MutationActionItem <TSource> mutationActionItem)
        {
            switch (mutationActionItem.Action)
            {
            case MutationActions.Delete:
                await RemoveEdgeConnections(mutationActionItem.Item, mutationActionItem.RequestContext);

                break;

            case MutationActions.DeleteAll:
                await DeleteAllEdgeConnectionsOfType <TSource>(mutationActionItem.RequestContext);

                break;

            default:
                // Do nothing. We are not handling.
                break;
            }
        }
        protected string GetBody <TSource>(MutationActionItem <TSource> mutationActionItem)
        {
            if (mutationActionItem.Item != null)
            {
                return(JsonConvert.SerializeObject(mutationActionItem.Item));
            }

            if (mutationActionItem.Items != null)
            {
                return(JsonConvert.SerializeObject(mutationActionItem.Items));
            }

            if (mutationActionItem.ObjectItem != null)
            {
                return(JsonConvert.SerializeObject(mutationActionItem.ObjectItem));
            }

            if (mutationActionItem.ObjectItems != null)
            {
                return(JsonConvert.SerializeObject(mutationActionItem.ObjectItems));
            }

            return("");
        }
        public Task TryHandlePostItem <TSource>(MutationActionItem <TSource> mutationActionItem)
        {
            _logger.LogInformation($"FooMutationPostAction {GetBody(mutationActionItem)}");

            return(Task.CompletedTask);
        }
Ejemplo n.º 4
0
        public async Task TryHandlePostItem <TSource>(MutationActionItem <TSource> mutationActionItem)
        {
            Type mappedSearchType;
            bool shouldHandle = false;

            if (mutationActionItem.ObjectItem != null)
            {
                shouldHandle = InternalTryGetMappedSearchType(mutationActionItem.ObjectItem.GetType(),
                                                              out mappedSearchType);
            }
            else
            {
                if (mutationActionItem.ObjectItems != null &&
                    mutationActionItem.ObjectItems.Count > 0)
                {
                    shouldHandle = InternalTryGetMappedSearchType(mutationActionItem.ObjectItems.First().GetType(),
                                                                  out mappedSearchType);
                }
                else
                {
                    shouldHandle = TryGetMappedSearchType <TSource>(out mappedSearchType);
                }
            }

            if (!shouldHandle)
            {
                return;
            }

            if (mutationActionItem.Action == MutationActions.DeleteAll)
            {
                await mutationActionItem.RepositoryProvider.GetRepository(mappedSearchType)
                .DeleteAllAsync(mappedSearchType, mutationActionItem.RequestContext);

                return;
            }

            if (mutationActionItem.Action == MutationActions.BatchCreateOrUpdate ||
                mutationActionItem.Action == MutationActions.BatchCreate)
            {
                List <object> mappedInstances;
                if (mutationActionItem.Items != null)
                {
                    var type = mutationActionItem.Items.First().GetType();
                    mappedInstances = mutationActionItem.Items.Select(item => Convert.ChangeType(CreateInstanceFromMap(item,
                                                                                                                       type.Name), mappedSearchType)).ToList();
                }
                else
                {
                    var type = mutationActionItem.ObjectItems.First().GetType();
                    mappedInstances = mutationActionItem.ObjectItems.Select(item => Convert.ChangeType(CreateInstanceFromMap(item,
                                                                                                                             type.Name), mappedSearchType)).ToList();
                }

                await mutationActionItem.RepositoryProvider.GetRepository(mappedSearchType)
                .BatchAddAsync(mappedSearchType, mappedInstances, mutationActionItem.RequestContext);

                return;
            }

            object oMap = mutationActionItem.ObjectItem != null ?
                          mutationActionItem.ObjectItem :
                          mutationActionItem.Item;

            if (oMap == null)
            {
                return;
            }

            var mappedInstance = CreateInstanceFromMap(oMap, oMap.GetType().Name);

            switch (mutationActionItem.Action)
            {
            case MutationActions.Create:
            case MutationActions.CreateOrUpdate:                        // Search repository does not support createOrUpdate, so we are just using Create.

                await mutationActionItem.RepositoryProvider.GetRepository(mappedSearchType)
                .AddAsync(mappedSearchType, mappedInstance, mutationActionItem.RequestContext);

                break;

            case MutationActions.Update:

                await mutationActionItem.RepositoryProvider.GetRepository(mappedSearchType)
                .UpdateAsync(mappedSearchType, mappedInstance, mutationActionItem.RequestContext);

                break;

            case MutationActions.Delete:

                await mutationActionItem.RepositoryProvider.GetRepository(mappedSearchType)
                .DeleteAsync(mappedSearchType, mappedInstance, mutationActionItem.RequestContext);

                break;

            default:
                // Do nothing.
                break;
            }
        }