Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }