Example #1
0
        public async Task <IActionResult> AddDish(CreateDishRequest dish)
        {
            var loggedUser = User.GetUserIdFromToken();
            var result     = await _dishService.CreateDishAsync(loggedUser, dish);

            var language = await _userService.GetUserLanguageFromUserIdAsync(loggedUser);

            var mapped = _mapper.Map <DishResponse>(result, opt =>
            {
                opt.Items["lang"] = language;
            });

            return(Created("", new ApiOkResponse(mapped)));
        }
Example #2
0
        public ActionResult Create([FromRoute] int restaurantId, [FromBody] CreateDishRequest request)
        {
            int id = _dishService.CreateDish(restaurantId, request);

            return(Created($"api/v1/restaurant/{restaurantId}/dish/{id}", null));
        }
Example #3
0
        public async Task <Dish> CreateDishAsync(int loggedUser, CreateDishRequest dish)
        {
            // validate admin user
            var user = await _uow.UserRepository.FindByAsync(u => u.Id == loggedUser && u.Role == RoleEnum.ADMIN);

            if (user.Count == 0)
            {
                throw new NotAllowedException(ExceptionConstants.NOT_ALLOWED);
            }
            // validate dish name
            var existDishName = await _uow.DishRepository.FindByAsync(p => p.Name.ToLower() == dish.Name.ToLower());

            if (existDishName.Count > 0)
            {
                throw new InvalidDataException(ExceptionConstants.INVALID_DATA, "Dish name");
            }

            var dbDish = new Dish();

            dbDish.Calories      = dish.Calories;
            dbDish.Carbohydrates = dish.Carbohydrates;
            dbDish.Fat           = dish.Fat;
            dbDish.Fiber         = dish.Fiber;
            dbDish.Name          = dish.Name;
            dbDish.Proteins      = dish.Proteins;

            dbDish.Cholesterol = dish.Cholesterol;
            dbDish.Calcium     = dish.Calcium;
            dbDish.Phosphorus  = dish.Phosphorus;
            dbDish.Iron        = dish.Iron;
            dbDish.Potassium   = dish.Potassium;
            dbDish.Sodium      = dish.Sodium;
            dbDish.Zinc        = dish.Zinc;
            dbDish.VitaminA    = dish.VitaminA;
            dbDish.VitaminC    = dish.VitaminC;
            dbDish.VitaminB6   = dish.VitaminB6;
            dbDish.VitaminB12  = dish.VitaminB12;
            dbDish.VitaminD    = dish.VitaminD;
            dbDish.VitaminE    = dish.VitaminE;
            dbDish.VitaminK    = dish.VitaminK;

            dbDish.VitaminB1Thiamin    = dish.VitaminB1Thiamin;
            dbDish.VitaminB2Riboflavin = dish.VitaminB2Riboflavin;
            dbDish.VitaminB3Niacin     = dish.VitaminB3Niacin;
            dbDish.VitaminB9Folate     = dish.VitaminB9Folate;
            dbDish.NetWeight           = dish.NetWeight;
            dbDish.Volume             = dish.Volume;
            dbDish.SaturatedFat       = dish.SaturatedFat;
            dbDish.PolyUnsaturatedFat = dish.PolyUnsaturatedFat;
            dbDish.MonoUnsaturatedFat = dish.MonoUnsaturatedFat;
            dbDish.Alcohol            = dish.Alcohol;

            if (dish.Classification == 0)
            {
                dbDish.IsProteic = true;
            }
            else if (dish.Classification == 1)
            {
                dbDish.IsCaloric = true;
            }
            else
            {
                dbDish.IsFruitAndVegetables = true;
            }

            // avatar

            if (dish.Image != null)
            {
                string guid = Guid.NewGuid().ToString();
                await _fileService.UploadFileAsync(dish.Image, guid);

                dbDish.Image         = guid;
                dbDish.ImageMimeType = dish.Image.ContentType;
            }

            //existing tags
            foreach (var id in dish.TagsIds)
            {
                var t = await _uow.TagRepository.GetAsync(id);

                if (t != null)
                {
                    var dt = new DishTag
                    {
                        Dish     = dbDish,
                        TagId    = t.Id,
                        TaggedAt = DateTime.UtcNow
                    };

                    await _uow.DishTagRepository.AddAsync(dt);
                }
            }
            //new tags
            foreach (var name in dish.NewTags)
            {
                var ta = new Tag
                {
                    Name = name
                };
                await _uow.TagRepository.AddAsync(ta);

                var dt = new DishTag
                {
                    Dish     = dbDish,
                    Tag      = ta,
                    TaggedAt = DateTime.UtcNow
                };

                await _uow.DishTagRepository.AddAsync(dt);
            }

            await _uow.DishRepository.AddAsync(dbDish);

            await _uow.CommitAsync();

            //expire cache
            QueryCacheManager.ExpireTag(_config.GetSection("AWS")["CachePrefix"] + CacheEntries.ALL_DISHES);

            return(dbDish);
        }