예제 #1
0
 public static IRequest <CreateRecordRequest, CreateRecordResponse> CreateRecords(IHrbcFieldIdResolver fieldIdResolver, IEnumerable <CreateRecordRequest.IContentBuilder> records)
 {
     return(CreateRecordRequest.Builder().Append(records.Select(builder => builder.Build())).WithFieldIdResolver(fieldIdResolver));
 }
예제 #2
0
 /// <summary>
 /// Get an equivielent request with the specified field id resolver
 /// </summary>
 public CreateRecordRequest WithFieldIdResolver(IHrbcFieldIdResolver resolver)
 {
     return(new CreateRecordRequest {
         GroupedData = GroupedData, References = References, FieldIdResolver = resolver
     });
 }
예제 #3
0
 public static IRequest <CreateRecordRequest, CreateRecordResponse> CreateRecords(IHrbcFieldIdResolver fieldIdResolver, IEnumerable <CreateRecordRequest.Contents> records)
 {
     return(CreateRecordRequest.Builder().Append(records).WithFieldIdResolver(fieldIdResolver));
 }
예제 #4
0
 public IRequest <CreateRecordRequest, CreateRecordResponse> WithFieldIdResolver(IHrbcFieldIdResolver resolver)
 {
     return(new Request <CreateRecordRequest, CreateRecordResponse>(HandlerName,
                                                                    new CreateRecordRequest
     {
         GroupedData = ResolveDependancies(),
         FieldIdResolver = resolver,
         References = references.ToDictionary(entry => entry.Key, entry => entry.Value)
     }));
 }
예제 #5
0
 internal UpdateRecordRequest(IReadOnlyList <Contents> data, IHrbcFieldIdResolver resolver)
 {
     Data            = data;
     FieldIdResolver = resolver;
 }
예제 #6
0
 public IRequest <UpdateRecordRequest, UpdateRecordResponse> WithFieldIdResolver(IHrbcFieldIdResolver resolvers)
 {
     return(new Request <UpdateRecordRequest, UpdateRecordResponse>(HandlerName,
                                                                    new UpdateRecordRequest(content.Values.Aggregate(new List <Contents>(), (list, entry) => { list.AddRange(entry); return list; }), resolvers)));
 }
예제 #7
0
 /// <summary>
 /// Create a request that is equivelent to this one, but with given mappers.
 /// </summary>
 /// <param name="resolver">The resolver to use</param>
 /// <returns>The request</returns>
 public UpdateRecordRequest WithFieldIdResolver(IHrbcFieldIdResolver resolver)
 {
     return(new UpdateRecordRequest(Data, resolver));
 }
예제 #8
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));
        }