public static ChildDto ToChildDto(this ChildRow childRow)
 {
     return(new ChildDto()
     {
         ChildId = childRow.ChildId,
         ChildFirstName = childRow.FirstName,
         ChildLastName = childRow.LastName,
         Goodness = childRow.Goodness
     });
 }
Beispiel #2
0
        public static async Task <ChildRow> GetChildByIdAsync(this CloudTable table, string childId)
        {
            ChildRow child = null;

            TableQuery <ChildRow> rangeQuery = new TableQuery <ChildRow>().Where(
                TableQuery.CombineFilters(
                    TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal,
                                                       "Children"),
                    TableOperators.And,
                    TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal,
                                                       childId)));

            var token = default(TableContinuationToken);

            var query = await table.ExecuteQuerySegmentedAsync(rangeQuery, token);

            child = query.FirstOrDefault();

            return(child);
        }
        public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = "EvaluateChild")] HttpRequest req,
                                                     [Table(TableNames.ChildrenTable, "Children", Connection = "StorageAccount")] CloudTable childTable,
                                                     ILogger log)
        {
            log.LogDebug($"[START FUNCTION] --> {Constants.RetrieveChildActivityFunction}");

            string jsonContent = await new StreamReader(req.Body).ReadToEndAsync();

            ChildEvaluationDto child = null;

            try
            {
                child = JsonConvert.DeserializeObject <ChildEvaluationDto>(jsonContent);
                log.LogInformation($"{Constants.RetrieveChildActivityFunction} for child {child}");

                var childRow = await childTable.GetChildByIdAsync(child.ChildId);

                if (childRow == null)
                {
                    log.LogDebug($"{Constants.RetrieveChildActivityFunction} child {child} not found");
                    childRow           = new ChildRow(child.ChildId);
                    childRow.FirstName = child.ChildFirstName;
                    childRow.LastName  = child.ChildLastName;
                }

                childRow.Goodness = child.Goodness;

                await childTable.InsertOrReplaceAsync(childRow);
            }
            catch (Exception ex)
            {
                log.LogError("Error during child evaluation operation", ex);
                return(new BadRequestObjectResult("Error during child evaluation operation"));
            }

            return(new OkResult());
        }
Beispiel #4
0
        public static async Task <ChildDto> RetrieveChild([ActivityTrigger] LetterDto letter,
                                                          [Table(TableNames.ChildrenTable, "Children", Connection = "StorageAccount")] CloudTable childTable,
                                                          ILogger log)
        {
            log.LogInformation($"[START ACTIVITY] --> {Constants.RetrieveChildActivityFunction} for childId={letter.ChildId}");
            ChildDto child = null;

            try
            {
                var childRow = await childTable.GetChildByIdAsync(letter.ChildId);

                if (childRow == null)
                {
                    childRow           = new ChildRow(letter.ChildId);
                    childRow.FirstName = letter.ChildFirstName;
                    childRow.LastName  = letter.ChildLastName;
                    childRow.Goodness  = 10;
                    if (!await childTable.InsertAsync(childRow))
                    {
                        childRow = null;
                    }
                }

                if (childRow != null)
                {
                    child = childRow.ToChildDto();
                    child.CurrentLetter = letter;
                }
            }
            catch (Exception ex)
            {
                log.LogError(ex, $"Error during retriving child");
                return(null);
            }

            return(child);
        }
Beispiel #5
0
        public void ExampleJoining()
        {
            var numbersAlpha          = new int[] { 1, 2, 3 };
            var numbersBravo          = new int[] { 2, 4 };
            var numbersExcludingBravo = numbersAlpha.Except(numbersBravo);
            var products = new Product[]
            {
                new Product()
                {
                    Id = 1, Name = "One"
                },
                new Product()
                {
                    Id = 2, Name = "Two"
                }
            };
            var productsDiscontinued = new Product[]
            {
                new Product()
                {
                    Id = 2, Name = "Two"
                }
            };
            var productsAvailable = products.Except(productsDiscontinued);
            var numbersInBothSets = numbersAlpha.Intersect(numbersBravo);

            var infos = new PlayerInfo[]
            {
                new PlayerInfo()
                {
                    PlayerId = 1, Name = "Name1", CreatedDate = DateTime.Parse("01/01/2001")
                },
                new PlayerInfo()
                {
                    PlayerId = 2, Name = "Name2", CreatedDate = DateTime.Parse("02/02/2002")
                },
                new PlayerInfo()
                {
                    PlayerId = 7, Name = "Name7", CreatedDate = DateTime.Parse("07/07/2007")
                }
            };
            var metadatas = new PlayerMetadata[]
            {
                new PlayerMetadata()
                {
                    PlayerId = 1, Tags = new string[] { "strong slow" }
                },
                new PlayerMetadata()
                {
                    PlayerId = 2, Tags = new string[] { "weak fast" }
                },
                new PlayerMetadata()
                {
                    PlayerId = 8, Tags = new string[] { "tall smart" }
                }
            };
            var joinedPlayers = infos.Join(metadatas, i => i.PlayerId, m => m.PlayerId, (i, m) => new Player()
            {
                Id          = i.PlayerId,
                Name        = i.Name,
                CreatedDate = i.CreatedDate,
                Tags        = m.Tags
            });

            var parents = new ParentRow[]
            {
                new ParentRow()
                {
                    ParentId = 1, ParentName = "Parent1"
                },
                new ParentRow()
                {
                    ParentId = 2, ParentName = "Parent2"
                }
            };
            var children = new ChildRow[]
            {
                new ChildRow()
                {
                    ChildId = 1, ParentId = 1, ChildName = "Child1"
                },
                new ChildRow()
                {
                    ChildId = 2, ParentId = 1, ChildName = "Child2"
                },
                new ChildRow()
                {
                    ChildId = 3, ParentId = 2, ChildName = "Child3"
                },
                new ChildRow()
                {
                    ChildId = 4, ParentId = 2, ChildName = "Child4"
                }
            };

            var joinedFamily = parents.Join(children, p => p.ParentId, c => c.ParentId, (p, c) => new
            {
                Parent = p,
                Child  = c
            });
            var joinedFamilyMessageBuilder = new StringBuilder();

            foreach (var relationship in joinedFamily)
            {
                var line = relationship.Parent.ParentName + ":" + relationship.Child.ChildName;
                joinedFamilyMessageBuilder.AppendLine(line);
            }
            var joinedFamilyMessage = joinedFamilyMessageBuilder.ToString();

            var groupJoinedFamily = parents.GroupJoin(children, p => p.ParentId, c => c.ParentId, (p, c) => new
            {
                Parent   = p,
                Children = c
            });
            var groupJoinedFamilyMessageBuilder = new StringBuilder();

            foreach (var parent in groupJoinedFamily)
            {
                var childrensNames = String.Join(",", parent.Children.Select(c => c.ChildName));
                var line           = parent.Parent.ParentName + ":" + childrensNames;
                groupJoinedFamilyMessageBuilder.AppendLine(line);
            }
            var groupJoinedFamilyMessage = groupJoinedFamilyMessageBuilder.ToString();

            var numbers             = new int[] { 1, 2, 3, 4, 5 };
            var groups              = numbers.GroupBy(n => n % 2 == 0);
            var groupMessageBuilder = new StringBuilder();

            foreach (var group in groups)
            {
                var line = (group.Key ? "Even" : "Odd") + ":" + String.Join(",", group);
                groupMessageBuilder.AppendLine(line);
            }
            var groupMessage = groupMessageBuilder.ToString();

            var animals = new Animal[]
            {
                new Animal()
                {
                    Id = 1, Species = "Dog", Age = 7
                },
                new Animal()
                {
                    Id = 2, Species = "Cat", Age = 3
                },
                new Animal()
                {
                    Id = 3, Species = "Cat", Age = 6
                },
                new Animal()
                {
                    Id = 4, Species = "Cat", Age = 3
                },
                new Animal()
                {
                    Id = 5, Species = "Dog", Age = 6
                }
            };
            var animalSummaryBuilder = new StringBuilder();
            var animalsByAge         = animals.GroupBy(a => a.Age);

            foreach (var ageGroup in animalsByAge)
            {
                animalSummaryBuilder.AppendLine($"Animals Age {ageGroup.Key}");
                foreach (var animal in ageGroup)
                {
                    var line = $"\tId:{animal.Id}:Species:{animal.Species}";
                    animalSummaryBuilder.AppendLine(line);
                }
            }
            var animalsBySpecies = animals.GroupBy(a => a.Species);

            foreach (var speciesGroup in animalsBySpecies)
            {
                animalSummaryBuilder.AppendLine($"{speciesGroup.Key}s");
                foreach (var animal in speciesGroup)
                {
                    var line = $"\tId:{animal.Id}:Age:{animal.Age}";
                    animalSummaryBuilder.AppendLine(line);
                }
            }
            var animalSummary = animalSummaryBuilder.ToString();
        }