Пример #1
0
        public async Task <IActionResult> Index([FromBody] SaveBasketRequestModel model)
        {
            var token = await HttpContext.GetTokenAsync(ApiExtensionsConstants.TokenName);

            var language = CultureInfo.CurrentUICulture.Name;

            var reqCookie = this.Request.Cookies[BasketConstants.BasketCookieName];

            if (reqCookie is null)
            {
                reqCookie = Guid.NewGuid().ToString();
                var cookieOptions = new CookieOptions
                {
                    MaxAge = TimeSpan.FromDays(BasketConstants.BasketCookieMaxAge)
                };
                this.Response.Cookies.Append(BasketConstants.BasketCookieName, reqCookie, cookieOptions);
            }

            var id     = Guid.Parse(reqCookie);
            var basket = await this.basketRepository.SaveAsync(token, language, id,
                                                               model.Items.OrEmptyIfNull().Select(x => new BasketItem
            {
                ProductId         = x.ProductId,
                ProductSku        = x.Sku,
                ProductName       = x.Name,
                PictureUrl        = !string.IsNullOrWhiteSpace(x.ImageSrc) ? x.ImageSrc : (x.ImageId.HasValue ? this.mediaService.GetFileUrl(this.options.Value.MediaUrl, x.ImageId.Value, OrdersConstants.Basket.BasketProductImageMaxWidth, OrdersConstants.Basket.BasketProductImageMaxHeight, true) : null),
                Quantity          = x.Quantity,
                ExternalReference = x.ExternalReference,
                DeliveryFrom      = x.DeliveryFrom,
                DeliveryTo        = x.DeliveryTo,
                MoreInfo          = x.MoreInfo
            }));

            var basketResponseModel = new BasketResponseModel
            {
                Id = basket.Id
            };

            var productIds = basket.Items.OrEmptyIfNull().Select(x => x.ProductId.Value);

            if (productIds.OrEmptyIfNull().Any())
            {
                basketResponseModel.Items = basket.Items.OrEmptyIfNull().Select(x => new BasketItemResponseModel
                {
                    ProductId         = x.ProductId,
                    ProductUrl        = this.linkGenerator.GetPathByAction("Edit", "Product", new { Area = "Products", culture = CultureInfo.CurrentUICulture.Name, Id = x.ProductId }),
                    Name              = x.ProductName,
                    Sku               = x.ProductSku,
                    Quantity          = x.Quantity,
                    ExternalReference = x.ExternalReference,
                    ImageSrc          = x.PictureUrl,
                    ImageAlt          = x.ProductName,
                    DeliveryFrom      = x.DeliveryFrom,
                    DeliveryTo        = x.DeliveryTo,
                    MoreInfo          = x.MoreInfo
                });
            }

            return(this.StatusCode((int)HttpStatusCode.OK, basketResponseModel));
        }
Пример #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 <IActionResult> Index([FromForm] UploadMediaRequestModel model)
        {
            var importedOrderLines = this.orderFileService.ImportOrderLines(model.File);

            var basketItems = new List <BasketItem>();

            foreach (var orderLine in importedOrderLines)
            {
                var product = await this.productsRepository.GetProductAsync(
                    await HttpContext.GetTokenAsync(ApiExtensionsConstants.TokenName),
                    CultureInfo.CurrentUICulture.Name,
                    orderLine.Sku);

                if (product == null)
                {
                    this.logger.LogError($"Product for SKU {orderLine.Sku} and language {CultureInfo.CurrentUICulture.Name} couldn't be found.");
                }
                else
                {
                    var basketItem = new BasketItem
                    {
                        ProductId         = product.Id,
                        ProductSku        = product.Sku,
                        ProductName       = product.Name,
                        PictureUrl        = product.Images.OrEmptyIfNull().Any() ? this.mediaService.GetFileUrl(this.options.Value.MediaUrl, product.Images.First(), OrdersConstants.Basket.BasketProductImageMaxWidth, OrdersConstants.Basket.BasketProductImageMaxHeight, true) : null,
                        Quantity          = orderLine.Quantity,
                        ExternalReference = orderLine.ExternalReference,
                        DeliveryFrom      = orderLine.DeliveryFrom,
                        DeliveryTo        = orderLine.DeliveryTo,
                        MoreInfo          = orderLine.MoreInfo
                    };

                    basketItems.Add(basketItem);
                }
            }

            var basket = await this.basketRepository.SaveAsync(
                await HttpContext.GetTokenAsync(ApiExtensionsConstants.TokenName),
                CultureInfo.CurrentUICulture.Name,
                model.Id,
                basketItems);

            var basketResponseModel = new BasketResponseModel
            {
                Id = basket.Id
            };

            var productIds = basket.Items.OrEmptyIfNull().Select(x => x.ProductId.Value);

            if (productIds.OrEmptyIfNull().Any())
            {
                basketResponseModel.Items = basket.Items.OrEmptyIfNull().Select(x => new BasketItemResponseModel
                {
                    ProductId         = x.ProductId,
                    ProductUrl        = this.linkGenerator.GetPathByAction("Edit", "Product", new { Area = "Products", culture = CultureInfo.CurrentUICulture.Name, Id = x.ProductId }),
                    Name              = x.ProductName,
                    Sku               = x.ProductSku,
                    Quantity          = x.Quantity,
                    ExternalReference = x.ExternalReference,
                    ImageSrc          = x.PictureUrl,
                    ImageAlt          = x.ProductName,
                    DeliveryFrom      = x.DeliveryFrom,
                    DeliveryTo        = x.DeliveryTo,
                    MoreInfo          = x.MoreInfo
                });
            }

            return(this.StatusCode((int)HttpStatusCode.OK, basketResponseModel));
        }
        public async Task <IActionResult> Get()
        {
            BasketResponseModel result = await _basketService.GetAsync(User.Identity.Name);

            return(Ok(result));
        }