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 <BasketServiceModel> UpdateAsync(UpdateBasketServiceModel serviceModel) { var basketModel = new BasketRepositoryModel { Id = serviceModel.Id, Items = serviceModel.Items.OrEmptyIfNull().Select(x => new BasketItemRepositoryModel { 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 }) }; var result = await this.basketRepository.UpdateBasketAsync(basketModel); return(new BasketServiceModel { Id = result.Id, Items = result.Items.OrEmptyIfNull().Select(x => new BasketItemServiceModel { 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 }) }); }