コード例 #1
0
        public ActionResult Create(CreateProductRequest request)
        {
            if (!ModelState.IsValid)
            {
                return View();
            }

            var product = new Product
            {
                CategoryId = request.CategoryId,
                Description = request.Description,
                MSRP = request.MSRP,
                Name = request.Name,
                Price = request.Price,
                SKU = request.SKU,
                Summary = request.Summary,
                LastUpdated = DateTime.UtcNow,
                LastUpdatedUserId = GetUserId(this),
            };

            _context.Products.Add(product);
            _context.SaveChanges();

            TempData.SuccessMessage($"Successfully created \"{product.Name}\"");

            return RedirectToAction(nameof(Index));
        }
コード例 #2
0
        public ActionResult Add(string sku, int quantity = 1)
        {
            var product = _context.Products.FirstOrDefault(x => x.SKU == sku);

            var cart = GetCart();

            var item = cart.Items.FirstOrDefault(x => x.SKU == sku);

            if (item == null)
            {
                item = new ShoppingCartItem
                {
                    SKU      = product?.SKU,
                    Name     = product?.Name,
                    MSRP     = (product?.MSRP).GetValueOrDefault(),
                    Price    = (product?.Price).GetValueOrDefault(),
                    Quantity = quantity,
                };

                cart.Items.Add(item);
            }
            else
            {
                item.Quantity += quantity;
            }

            if (item.Quantity <= 0)
            {
                cart.Items.Remove(item);
            }

            try
            {
                _context.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                var errors = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors);

                foreach (var error in errors)
                {
                    ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
                }
            }

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

            TempData["SuccessMessage"] = $"Successfully added {item.Name} to the cart";

            return(RedirectToAction("Index", "Cart"));
        }
コード例 #3
0
        public UpdateProductResponse Update(UpdateProductRequest request)
        {
            var existing = _context.Products.Find(request.Id);

            if (existing == null)
            {
                return(new UpdateProductResponse
                {
                    Success = false,
                    Message = $"Couldn't update product #\"{request.Id}\": product not found!",
                });
            }

            var hasPriceChanged = existing.Price != request.Price;

            existing.CategoryId  = request.CategoryId;
            existing.Description = request.Description;
            existing.MSRP        = request.MSRP;
            existing.Name        = request.Name;
            existing.Price       = request.Price;
            existing.SKU         = request.SKU;
            existing.Summary     = request.Summary;

            existing.LastUpdated = DateTime.UtcNow;

            _context.SaveChanges();

            if (hasPriceChanged)
            {
                var cartsToUpdate =
                    _context.ShoppingCarts
                    .Include("Items")
                    .Where(cart => cart.Items.Any(x => x.SKU == request.SKU));

                foreach (var cart in cartsToUpdate)
                {
                    foreach (var cartItem in cart.Items.Where(x => x.SKU == request.SKU))
                    {
                        cartItem.Price = request.Price;
                    }

                    cart.Recalculate();
                }
            }

            _context.SaveChanges();

            return(new UpdateProductResponse
            {
                Success = true,
                Message = $"Successfully updated \"{request.Name}\"",
            });
        }
コード例 #4
0
        public ActionResult Create([Bind(Exclude = "Id")] Product product)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            product.LastUpdated       = DateTime.UtcNow;
            product.LastUpdatedUserId = GetUserId(this);

            _context.Products.Add(product);
            _context.SaveChanges();

            TempData["SuccessMessage"] =
                $"Successfully created \"{product.Name}\"";

            return(RedirectToAction(nameof(Index)));
        }