Esempio n. 1
0
        public async Task <List <SetOptionResponse> > Handle(PrivateSession session, SetOptionRequest request, Func <PrivateConnection> connectionFactory)
        {
            var requestObject = await ConvertRequestToDataContract(session, request, connectionFactory);

            var responseObject = new List <Json.OptionCreateResponseItem>();

            for (var i = 0; i < requestObject.Count; i += CreateOptionRequestBatchSize)
            {
                var range = Math.Min(CreateOptionRequestBatchSize, requestObject.Count - i);
                using (var connection = connectionFactory().ApiName(ApiName).Method(PrivateConnectionMethod.Create))
                {
                    try
                    {
                        using (var response = await connection.SendAsync(requestObject.Skip(i).Take(range).ToList()))
                        {
                            responseObject.AddRange(await response.ReadAsync <List <Json.OptionCreateResponseItem> >());
                        }
                    }
                    catch (ConnectionResponseException e)
                    {
                        throw e.ToRequestException("Option set request failed", request);
                    }
                }
            }
            return(responseObject.Select(ConvertResponseItem).ToList());
        }
Esempio n. 2
0
        private async Task <List <Json.OptionCreateRequestItem> > ConvertRequestToDataContract(PrivateSession session, SetOptionRequest request, Func <PrivateConnection> connectionFactory)
        {
            var missingIds = request.Items
                             .Where(item => !item.ParentId.HasValue && !string.IsNullOrEmpty(item.ParentAlias))
                             .Select(x => x.ParentAlias)
                             .Distinct()
                             .ToDictionary(item => item, item => GetParentIdByAlias(session, item, connectionFactory));

            for (var i = 0; i < missingIds.Count; i += GetParentIdBatchSize)
            {
                int range = Math.Min(GetParentIdBatchSize, missingIds.Values.Count - i);
                await Task.WhenAll(missingIds.Values.Skip(i).Take(range).ToList());
            }

            return(request.Items.Select(item => new Json.OptionCreateRequestItem
            {
                Alias = item.Alias,
                Name = item.Name,
                ParentId = item.ParentId ?? missingIds[item.ParentAlias].Result,
                Sort = item.Sort,
                Type = item.Type,
                Children = item.Children?.Select(ConvertRequestItem).ToList()
            }
                                        ).ToList());
        }