public async Task <Models.FoodImage> UploadImage(CreateFoodImageRequest request) { var img = new Models.FoodImage(); MemoryStream ms = new MemoryStream(); request.Image.CopyTo(ms); img.Image = ms.ToArray(); ms.Close(); ms.Dispose(); var dbImage = new DbModels.FoodImage { UserId = request.UserId, FoodId = request.FoodId, Image = img.Image }; _mouthfeel.FoodImages.Add(dbImage); await _mouthfeel.SaveChangesAsync(); return(img); }
public async Task <FoodResponse> AddFood(CreateFoodRequest request, int userId) { var foods = await _mouthfeel.Foods.ToListAsync(); var flavorsToAdd = request.Flavors.Split(",").Select(f => Int32.Parse(f)); var texturesToAdd = request.Textures.Split(",").Select(t => Int32.Parse(t)); var miscToAdd = request.Miscellaneous.Split(",").Select(m => Int32.Parse(m)); if (foods.Any(f => String.Equals(f.Name, request.Name, StringComparison.OrdinalIgnoreCase))) { throw new ErrorResponse(HttpStatusCode.BadRequest, "A food with that name already exists.", DescriptiveErrorCodes.FoodAlreadyExists); } if (flavorsToAdd?.Any() ?? false) { var flavors = await _attributes.GetAttributes(VotableAttributeType.Flavor); if (!flavorsToAdd.All(f => flavors.Select(fl => fl.Id).Contains(f))) { throw new ErrorResponse(HttpStatusCode.BadRequest, ErrorMessages.FlavorDoesNotExist, DescriptiveErrorCodes.FlavorDoesNotExist); } } if (miscToAdd?.Any() ?? false) { var misc = await _attributes.GetAttributes(VotableAttributeType.Miscellaneous); if (!miscToAdd.All(m => misc.Select(ms => ms.Id).Contains(m))) { throw new ErrorResponse(HttpStatusCode.BadRequest, ErrorMessages.MiscellaneousDoesNotExist, DescriptiveErrorCodes.MiscellaneousDoesNotExist); } } if (texturesToAdd?.Any() ?? false) { var textures = await _attributes.GetAttributes(VotableAttributeType.Texture); if (!texturesToAdd.All(t => textures.Select(tx => tx.Id).Contains(t))) { throw new ErrorResponse(HttpStatusCode.BadRequest, ErrorMessages.TextureDoesNotExist, DescriptiveErrorCodes.TextureDoesNotExist); } } var food = new Food { Name = request.Name, ImageUrl = "" }; _mouthfeel.Foods.Add(food); await _mouthfeel.SaveChangesAsync(); var createdFood = await _mouthfeel.Foods.FirstOrDefaultAsync(f => f.Name == food.Name); var foodId = createdFood.Id; if (request.Image != null) { var imageRequest = new CreateFoodImageRequest { UserId = userId, FoodId = foodId, Image = request.Image }; var image = await _images.UploadImage(imageRequest); } var flavorTasks = flavorsToAdd?.Select(f => _attributes.ManageVote(f, userId, foodId, VotableAttributeType.Flavor)); var miscTasks = miscToAdd?.Select(m => _attributes.ManageVote(m, userId, foodId, VotableAttributeType.Miscellaneous)); var textureTasks = texturesToAdd?.Select(t => _attributes.ManageVote(t, userId, foodId, VotableAttributeType.Texture)); // TODO: Probably need error handling here if (flavorTasks != null) { foreach (var flavor in flavorTasks) { await flavor; } } if (miscTasks != null) { foreach (var misc in miscTasks) { await misc; } } if (textureTasks != null) { foreach (var texture in textureTasks) { await texture; } } return(await GetFoodDetails(foodId, userId)); }