예제 #1
0
        private async Task <KeyValuePair <Json.CreateRecordRequest, Dictionary <int, Dictionary <int, Guid> > > > BuildRequest(IHrbcFieldIdResolver resolver, IEnumerable <CreateRecordRequest.Contents> data, Dictionary <object, ulong> references)
        {
            var resultMapping = new Dictionary <int, Dictionary <int, Guid> >();
            var fieldMapping  = await resolver.IdResolver(data.SelectMany(content => content.Entries.Keys).Distinct().ToArray());

            var result = new List <CreateRecordRequestData>();

            foreach (var grouping in data.GroupBy(
                         entry => entry.Resource,
                         (key, value) => new {
                Resource = (int)key,
                Values = value.Select(content => new {
                    Id = content.Id,
                    Entries = content.Entries.ToDictionary(entry => fieldMapping[entry.Key], entry => ResolveValue(entry.Key, entry.Value, references))
                })
            }))
            {
                var contentIdMapping = new Dictionary <int, Guid>();
                var entries          = new List <Dictionary <ulong, object> >();

                foreach (var entry in grouping.Values)
                {
                    contentIdMapping[entries.Count] = entry.Id;
                    entries.Add(entry.Entries);
                }
                resultMapping.Add(result.Count, contentIdMapping);
                result.Add(new CreateRecordRequestData {
                    ResourceId = grouping.Resource, Entries = entries
                });
            }

            return(new KeyValuePair <Json.CreateRecordRequest, Dictionary <int, Dictionary <int, Guid> > >(new Json.CreateRecordRequest {
                Data = result
            }, resultMapping));
        }