Beispiel #1
0
        public ICommandResult Execute(AddItemToUnauthorizedBasketCommand command)
        {
            if (command.ProductIds == null)
            {
                throw new ArgumentNullException();
            }

            var exceptions = new List <Exception>();

            foreach (var productId in command.ProductIds)
            {
                try
                {
                    var product = _productRepository.GetById(productId);

                    if (product == null)
                    {
                        return(new FailureResult(BasketCommandMessage.ProductDoesNotFound));
                    }

                    var unauthorizedBasket = _unauthorizedBasketRepository.GetBasketItems(command.CookieId);

                    if (unauthorizedBasket != null)
                    {
                        unauthorizedBasket.AddBasketItem(product);
                        _unauthorizedBasketRepository.Edit(unauthorizedBasket);
                    }
                    else
                    {
                        var basket = new UnauthorizedBasket {
                            CookieId = command.CookieId
                        };
                        basket.AddBasketItem(product);
                        _unauthorizedBasketRepository.Add(basket);
                    }
                }
                catch (Exception exception)
                {
                    _logger.Error(exception.Message);
                    exceptions.Add(exception);
                    return(new FailureResult(BasketCommandMessage.AddingItemToBasketFaild));
                }
            }

            if (exceptions.Any())
            {
                throw new AggregateException(exceptions);
            }

            _unitOfWork.Commit();
            return(new SuccessResult(BasketCommandMessage.ItemAddedToBasketSuccessfully));
        }
        public ICommandResult Execute(TransferUnauthorizedBasketCommand command)
        {
            if (command == null)
            {
                throw new ArgumentNullException();
            }

            var unauthorizedBasket = _unauthorizedBasketRepository.GetBasketItems(command.CookieId);

            var exceptions = new List <Exception>();

            if (unauthorizedBasket != null)
            {
                foreach (var productItem in unauthorizedBasket.BasketItems)
                {
                    try
                    {
                        var userBasket = _basketRepository.GetUserBasket(command.UserId);

                        if (userBasket != null)
                        {
                            AddItemsToBasket(productItem.ProductId, userBasket);
                            _basketRepository.Edit(userBasket);
                        }
                        else
                        {
                            var basket = new Basket();
                            AssignToUser(command, basket);
                            AddItemsToBasket(productItem.ProductId, basket);
                            _basketRepository.Add(basket);
                        }
                    }
                    catch (Exception exception)
                    {
                        _logger.Error(exception.Message);
                        exceptions.Add(exception);
                        return(new FailureResult(BasketCommandMessage.AddingItemToBasketFaild));
                    }
                }

                _unauthorizedBasketRepository.ClearUnauthorizedBasket(unauthorizedBasket.BasketItems);
            }

            if (exceptions.Any())
            {
                throw new AggregateException(exceptions);
            }

            _unitOfWork.Commit();
            return(new SuccessResult(BasketCommandMessage.ItemAddedToBasketSuccessfully));
        }
        public BasketQueryResponse GetBasketItems(BasketQueryRequest queryRequest)
        {
            var response = new BasketQueryResponse();

            try
            {
                var baskets = _unauthorizedBasketRepository.GetBasketItems(queryRequest, queryRequest.CookieId);

                if (baskets == null)
                {
                    response.Message = BasketQueryMessages.BasketIsEmpty;
                    return(response);
                }

                response.Basket = Mapper.Map <UnauthorizedBasket, BasketDto>(baskets);
            }
            catch (Exception exception)
            {
                _logger.Error(exception.Message);
            }

            return(response);
        }