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); } }
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 }); } }
/// <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); }