Exemplo n.º 1
0
        public async Task <CartExtendedResponse> Handle(
            CreateCartCommand command,
            CancellationToken cancellationToken)
        {
            var entity = new Entities.Cart
            {
                Items = command.ItemsIds.Select(x => new CartItem {
                    CartItemId = new Guid(x), Quantity = 1
                }).ToList(),
                User = new CartUser {
                    Email = command.UserEmail
                },
                ValidityDate = DateTimeOffset.Now.AddMonths(2),
                Id           = Guid.NewGuid().ToString()
            };

            var result = await _repository.AddOrUpdateAsync(entity);

            var response = _mapper.Map <CartExtendedResponse>(result);

            var tasks = response.Items
                        .Select(async x => await _catalogService.EnrichCartItem(x, cancellationToken));

            response.Items = await Task.WhenAll(tasks);

            return(response);
        }
Exemplo n.º 2
0
        public async Task <ResponseGeneric> Handle(ChangeQuantityRequest request, CancellationToken cancellationToken)
        {
            request.Validate();
            if (request.Invalid)
            {
                AddNotifications(request.Notifications);
                return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Item inválido.", request.Notifications));
            }

            Entities.User user = this.userRepository.GetBy(x => x.Id == request.UserId);

            if (user == null)
            {
                AddNotification("User", "Usuário inválido");
                return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Usuário inválido.", Notifications));
            }

            Entities.Cart cartAdd = this.cartRepository.GetBy(x => x.Id == request.Id, x => x.User);

            if (cartAdd == null)
            {
                AddNotification("Cart", "Item inválido");
                return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Item não encontrado.", Notifications));
            }

            if (cartAdd.User.Id != user.Id)
            {
                AddNotification("User", "Operação não permitida");
                return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Usuário inválido.", Notifications));
            }



            if (request.Operation == Enums.ECartOperation.Add)
            {
                cartAdd.incrementQuantity();
            }
            else if (request.Operation == Enums.ECartOperation.Rem)
            {
                if (cartAdd.Quantity == 1)
                {
                    AddNotification("User", "Operação não permitida");
                    return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Quantidade é 1.", Notifications));
                }

                cartAdd.decrementQuantity();
            }

            this.cartRepository.Update(cartAdd);

            if (await this.unitOfWork.SaveChanges() == 0)
            {
                AddNotification("Cart", "Erro ao adicionar/remover o item do carrinho");
                return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho!", Notifications));
            }

            var response = new ResponseGeneric(true, "Item adicionar/removido com sucesso do carrinho", null);

            return(await Task.FromResult(response));
        }
        public IActionResult CreateCart()
        {
            var cart = new Entities.Cart();

            SaveCartToCache(cart);
            return(Ok(cart));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> OnGetAsync()
        {
            Cart = Entities.Cart.GetFrom(HttpContext.Session);

            var movieSessionIds = Cart.CartItems.Select(ci => ci.MovieSessionId);

            if (Cart.CartItems.Count() == 0)
            {
                return(Page());
            }

            var movieSessions = await _dbContext.MovieSessions
                                .Include(ms => ms.Movie)
                                .Include(ms => ms.Theater)
                                .Where(ms => movieSessionIds.Contains(ms.Id))
                                .AsNoTracking()
                                .ToListAsync();

            foreach (var cartItem in Cart.CartItems)
            {
                cartItem.MovieSession = movieSessions.FirstOrDefault(ms => ms.Id == cartItem.MovieSessionId);
            }

            return(Page());
        }
Exemplo n.º 5
0
        public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingInfo)
        {
            using (SmtpClient smtpClient = new SmtpClient())
            {
                smtpClient.EnableSsl             = emailSettings.UseSsl;
                smtpClient.Host                  = emailSettings.Servername;
                smtpClient.Port                  = emailSettings.ServerPort;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials
                    = new NetworkCredential(emailSettings.Username, emailSettings.Password);

                if (emailSettings.WriteAsFile)
                {
                    smtpClient.DeliveryMethod          = SmtpDeliveryMethod.SpecifiedPickupDirectory;
                    smtpClient.PickupDirectoryLocation = emailSettings.FileLocation;
                    smtpClient.EnableSsl = false;
                }

                StringBuilder body = new StringBuilder()
                                     .AppendLine("A new order has been submitted")
                                     .AppendLine("---")
                                     .AppendLine("Items:");

                foreach (var line in cart.Lines)
                {
                    var subtotal = line.Product.Price * line.Quantity;
                    body.AppendFormat("{0} x {1} (subtotal: {2:c}", line.Quantity,
                                      line.Product.Name,
                                      subtotal);
                }

                body.AppendFormat("Total order value: {0:c}", cart.ComputeTotalValue())
                .AppendLine("---")
                .AppendLine("Ship to:")
                .AppendLine(shippingInfo.Name)
                .AppendLine(shippingInfo.Line1)
                .AppendLine(shippingInfo.Line2 ?? "")
                .AppendLine(shippingInfo.Line3 ?? "")
                .AppendLine(shippingInfo.City)
                .AppendLine(shippingInfo.State ?? "")
                .AppendLine(shippingInfo.Country)
                .AppendLine(shippingInfo.Zip)
                .AppendLine("---")
                .AppendFormat("Gift wrap: {0}", shippingInfo.GiftWrap ? "Yes" : "No");

                MailMessage mailMessage = new MailMessage(
                    emailSettings.MailFromAddress,                     // From
                    emailSettings.MailToAddress,                       // To
                    "New order submitted!",                            // Subject
                    body.ToString());                                  // Body

                if (emailSettings.WriteAsFile)
                {
                    mailMessage.BodyEncoding = Encoding.ASCII;
                }

                smtpClient.Send(mailMessage);
            }
        }
        public void ClearCart(Entities.Cart cart)
        {
            foreach (var cartItem in cart.CartItems)
            {
                this.cartItemProvider.Delete(cartItem);
            }

            this.SaveChanges();
        }
        public void RemoveFromCart(Entities.Cart cart, Guid productId)
        {
            var cartItem = this.GetCartItemByProductId(productId);

            if (cartItem != null)
            {
                this.cartItemProvider.Delete(cartItem);
                this.SaveChanges();
            }
        }
Exemplo n.º 8
0
        public void ProcessorOrder(Entities.Cart cart, Entities.ShoppingDetails shoppingDetails)
        {
            using (var smtpClient = new SmtpClient())
            {
                smtpClient.EnableSsl             = emailSetting.UseSsl;
                smtpClient.Host                  = emailSetting.ServerName;
                smtpClient.Port                  = emailSetting.ServerPort;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials           = new NetworkCredential(emailSetting.Username, emailSetting.Password);

                if (emailSetting.WriteAsFile)
                {
                    smtpClient.DeliveryMethod          = SmtpDeliveryMethod.SpecifiedPickupDirectory;
                    smtpClient.PickupDirectoryLocation = emailSetting.FileLication;
                    smtpClient.EnableSsl = false;
                }

                StringBuilder body = new StringBuilder()
                                     .AppendLine("New order compete")
                                     .AppendLine("---")
                                     .AppendLine("Goods");

                foreach (var line in cart.Lines)
                {
                    var subtotal = line.Book.Price * line.Quantity;
                    body.AppendFormat("{0} x {1} (Total: {2:c}", line.Quantity, line.Book.Name, subtotal);
                }

                body.AppendFormat("Total cost: {0:c}", cart.ComputeTotalValue())
                .AppendLine("---")
                .AppendLine("Delivery:")
                .AppendLine(shoppingDetails.Name)
                .AppendLine(shoppingDetails.Line1)
                .AppendLine(shoppingDetails.Line2 ?? "")
                .AppendLine(shoppingDetails.Line3 ?? "")
                .AppendLine(shoppingDetails.City)
                .AppendLine(shoppingDetails.Country)
                .AppendLine("---")
                .AppendFormat("Gift wrap: {0}", shoppingDetails.GiftWrap ? "Yes":"No");

                MailMessage mailMessage = new MailMessage(
                    emailSetting.MailFromAdress,
                    emailSetting.MailToAdress,
                    "New order complete!",
                    body.ToString()
                    );

                if (emailSetting.WriteAsFile)
                {
                    mailMessage.BodyEncoding = Encoding.UTF8;
                }

                smtpClient.Send(mailMessage);
            }
        }
Exemplo n.º 9
0
        public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingDetails)
        {
            using (var smtpClient = new SmtpClient())
            {
                smtpClient.EnableSsl             = emailSettings.UseSsl;
                smtpClient.Host                  = emailSettings.ServerName;
                smtpClient.Port                  = emailSettings.ServerPort;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials           = new NetworkCredential(emailSettings.Username, emailSettings.Password);

                if (emailSettings.WriteAsFile)
                {
                    smtpClient.DeliveryMethod          = SmtpDeliveryMethod.SpecifiedPickupDirectory;
                    smtpClient.PickupDirectoryLocation = emailSettings.FileLocation;
                    smtpClient.EnableSsl = false;
                }

                StringBuilder body = new StringBuilder()
                                     .AppendLine("Нове замовлення опрацьоване")
                                     .AppendLine("---")
                                     .AppendLine("Товари:");

                foreach (var line in cart.Lines)
                {
                    var subtotal = line.Product.Price * line.Quantity;
                    body.AppendFormat("{0} x {1} (Всього: {2:c}", line.Quantity, line.Product.Name, subtotal);
                }

                body.AppendFormat("Загальна вартість: {0:c}", cart.ComputeTotalValue())
                .AppendLine("---")
                .AppendLine("Доставка:")
                .AppendLine(shippingDetails.Name)
                .AppendLine(shippingDetails.Line1)
                .AppendLine(shippingDetails.Line2 ?? "")
                .AppendLine(shippingDetails.Line3 ?? "")
                .AppendLine(shippingDetails.City)
                .AppendLine(shippingDetails.Phone)
                .AppendLine("---")
                .AppendFormat("Подарункове пакування: {0}", shippingDetails.GiftWrap ? "Так" : "Ні");

                MailMessage mailMessage = new MailMessage(
                    emailSettings.MailFromAddress,
                    emailSettings.MailToAddress,
                    "Нове замовлення відправлене!",
                    body.ToString()
                    );

                if (emailSettings.WriteAsFile)
                {
                    mailMessage.BodyEncoding = Encoding.UTF8;
                }

                smtpClient.Send(mailMessage);
            }
        }
Exemplo n.º 10
0
        public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingDetails)
        {
            using (var smtpClient = new SmtpClient())
            {
                smtpClient.EnableSsl             = emailSettings.UseSsl;
                smtpClient.Host                  = emailSettings.ServerName;
                smtpClient.Port                  = emailSettings.ServerPort;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials           = new NetworkCredential(emailSettings.Username, emailSettings.Password);

                if (emailSettings.WriteAsFile)
                {
                    smtpClient.DeliveryMethod          = SmtpDeliveryMethod.SpecifiedPickupDirectory;
                    smtpClient.PickupDirectoryLocation = emailSettings.FileLocation;
                    smtpClient.EnableSsl = false;
                }

                StringBuilder body = new StringBuilder()
                                     .AppendLine("Новый заказ обработан")
                                     .AppendLine("---")
                                     .AppendLine("Товары:");

                foreach (var line in cart.Lines)
                {
                    var subtotal = line.Book.Price * line.Quantity;
                    body.AppendFormat("{0} x {1} (итого: {2:c}", line.Quantity, line.Book.Name, subtotal);
                }

                body.AppendFormat("Общая стоимость: {0:c}", cart.ComputeTotalValue())
                .AppendLine("---")
                .AppendLine("Доставка:")
                .AppendLine(shippingDetails.Name)
                .AppendLine(shippingDetails.Line1)
                .AppendLine(shippingDetails.Line2 ?? "")
                .AppendLine(shippingDetails.Line3 ?? "")
                .AppendLine(shippingDetails.City)
                .AppendLine(shippingDetails.Country)
                .AppendLine("---")
                .AppendFormat("Упаковка: {0}", shippingDetails.GiftWrap ? "Да" : "Нет");

                MailMessage mailMessage = new MailMessage(
                    emailSettings.MailFromAddress,
                    emailSettings.MailToAddress,
                    "Новый заказ отправлен!",
                    body.ToString()
                    );

                if (emailSettings.WriteAsFile)
                {
                    mailMessage.BodyEncoding = Encoding.UTF8;
                }

                smtpClient.Send(mailMessage);
            }
        }
Exemplo n.º 11
0
        public async Task <Entities.Cart> UpdateCart(Entities.Cart cart)
        {
            var cartEdit = await _context.Redis.StringSetAsync(cart.UserName, JsonSerializer.Serialize(cart));

            if (!cartEdit)
            {
                return(null);
            }

            return(await GrtCart(cart.UserName));
        }
        public void ProcessReservation(Entities.Cart cart, Entities.BookingDetails bookingDetails)
        {
            using (var smtpClient = new SmtpClient())
            {
                smtpClient.EnableSsl             = emailSettings.UseSsl;
                smtpClient.Host                  = emailSettings.ServerName;
                smtpClient.Port                  = emailSettings.ServerPort;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials           = new NetworkCredential(emailSettings.Username, emailSettings.Password);

                if (emailSettings.WriteAsFile)
                {
                    smtpClient.DeliveryMethod          = SmtpDeliveryMethod.SpecifiedPickupDirectory;
                    smtpClient.PickupDirectoryLocation = @"c:\bookingshop_emails";
                    smtpClient.EnableSsl = false;
                }

                StringBuilder body = new StringBuilder()
                                     .AppendLine("Новая заявка обработана")
                                     .AppendLine("---")
                                     .AppendLine("Подробности заявки:");

                foreach (var line in cart.Lines)
                {
                    var sum = line.Hotel.PriceForPerson * bookingDetails.PersonAmount * bookingDetails.NightsAmount;
                    body.AppendFormat("Общая стоимость: {0:c}", sum);
                }

                body.AppendFormat(":")
                .AppendLine("---")
                .AppendLine(bookingDetails.FullName + "\n")
                .AppendLine(bookingDetails.ArrivalDate + "\n")
                .AppendLine(bookingDetails.PersonAmount + "\n")
                .AppendLine(bookingDetails.NightsAmount + "\n")
                .AppendLine("---")
                .AppendLine("Почта для обратной связи: \n" + bookingDetails.Email);

                MailMessage mailMessage = new MailMessage(
                    emailSettings.MailFromAddress,
                    emailSettings.MailToAddress,
                    "Новая заявка отправлена!",
                    body.ToString()
                    );

                if (emailSettings.WriteAsFile)
                {
                    mailMessage.BodyEncoding = Encoding.UTF8;
                }

                smtpClient.Send(mailMessage);
            }
        }
Exemplo n.º 13
0
        public static Cart GetFrom(ISession session)
        {
            var cart = session.Get <Cart>("cart");

            if (cart == null)
            {
                cart = new Entities.Cart
                {
                    CartItems = new List <CartItem>()
                };
            }
            return(cart);
        }
        public void UpdateCartItem(Entities.Cart cart, Guid productId, int quantity)
        {
            var cartItem = this.GetCartItemByProductId(productId);

            if (cartItem == null)
            {
                this.AddToCart(cart, productId, quantity);
            }
            else
            {
                cartItem.Quantity = quantity;
            }

            this.SaveChanges();
        }
Exemplo n.º 15
0
        public async Task GivenItemNotInCart_AddOrUpdate_SetsCountToOne()
        {
            //arrange
            var actual = new Entities.Cart {
                Count = 1
            };

            Mapper.Setup(mapper => mapper.Map <Entities.Cart>(It.IsAny <Cart>())).Returns(actual);
            var sut = new CartService(CartCalculatorService.Object, CartRepository.Object, Mapper.Object);

            //act
            await sut.AddOrUpdate(new Cart());

            //assert
            Assert.Equal(1, actual.Count);
        }
        public void UpdateCartItems(Entities.Cart cart, IEnumerable <CartItem> cartItems)
        {
            foreach (var cartItem in cartItems)
            {
                var persistedCartItem = cart.CartItems.First(i => i.Id == cartItem.Id);

                if (persistedCartItem == null)
                {
                    continue;
                }

                persistedCartItem.Product  = cartItem.Product;
                persistedCartItem.Quantity = cartItem.Quantity;
            }

            this.SaveChanges();
        }
Exemplo n.º 17
0
        public async Task <IActionResult> OnGetAsync()
        {
            var cart = Entities.Cart.GetFrom(HttpContext.Session);

            // No items in the cart
            if (cart.CartItems.Count() == 0)
            {
                return(RedirectToPage("/Cart/Index"));
            }

            // If there are remaining seats to be filled in
            if (cart.RemainingSeats != 0)
            {
                TempData["Danger"] = $"There are still {cart.RemainingSeats} seat{(cart.RemainingSeats != 1 ? "s" : "")} remaining to be filled in";
                return(RedirectToPage("/Cart/Index"));
            }

            //// If a seat is missing, redirect back to cart page
            //var hasSelectedAllSeats = cart.CartItems.All(
            //    ci => ci.Seats != null &&
            //    ci.Seats.Count(s => !string.IsNullOrWhiteSpace(s)) == ci.TicketQuantity
            //);
            //if (hasSelectedAllSeats == false)
            //{
            //    TempData["Danger"] = "You can only proceed to cart after you have selected all your seats";
            //    return RedirectToPage("/Cart/Index");
            //}

            // Get all movie sessions
            var movieSessionIds = cart.CartItems.Select(ci => ci.MovieSessionId);
            var movieSessions   = await _context.MovieSessions
                                  .Include(ms => ms.Movie)
                                  .Include(ms => ms.Theater)
                                  .Where(ms => movieSessionIds.Contains(ms.Id))
                                  .AsNoTracking()
                                  .ToListAsync();

            foreach (var cartItem in cart.CartItems)
            {
                cartItem.MovieSession = movieSessions.FirstOrDefault(ms => ms.Id == cartItem.MovieSessionId);
            }

            Cart = cart;
            return(Page());
        }
Exemplo n.º 18
0
        public async Task <ResponseGeneric> Handle(RemoveProductRequest request, CancellationToken cancellationToken)
        {
            request.Validate();
            if (request.Invalid)
            {
                AddNotifications(request.Notifications);
                return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho! Item inválido.", request.Notifications));
            }

            Entities.User user = this.userRepository.GetBy(x => x.Id == request.UserId);

            if (user == null)
            {
                AddNotification("User", "Usuário inválido");
                return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho! Usuário inválido.", Notifications));
            }

            Entities.Cart cartAdd = this.cartRepository.GetBy(x => x.Id == request.Id, x => x.User);

            if (cartAdd == null)
            {
                AddNotification("Cart", "Item inválido");
                return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho! Item não encontrado.", Notifications));
            }

            if (cartAdd.User.Id != user.Id)
            {
                AddNotification("User", "Operação não permitida");
                return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho! Usuário inválido.", Notifications));
            }

            cartAdd.setRemoved();

            this.cartRepository.Update(cartAdd);

            if (await this.unitOfWork.SaveChanges() == 0)
            {
                AddNotification("Cart", "Erro ao remover o item do carrinho");
                return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho!", Notifications));
            }

            var response = new ResponseGeneric(true, "Item removido com sucesso do carrinho", null);

            return(await Task.FromResult(response));
        }
Exemplo n.º 19
0
        public async Task <IActionResult> OnPostCheckOutAsync()
        {
            Cart = await _cartRepository.GetCartByUserName("test");

            if (!ModelState.IsValid)
            {
                return(Page());
            }

            Order.UserName   = "******";
            Order.TotalPrice = Cart.TotalPrice;

            await _orderRepository.CheckOut(Order);

            await _cartRepository.ClearCart("test");

            return(RedirectToPage("Confirmation", "OrderSubmitted"));
        }
Exemplo n.º 20
0
        public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingInfo)
        {
            using (var smtpClient = new SmtpClient())
            {
                smtpClient.EnableSsl             = emailSettings.UseSsl;
                smtpClient.Host                  = emailSettings.ServerName;
                smtpClient.Port                  = emailSettings.ServerPort;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials           = new NetworkCredential(emailSettings.UserName, emailSettings.Password);

                StringBuilder emailBody = new StringBuilder()
                                          .AppendLine("A new order has been submitted")
                                          .AppendLine("---")
                                          .AppendLine("Items:");
                foreach (var line in cart.CartItems)
                {
                    var subtotal = line.Product.Price * line.Quantity;
                    emailBody.AppendFormat("{0} x {1} (subtotal: {2:c})\n",
                                           line.Quantity,
                                           line.Product.Name,
                                           subtotal);
                }
                emailBody.AppendFormat("Total order value: {0:c}",
                                       cart.ComputeTotalPrice())
                .AppendLine("---")
                .AppendLine("Ship to:")
                .AppendLine(shippingInfo.Name)
                .AppendLine(shippingInfo.AddressLine1)
                .AppendLine(shippingInfo.AddressLine2 ?? "")
                .AppendLine(shippingInfo.AddressLine3 ?? "")
                .AppendLine(shippingInfo.City)
                .AppendLine(shippingInfo.State ?? "")
                .AppendLine(shippingInfo.Country)
                .AppendLine(shippingInfo.Zip)
                .AppendLine("---")
                .AppendFormat("Gift wrap: {0}", shippingInfo.GiftWrap ? "Yes" : "No");
                MailMessage mailMessage = new MailMessage(new MailAddress(emailSettings.MailFromAddress).Address,
                                                          new MailAddress(emailSettings.MailToAddress).Address,
                                                          "New order submitted!",
                                                          emailBody.ToString());

                smtpClient.Send(mailMessage);
            }
        }
Exemplo n.º 21
0
        private async Task RemoveItemsInCart(string itemToRemove, Entities.Cart cart)
        {
            if (string.IsNullOrEmpty(itemToRemove))
            {
                return;
            }

            var toDelete = cart?.Items?.Where(x => x.CartItemId.ToString() == itemToRemove).ToList();

            if (toDelete == null || toDelete.Count == 0)
            {
                return;
            }

            foreach (var item in toDelete)
            {
                cart.Items?.Remove(item);
            }

            await _cartRepository.AddOrUpdateAsync(cart);
        }
Exemplo n.º 22
0
        public IActionResult OnPostAddToCart()
        {
            if (!ModelState.IsValid)
            {
                return(RedirectToLocal(ReturnUrl));
            }

            var cart = HttpContext.Session.Get <Entities.Cart>("cart");

            if (cart == null)
            {
                cart = new Entities.Cart
                {
                    CartItems = new List <CartItem>()
                };
            }
            cart.Add(CartItem);
            cart.SaveTo(HttpContext.Session);

            TempData["Success"] = "Successfully added movie session to cart";
            return(RedirectToPage("/Cart/Index"));
        }
        public void AddToCart(Entities.Cart cart, Guid productId, int quantity)
        {
            var cartItem = this.GetCartItemByProductId(productId);

            if (cartItem == null)
            {
                var product = this.productProvider.GetBy(p => p.Id == productId).SingleOrDefault();

                if (product == null)
                {
                    throw new ArgumentException("Product not found.");
                }

                cartItem = this.CreateCartItem(product, quantity);
                cart.CartItems.Add(cartItem);
            }
            else
            {
                cartItem.Quantity += quantity;
            }

            this.SaveChanges();
        }
Exemplo n.º 24
0
        public async Task <Entities.Cart> CreateCart(CreateCartRequest payload)
        {
            var product = await GetProductBySKU(payload.Item.SKU);

            var cart = new Entities.Cart()
            {
                CustomerId = payload.CustomerID,
                Status     = STATUS_PENDING,
                Items      = new[]
                {
                    new Entities.CartItem()
                    {
                        Price    = product.Price.Amount * payload.Item.Quantity,
                        Scale    = product.Price.Scale,
                        Quantity = payload.Item.Quantity,
                        Product  = product
                    }
                }
            };

            _cartsCollection.InsertOne(cart);

            return(cart);
        }
Exemplo n.º 25
0
 public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingDetails)
 {
 }
 private void SaveCartToCache(Entities.Cart cart) => _cache.Set(cart.Guid, cart);
        public async Task <ResponseGeneric> Handle(AddProductInCartRequest request, CancellationToken cancellationToken)
        {
            request.Validate();
            if (request.Invalid)
            {
                AddNotifications(request.Notifications);
                return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho! Item inválido.", request.Notifications));
            }

            Entities.Product product = this.productRepository.GetBy(x => x.Id == request.ProductId);

            if (product == null)
            {
                AddNotification("Product", "Produto inválido");
                return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho! Produto inválido.", Notifications));
            }

            Entities.User user = this.userRepository.GetBy(x => x.Id == request.UserId);

            if (user == null)
            {
                AddNotification("User", "Usuário inválido");
                return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho! Usuário inválido.", Notifications));
            }

            Entities.Cart cartAdd = this.cartRepository.GetBy(x => x.Product.Id == product.Id && x.User.Id == user.Id && x.Status == Enums.ECartStatus.Added && x.Size == request.Size, x => x.Product);

            if (cartAdd == null)
            {
                cartAdd = new Entities.Cart(request.Size, request.Quantity, request.Origin);
                cartAdd.setProduct(product);

                cartAdd.setUser(user);

                this.cartRepository.Add(cartAdd);

                if (cartAdd == null)
                {
                    AddNotification("Cart", "Carrinho inválido");
                    return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho! Item inválido.", Notifications));
                }
            }
            else
            {
                cartAdd.incrementQuantity();

                this.cartRepository.Update(cartAdd);
            }


            if (await this.unitOfWork.SaveChanges() == 0)
            {
                AddNotification("Cart", "Erro ao salvar item no carrinho");
                return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho!", Notifications));
            }


            cartAdd.User.SetPassword(null);

            AddProductInCartResponse modelResponse = new AddProductInCartResponse(cartAdd.Id, cartAdd.Size, cartAdd.Quantity, cartAdd.Product.Id, cartAdd.Origin);

            var response = new ResponseGeneric(true, "Item adicionado com sucesso ao carrinho", modelResponse);

            return(await Task.FromResult(response));
        }
Exemplo n.º 28
0
 public async Task <ActionResult <Entities.Cart> > UpdateCart([FromBody] Entities.Cart cart)
 {
     return(Ok(await _repo.UpdateCart(cart)));
 }
Exemplo n.º 29
0
        public async Task <IActionResult> OnGetAsync()
        {
            Cart = await _cartRepository.GetCartByUserName("test");

            return(Page());
        }
Exemplo n.º 30
0
 public async Task <IActionResult> UpdateCartAsync([FromBody] Entities.Cart cart)
 {
     return(Ok(await _cartService.UpdateCartAsync(cart)));
 }