Ejemplo n.º 1
0
            private void CreateRatingGraph(IModelerLoader loader)
            {
                foreach (var dataItem in loader.LoadRatingGraph())
                {
                    var rating = dataItem.Rating;
                    var userId = dataItem.UserId;
                    var recipeId = dataItem.RecipeId;

                    // Rating too low to worry about
                    if (rating < 4)
                    {
                        continue; // TODO: Might not be needed, DB should only query for 4 or 5 star ratings
                    }

                    this.ratingGraph.AddRating(rating, userId, recipeId);
                }
            }
Ejemplo n.º 2
0
            private void CreatIngredientUsageVertices(IModelerLoader loader)
            {
                // Loop through ingredient usages and fill in vertices on graph
                // For each item: Create IngredientUsage and add to recipe, create IngredientNode (if necessary) and add recipe to IngredientNode
                foreach (var o in loader.LoadIngredientGraph())
                {
                    var recipeId = o.RecipeId;
                    var ingredientId = o.IngredientId;
                    var qty = o.Qty;
                    var unit = o.Unit;
                    var convType = Unit.GetConvertionType(unit);

                    List<RecipeNode>[] nodes;
                    IngredientNode ingredientNode;
                    var node = this.snapshot.recipeMap[recipeId];

                    // New ingredient, create node for it
                    if (!this.snapshot.ingredientMap.TryGetValue(ingredientId, out ingredientNode))
                    {
                        nodes = new List<RecipeNode>[RecipeTag.NumberOfTags];
                        ingredientNode = new IngredientNode()
                            {
                                IngredientId = ingredientId,
                                RecipesByTag = nodes,
                                ConversionType = convType
                            };
                        this.snapshot.ingredientMap.Add(ingredientId, ingredientNode);
                    }
                    else
                    {
                        nodes = ingredientNode.RecipesByTag as List<RecipeNode>[];
                    }

                    // For each tag the recipe has, we need to create a link through ingNode.RecipesByTag to the recipe
                    // Don't Index Hidden recipes
                    if (!node.Hidden)
                    {
                        foreach (var tag in node.Tags)
                        {
                            if (nodes[tag.Value] == null)
                            {
                                nodes[tag.Value] = new List<RecipeNode>();
                            }

                            // Add ingredient link to RecipeNode
                            nodes[tag.Value].Add(node);
                        }
                    }

                    // Add ingredient usage to recipe
                    var usages = node.Ingredients as List<IngredientUsage>;
                    usages.Add(new IngredientUsage()
                    {
                        Amount = qty,
                        Ingredient = ingredientNode,
                        Unit = unit
                    });
                }
            }
Ejemplo n.º 3
0
 /// <summary>
 /// Creates empty recipe nodes without links
 /// </summary>
 private void CreateEmptyRecipeNodes(IModelerLoader loader)
 {
     this.snapshot.recipeMap = (from o in loader.LoadRecipeGraph()
                                select new RecipeNode()
                                {
                                    RecipeId = o.Id,
                                    Rating = o.Rating,
                                    Tags = o.Tags,
                                    Hidden = o.Hidden,
                                    Ingredients = new List<IngredientUsage>()
                                }).ToDictionary(k => k.RecipeId);
 }