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