public async Task <UpdateBasketPayload> RemoveBasketItemAsync( BasketItemDeleteInput input, [ScopedService] ApplicationDbContext dbContext) { (Guid ownerId, Guid itemId) = input; Model.Basket basket = await dbContext .Baskets.Where(b => b.OwnerId == ownerId) .Include(b => b.BasketItems) .FirstOrDefaultAsync(); if (basket == null) { var extensions = new Dictionary <string, object?>() { { "code", "1001" }, { "id", ownerId } }; Error error = new("Invalid basket owner id", extensions : extensions); throw new QueryException(error); } // Check that the item exists BasketItem?item = basket.BasketItems.FirstOrDefault(i => i.ItemId == itemId); if (item == null) { var extensions = new Dictionary <string, object?>() { { "code", "1002" }, { "id", itemId } }; Error error = new("Invalid basket item id", extensions : extensions); throw new QueryException(error); } basket.BasketItems.Remove(item); dbContext.Remove(item); await dbContext.SaveChangesAsync(); return(new UpdateBasketPayload(basket)); }
private async Task <dynamic> RemoveBasketItem(Guid ownerId, Guid itemId) { var basketItemDeleteInput = new BasketItemDeleteInput(ownerId, itemId); IExecutionResult result = await ServiceProvider.ExecuteRequestAsync( QueryRequestBuilder .New() .SetQuery(@" mutation RemoveBasketItem($input: BasketItemDeleteInput!) { removeBasketItem(input: $input) { basket { id ownerId items { id quantity } } } } ") .SetVariableValue(name : "input", value : basketItemDeleteInput) .Create() ); // Check against the snapshot, the existing basket was returned var json = await result.ToJsonAsync(); Assert.NotNull(json); ExpandoObject response = JsonConvert.DeserializeObject <ExpandoObject>(json, new ExpandoObjectConverter()); Assert.NotNull(response); return(response); }