Пример #1
0
        public async Task <ActionResult> RemoveFromBasket([FromBody] BasketRequestModel requestModel)
        {
            var basket = _db.Baskets
                         .Include(b => b.User)
                         .Where(b => b.User.Email == GetUser() && b.Status == BasketStatus.NotOrdered)
                         .Include(b => b.Products)
                         .ThenInclude(p => p.Product)
                         .FirstOrDefault();
            var entry = basket.Products.Where(x =>
                                              x.Product.Id == requestModel.ProductId)
                        .FirstOrDefault();

            if (entry != null)
            {
                entry.Count -= requestModel.Count;
                if (entry.Count == 0)
                {
                    _db.BasketEntries.Remove(entry);
                    _db.Baskets.Update(basket);
                }
                else
                {
                    _db.BasketEntries.Update(entry);
                }
                await _db.SaveChangesAsync();

                return(Ok());
            }
            return(NotFound());
        }
Пример #2
0
        public async Task <IActionResult> Post(BasketRequestModel request)
        {
            var sellerClaim   = this.User.Claims.FirstOrDefault(x => x.Type == AccountConstants.Claims.OrganisationIdClaim);
            var isSellerClaim = this.User.Claims.FirstOrDefault(x => x.Type == JwtClaimTypes.Role && x.Value == AccountConstants.Roles.Seller);
            var serviceModel  = new UpdateBasketServiceModel
            {
                Id       = request.Id ?? Guid.NewGuid(),
                IsSeller = isSellerClaim != null,
                Items    = request.Items.OrEmptyIfNull().Select(x => new UpdateBasketItemServiceModel
                {
                    ProductId         = x.ProductId,
                    ProductSku        = x.ProductSku,
                    ProductName       = x.ProductName,
                    PictureUrl        = x.PictureUrl,
                    Quantity          = x.Quantity,
                    ExternalReference = x.ExternalReference,
                    DeliveryFrom      = x.DeliveryFrom,
                    DeliveryTo        = x.DeliveryTo,
                    MoreInfo          = x.MoreInfo
                }),
                Language       = CultureInfo.CurrentCulture.Name,
                Username       = this.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value,
                OrganisationId = GuidHelper.ParseNullable(sellerClaim?.Value)
            };

            var validator        = new UpdateBasketModelValidator();
            var validationResult = await validator.ValidateAsync(serviceModel);

            if (validationResult.IsValid)
            {
                var basket = await this.basketService.UpdateAsync(serviceModel);

                if (basket != null)
                {
                    var response = new BasketResponseModel
                    {
                        Id    = basket.Id,
                        Items = basket.Items.OrEmptyIfNull().Select(x => new BasketItemResponseModel
                        {
                            ProductId         = x.ProductId,
                            ProductSku        = x.ProductSku,
                            ProductName       = x.ProductName,
                            PictureUrl        = x.PictureUrl,
                            Quantity          = x.Quantity,
                            ExternalReference = x.ExternalReference,
                            DeliveryFrom      = x.DeliveryFrom,
                            DeliveryTo        = x.DeliveryTo,
                            MoreInfo          = x.MoreInfo
                        })
                    };

                    return(this.StatusCode((int)HttpStatusCode.OK, response));
                }
            }

            throw new CustomException(string.Join(ErrorConstants.ErrorMessagesSeparator, validationResult.Errors.Select(x => x.ErrorMessage)), (int)HttpStatusCode.UnprocessableEntity);
        }
Пример #3
0
        public async Task <ActionResult> AddToBasket([FromBody] BasketRequestModel requestModel)
        {
            // Find product
            var product = await _db.Products.FirstOrDefaultAsync(x => x.Id == requestModel.ProductId);

            if (product == null)
            {
                return(NotFound());                 // Invalid or unavailable product given
            }
            var userEmail = GetUser();

            var basket = await _db.Baskets
                         .Include(b => b.User)
                         .Where(b => b.User.Email == GetUser() && b.Status == BasketStatus.NotOrdered)
                         .Include(b => b.Products)
                         .FirstOrDefaultAsync();

            if (basket.Products == null)
            {
                basket.Products = new();
            }

            var entry = basket.Products.FirstOrDefault(x => x?.Product?.Id == requestModel.ProductId);

            if (entry == null)
            {
                basket.Products.Add(new BasketEntry
                {
                    Product = product,
                    Count   = requestModel.Count
                });
            }
            else
            {
                entry.Count += requestModel.Count;
            }

            DateTime orderDate = DateTime.Now;

            basket.OrderDate = orderDate;
            _db.Baskets.Update(basket);
            await _db.SaveChangesAsync();

            return(Ok());
        }