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)); }
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); }
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)); }