Esempio n. 1
0
        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)));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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"));
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        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);
        }