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