public async Task <Result <DishView> > AddAsync(DishToAdd dish, CancellationToken cancellationToken = default)
        {
            DishDB dishToAdd = _mapper.Map <DishDB>(dish);

            dishToAdd.Added = DateTime.UtcNow;
            _context.Dishes.Add(dishToAdd);
            try
            {
                await UpdateTagLinks(dish.TagNames, dishToAdd);

                await _context.SaveChangesAsync(cancellationToken);

                DishDB dishAfterAdding = await _context.Dishes.Where(_ => _.Id == dishToAdd.Id).Include(c => c.DishTags).ThenInclude(sc => sc.Tag).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

                DishView view = _mapper.Map <DishView>(dishAfterAdding);
                view.TagList = CollectTagList(dishAfterAdding.DishTags, cancellationToken).Result;
                return(Result <DishView> .Ok(view));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(Result <DishView> .Fail <DishView>(ExceptionConstants.CANNOT_SAVE_MODEL + ex.Message));
            }
            catch (DbUpdateException ex)
            {
                return(Result <DishView> .Fail <DishView>(ExceptionConstants.CANNOT_SAVE_MODEL + ex.Message));
            }
            catch (ArgumentNullException ex)
            {
                return(Result <DishView> .Fail <DishView>(ExceptionConstants.SOURCE_IS_NULL + ex.Message));
            }
        }
        public async Task <Result <IEnumerable <DishView> > > GetByTagIndexAsync(string tagName, CancellationToken cancellationToken = default)
        {
            TagDB tag = await _context.Tags.Where(_ => _.TagName == tagName).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            if (tag is null)
            {
                return(Result <IEnumerable <DishView> > .Fail <IEnumerable <DishView> >(ExceptionConstants.TAG_WAS_NOT_FOUND));
            }
            var dishTags = await _context.DishTags.Where(_ => _.TagId == tag.Id).AsNoTracking().ToListAsync(cancellationToken);

            if (!dishTags.Any())
            {
                return(Result <IEnumerable <DishView> > .Fail <IEnumerable <DishView> >(ExceptionConstants.DISHES_WERE_NOT_FOUND));
            }

            List <DishView> views = new List <DishView>();

            foreach (var dishTag in dishTags)
            {
                DishDB dish = await _context.Dishes.Where(_ => _.Id == dishTag.DishId).Include(c => c.DishTags).ThenInclude(sc => sc.Tag).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

                DishView viewItem = _mapper.Map <DishView>(dish);
                viewItem.TotalCost = Math.Round(viewItem.Price * (1 - viewItem.Sale / 100), 2);
                viewItem.TagList   = new HashSet <TagToAdd>();
                foreach (var item in dish.DishTags)
                {
                    var tagItem = await _context.Tags.Where(_ => _.Id == item.TagId).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

                    viewItem.TagList.Add(_mapper.Map <TagToAdd>(tagItem));
                }
                views.Add(viewItem);
            }

            return(Result <IEnumerable <DishView> > .Ok(_mapper.Map <IEnumerable <DishView> >(views)));
        }
Esempio n. 3
0
        public IActionResult NewDish()
        {
            DishView    thisdish = new DishView();
            List <Chef> AllChefs = dbContext.Chefs.ToList();

            thisdish.ListofChefs = AllChefs;
            return(View(thisdish));
        }
        public async Task <Result <DishView> > UpdateAsync(DishToUpdate dish, CancellationToken cancellationToken = default)
        {
            DishDB dishToUpdate = await _context.Dishes.IgnoreQueryFilters().Include(c => c.DishTags).ThenInclude(sc => sc.Tag).AsNoTracking().FirstOrDefaultAsync(_ => _.Id == dish.Id);

            if (dishToUpdate is null)
            {
                return(Result <DishView> .Quite <DishView>(ExceptionConstants.DISH_WAS_NOT_FOUND));
            }
            var dishTagList = await _context.DishTags.Where(_ => _.DishId == dish.Id).AsNoTracking().ToListAsync(cancellationToken);

            _context.DishTags.RemoveRange(dishTagList);
            dishToUpdate.DishTags.Clear();
            await _context.SaveChangesAsync(cancellationToken);

            try
            {
                dishToUpdate          = _mapper.Map <DishDB>(dish);
                dishToUpdate.Modified = DateTime.Now;

                _context.Entry(dishToUpdate).Property(c => c.Name).IsModified        = true;
                _context.Entry(dishToUpdate).Property(c => c.Composition).IsModified = true;
                _context.Entry(dishToUpdate).Property(c => c.Description).IsModified = true;
                _context.Entry(dishToUpdate).Property(c => c.Price).IsModified       = true;
                _context.Entry(dishToUpdate).Property(c => c.Weight).IsModified      = true;
                _context.Entry(dishToUpdate).Property(c => c.Sale).IsModified        = true;
                _context.Entry(dishToUpdate).Property(c => c.Modified).IsModified    = true;

                await UpdateTagLinks(dish.TagNames, dishToUpdate);

                await _context.SaveChangesAsync(cancellationToken);

                DishDB dishAfterAdding = await _context.Dishes.Where(_ => _.Id == dishToUpdate.Id).Include(c => c.DishTags).ThenInclude(sc => sc.Tag).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

                DishView view = _mapper.Map <DishView>(dishAfterAdding);
                view.TagList = CollectTagList(dishAfterAdding.DishTags, cancellationToken).Result;
                return(Result <DishView> .Ok(_mapper.Map <DishView>(view)));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(Result <DishView> .Fail <DishView>(ExceptionConstants.CANNOT_UPDATE_MODEL + ex.Message));
            }
            catch (DbUpdateException ex)
            {
                return(Result <DishView> .Fail <DishView>(ExceptionConstants.CANNOT_UPDATE_MODEL + ex.Message));
            }
        }
Esempio n. 5
0
        public IActionResult ChangeCookingTime1(DishView dish)
        {
            ViewBag.email = Email();
            ViewBag.role  = Role();
            if (ModelState.IsValid)
            {
                var mapper = new MapperConfiguration(c => c.CreateMap <DishView, DishDTO>()).CreateMapper();
                var _dish  = mapper.Map <DishView, DishDTO>(dish);
                restaurantService.UpdateDish(_dish);
                return(RedirectToAction("Index"));
            }

            else
            {
                return(View(dish));
            }
        }
        /// <summary>
        /// Gets additional data and collects elements dishes views
        /// </summary>
        /// <param name="dishes">Dishes list</param>
        /// <param name="cancellationToken"></param>
        /// <returns>Dishes views</returns>
        private async Task <List <DishView> > CollectViews(List <DishDB> dishes, CancellationToken cancellationToken = default)
        {
            List <DishView> views = new List <DishView>();

            foreach (var dish in dishes)
            {
                DishView viewItem = _mapper.Map <DishView>(dish);
                viewItem.TotalCost = Math.Round(viewItem.Price * (1 - viewItem.Sale / 100), 2);
                viewItem.TagList   = new HashSet <TagToAdd>();
                foreach (var item in dish.DishTags)
                {
                    var tag = await _context.Tags.Where(_ => _.Id == item.TagId).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

                    viewItem.TagList.Add(_mapper.Map <TagToAdd>(tag));
                }
                views.Add(viewItem);
            }
            return(views);
        }
        public async Task <Result <DishView> > GetByIdAsync(string dishId, CancellationToken cancellationToken = default)
        {
            Guid id = Guid.Parse(dishId);

            try
            {
                DishDB dish = await _context.Dishes.IgnoreQueryFilters().Where(_ => _.Id == id).Include(c => c.DishTags).ThenInclude(sc => sc.Tag).FirstOrDefaultAsync(cancellationToken);

                if (dish is null)
                {
                    return(Result <DishView> .Fail <DishView>(ExceptionConstants.DISH_WAS_NOT_FOUND));
                }
                DishView view = _mapper.Map <DishView>(dish);
                view.TotalCost = Math.Round(view.Price * (1 - view.Sale / 100), 2);
                view.TagList   = CollectTagList(dish.DishTags, cancellationToken).Result;
                return(Result <DishView> .Ok(view));
            }
            catch (ArgumentNullException ex)
            {
                return(Result <DishView> .Fail <DishView>(ExceptionConstants.SOURCE_IS_NULL + ex.Message));
            }
        }
Esempio n. 8
0
 public IActionResult AddDish(DishView dish)
 {
     if (ModelState.IsValid)
     {
         DateTime Today = DateTime.Now;
         if (dish.Calories < 0)
         {
             ModelState.AddModelError("Calories", "That's not enough calories!");
             return(View("NewDish"));
         }
         Dish newdish = new Dish();
         newdish.Name      = dish.Name;
         newdish.Calories  = dish.Calories;
         newdish.ChefId    = dish.ChefId;
         newdish.Tastiness = dish.Tastiness;
         newdish.UpdatedAt = DateTime.Now;
         newdish.CreatedAt = DateTime.Now;
         dbContext.Dishes.Add(newdish);
         dbContext.SaveChanges();
         return(RedirectToAction("Dishes"));
     }
     return(View("NewDish"));
 }