public async Task <IActionResult> AddBasketItem([FromBody] AddBasketItemRequest data)
        {
            if (data == null || data.Quantity == 0)
            {
                return(BadRequest("Invalid payload"));
            }

            // Step 1: Get the item from catalog
            var item = await _catalog.GetCatalogItem(data.CatalogItemId);

            //item.PictureUri =

            // Step 2: Get current basket status
            var currentBasket = (await _basket.GetById(data.BasketId)) ?? new BasketData(data.BasketId);

            // Step 3: Merge current status with new product
            currentBasket.Items.Add(new BasketDataItem()
            {
                UnitPrice   = item.Price,
                PictureUrl  = item.PictureUri,
                ProductId   = item.Id.ToString(),
                ProductName = item.Name,
                Quantity    = data.Quantity,
                Id          = Guid.NewGuid().ToString()
            });

            // Step 4: Update basket
            await _basket.Update(currentBasket);


            return(Ok());
        }
예제 #2
0
        public async Task <BaseResponseDto <bool> > Handle(AddBasketItemRequest request, CancellationToken cancellationToken)
        {
            BaseResponseDto <Boolean> response = new BaseResponseDto <Boolean>();

            try
            {
                var basketItem = new BasketItem
                {
                    BasketId    = request.BasketId,
                    Price       = request.Price,
                    ProductId   = request.ProductId,
                    ProductName = request.ProductName,
                    Quantity    = request.Quantity
                };
                var result = await _repository.Create(basketItem);

                if (result != null)
                {
                    response.Data = true;
                }
                else
                {
                    response.Errors.Add("An error occurred while creating BasketItem data in database.");
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
                response.Data = false;
                response.Errors.Add(exception.Message);
            }

            return(response);
        }
예제 #3
0
        public async Task <ActionResult> AddItemToBasket([FromBody] AddBasketItemRequest data)
        {
            if (data == null || data.Quantity == 0)
            {
                return(BadRequest("Invalid payload"));
            }

            // Step 1: Get the item from catalog
            var item = await _catalogService.GetCatalogItemAsync(data.CatalogItemId);

            // Step 2: Get current basket status
            var currentBasket = await _repository.GetBasketAsync(data.BasketId) ?? new CustomerBasket(data.BasketId);

            // Step 3: Merge current status with new product
            currentBasket.Items.Add(new BasketItem()
            {
                UnitPrice   = item.Price,
                ISBN13      = item.ISBN13,
                ProductId   = item.Id.ToString(),
                ProductName = item.Name,
                Quantity    = data.Quantity,
                Id          = Guid.NewGuid().ToString()
            });

            // Step 4: Update basket
            await _repository.UpdateBasketAsync(currentBasket);

            return(Ok());
        }
예제 #4
0
        public UpdateBasketItemTests()
        {
            var factory = new WebApplicationFactory <Startup>();

            _client = new CheckoutHttpClient(factory.CreateClient());

            _basketItem1 = new AddBasketItemRequest
            {
                Quantity = 2,
                Ref      = "ABC",
                Name     = "Banana",
                Price    = 2.99M,
            };

            _basketItem2 = new AddBasketItemRequest
            {
                Quantity = 1,
                Ref      = "XYZ",
                Name     = "Apple",
                Price    = 4.99M,
            };

            _updateBasketItem1Request = new UpdateBasketItemRequest
            {
                Quantity = 50
            };
        }
예제 #5
0
        public async Task <IActionResult> AddBasketItem(Guid basketId, [FromBody] AddBasketItemRequest basketItem)
        {
            if (ModelState.IsValid)
            {
                var basketItemId = await _mediatr.Send(new AddBasketItemCommand
                {
                    BasketId = basketId,
                    Ref      = basketItem.Ref,
                    Name     = basketItem.Name,
                    Price    = basketItem.Price,
                    Quantity = basketItem.Quantity
                });

                return(Ok(new AddBasketItemResponse {
                    BasketItemId = basketItemId
                }));
            }

            var errorList = ModelState.ToDictionary(
                kvp => kvp.Key,
                kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
                );

            return(BadRequest(errorList));
        }
예제 #6
0
 public async Task <BasketDto> Put([FromBody] AddBasketItemRequest request)
 {
     return(MapToDto(await _client.UpdateAsync(new UpdateItemRequest
     {
         User = request.User,
         Product = request.ProductId,
         Unit = request.Unit
     }, deadline: _deadline)));
 }
        public async Task <IActionResult> AddToBasket(string user, string session, AddBasketItemRequest request)
        {
            var task = await _basketService.AddToBasket(
                user,
                session,
                new BasketItem(request.FoodId, request.FoodName, request.ImageUrl,
                               request.UnitPrice, request.Quantity));

            return(HandleTaskResult(task));
        }
        public UpdateBasketItemBadRequestTests()
        {
            var factory = new WebApplicationFactory <Startup>();

            _client = new CheckoutHttpClient(factory.CreateClient());

            _basketItem = new AddBasketItemRequest
            {
                Quantity = 2,
                Ref      = "ABC",
                Name     = "Banana",
                Price    = 2.99M,
            };
        }
        public async Task <Guid> AddBasketItemAsync(Guid basketId, AddBasketItemRequest addBasketItemRequest)
        {
            if (addBasketItemRequest == null)
            {
                throw new ArgumentNullException(nameof(addBasketItemRequest));
            }

            return((await PostAsync <AddBasketItemInternalResponse>($"/basket/{basketId}", new AddBasketItemInternalRequest
            {
                Quantity = addBasketItemRequest.Quantity,
                Ref = addBasketItemRequest.Ref,
                Name = addBasketItemRequest.Name,
                Price = addBasketItemRequest.Price
            })).BasketItemId);
        }
        public async Task It_Returns_BadRequest_When_Quantity_Is_Invalid(int quantity)
        {
            var basketItem = new AddBasketItemRequest
            {
                Quantity = 2,
                Ref      = "ABC",
                Name     = "Banana",
                Price    = 2.99M,
            };
            var basketId      = (await _client.PostAsync <CreateBasketResponse>("/basket")).BasketId;
            var basketItem1Id = (await _client.PostAsync <AddBasketItemResponse>($"/basket/{basketId}", basketItem)).BasketItemId;

            var response = await _client.PutAsync($"/basket/{basketId}/{basketItem1Id}", new UpdateBasketItemRequest { Quantity = quantity });

            response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
        }
        public async Task <ActionResult> AddBasketItemAsync([FromBody] AddBasketItemRequest data)
        {
            if (data == null || data.Quantity == 0)
            {
                return(BadRequest("Invalid payload"));
            }

            // Step 1: Get the item from catalog
            var item = await _catalog.GetCatalogItemAsync(data.CatalogItemId);

            //item.PictureUri =

            // Step 2: Get current basket status
            var currentBasket = (await _basket.GetById(data.BasketId)) ?? new BasketData(data.BasketId);

            currentBasket.Coupon = currentBasket.Coupon ?? new Coupon
            {
                Discount = 0
            };

            // Step 3: Search if exist product into basket
            var product = currentBasket.Items.SingleOrDefault(i => i.ProductId == item.Id);

            if (product != null)
            {
                // Step 4: Update quantity for product
                product.Quantity += data.Quantity;
            }
            else
            {
                // Step 4: Merge current status with new product
                currentBasket.Items.Add(new BasketDataItem()
                {
                    UnitPrice   = item.Price,
                    PictureUrl  = item.PictureUri,
                    ProductId   = item.Id,
                    ProductName = item.Name,
                    Quantity    = data.Quantity,
                    Id          = Guid.NewGuid().ToString()
                });
            }

            // Step 5: Update basket
            await _basket.UpdateAsync(currentBasket);

            return(Ok());
        }
예제 #12
0
        public async Task <ActionResult> AddBasketItemAsync([FromBody] AddBasketItemRequest data)
        {
            if (data == null || data.Slots == 0)
            {
                return(BadRequest("Invalid payload"));
            }

            // Step 1: Get the item from scholarship
            var item = await _scholarship.GetScholarshipItemAsync(data.ScholarshipItemId);

            //item.PictureUri =

            // Step 2: Get current basket status
            var currentBasket = (await _basket.GetById(data.BasketId)) ?? new BasketData(data.BasketId);
            // Step 3: Search if exist scholarshipItem into basket
            var scholarshipItem = currentBasket.Items.SingleOrDefault(i => i.ScholarshipItemId == item.Id);

            if (scholarshipItem != null)
            {
                // Step 4: Update quantity for scholarshipItem
                scholarshipItem.Slots += data.Slots;
            }
            else
            {
                // Step 4: Merge current status with new scholarshipItem
                currentBasket.Items.Add(new BasketDataItem()
                {
                    SlotAmount          = item.Amount,
                    PictureUrl          = item.PictureUri,
                    ScholarshipItemId   = item.Id,
                    ScholarshipItemName = item.Name,
                    Slots = data.Slots,
                    Id    = Guid.NewGuid().ToString()
                });
            }

            // Step 5: Update basket
            await _basket.UpdateAsync(currentBasket);

            return(Ok());
        }
예제 #13
0
        public async Task <ActionResult> AddBasketItemAsync([FromBody] AddBasketItemRequest data)
        {
            if (data == null || data.Quantity == 0)
            {
                return(BadRequest("Invalid data"));
            }

            var item = await _productService.GetProductByIdAsync(data.ProductId);

            var currentBasket = (await _basketService.GetByIdAsync(data.BasketId)) ?? new BasketModel(data.BasketId);

            currentBasket.Items.Add(new BasketItemModel()
            {
                UnitPrice       = item.Price,
                ProductImageUrl = item.ImageUrl,
                ProductId       = item.Id,
                ProductName     = item.Name,
                Quantity        = data.Quantity
            });

            await _basketService.UpdateAsync(currentBasket);

            return(Ok());
        }
예제 #14
0
 public async Task <BaseResponseDto <Boolean> > AddBasketItemAsync(AddBasketItemRequest request)
 {
     return(await _mediator.Send(request));
 }