public async Task <IActionResult> Edit(int customerID, [FromForm] WishlistItemViewModel vm, string action) { if (_signInManager.IsSignedIn(User) && User.IsInRole(nameof(Customer))) { var itemID = vm.ItemID; if (!await _service.CheckIfItemExistsInWishlistAsync(customerID, itemID)) { return(NotFound()); } await _service.RemoveItem(customerID, itemID); } else { var wishlistVm = await GetWishlistFromSessionAsync(HttpContext); wishlistVm.Items.Remove(vm); HttpContext.Session.SetObjectAsJson(SESSION_KEY_WISHLIST, wishlistVm); } if (action != null && action == "move") { return(RedirectToAction("CreateWithoutRedirect", "Carts", new { type = vm.Category, id = vm.ItemID })); } return(RedirectToAction(nameof(Index))); }
public async Task <WishlistItemViewModel> CreateWishlistItemAsync(string type, int id) { WishlistItemViewModel wishlistItemVm = null; switch (type) { case nameof(Song): wishlistItemVm = await _context.Songs .AsNoTracking() .Where(s => s.ID == id) .MapSongToWishlistItemVM() .FirstOrDefaultAsync(); break; case nameof(Album): wishlistItemVm = await _context.Albums .AsNoTracking() .Where(a => a.ID == id) .MapAlbumToWishlistItemVM() .FirstOrDefaultAsync(); break; default: break; } return(wishlistItemVm); }
public async Task <IActionResult> CreateWithoutRedirect(string type, int id) { WishlistViewModel wishlistVm = await GetWishlistFromSessionAsync(HttpContext); if (!wishlistVm.Items.Any(item => item.Category == type && item.ItemID == id)) { WishlistItemViewModel wishlistItemVm = await _service.CreateWishlistItemAsync(type, id); wishlistVm.AddItem(wishlistItemVm); } wishlistVm = await MergeWishlistIfLoggedIn(wishlistVm); return(RedirectToAction("Index", "Carts")); }
public async Task <ActionResult <WishlistItemViewModel> > AddWishlistItem([FromRoute] int productId, CancellationToken cancellationToken) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } bool productExists = await _productService.ProductExists(productId, cancellationToken); if (!productExists) { return(NotFound()); } WishlistItemViewModel viewModel = await _wishlistService.AddWishlistItem(productId, cancellationToken); return(Ok(viewModel)); }
private async Task <List <WishlistItemViewModel> > GetWishlistItems(IReadOnlyCollection <WishlistItem> wishlistItems) { var items = new List <WishlistItemViewModel>(); foreach (var item in wishlistItems) { var itemModel = new WishlistItemViewModel { Id = item.Id, CatalogItemId = item.CatalogItemId }; var catalogItem = await _itemRepository.GetByIdAsync(item.CatalogItemId); itemModel.PictureUrl = _uriComposer.ComposePicUri(catalogItem.PictureUri); itemModel.ProductName = catalogItem.Name; items.Add(itemModel); } return(items); }
public async Task AddItemToWishlistAsync(WishlistItemViewModel wishlistItemVm, int customerID) { IPurchasable item = null; int? songID = null; int? albumID = null; switch (wishlistItemVm.Category) { case nameof(Song): item = await _context.Songs .AsNoTracking() .Where(s => s.ID == wishlistItemVm.ItemID) .FirstOrDefaultAsync(); songID = item.ID; break; case nameof(Album): item = await _context.Albums .AsNoTracking() .Where(a => a.ID == wishlistItemVm.ItemID) .FirstOrDefaultAsync(); albumID = item.ID; break; default: break; } var wishlist = await _context.Customers .Include(c => c.Wishlist) .ThenInclude(c => c.WishlistItem) .Where(c => c.ID == customerID) .Select(c => c.Wishlist) .FirstOrDefaultAsync(); wishlist.AddWishlistItem(songID, albumID, item.Price); await _context.SaveChangesAsync(); }
public async Task <WishlistItemViewModel> AddWishlistItem(int productId, CancellationToken cancellationToken = default) { Product product = await _context.Products .Include(p => p.Images) .SingleOrDefaultAsync(p => p.ProductId == productId, cancellationToken); AppUser user = await _authService.GetUser(_user, cancellationToken); WishlistItem item = new WishlistItem { User = user, Product = product, }; await _context.WishlistItems.AddAsync(item, cancellationToken); await _context.SaveChangesAsync(cancellationToken); WishlistItemViewModel viewModel = _mapper.Map <WishlistItem, WishlistItemViewModel>(item); return(viewModel); }