Beispiel #1
0
        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);
        }