コード例 #1
0
        public async Task <int> Clear()
        {
            var userId   = User.GetId();
            var basketId = new BasketId(userId);

            return(await _basket.Clear(basketId));
        }
コード例 #2
0
        public async Task <int> Add(ProductModel product)
        {
            var userId   = User.GetId();
            var basketId = new BasketId(userId);

            return(await _basket.AddProduct(basketId, new BasketProduct(product.Id, product.Title, product.Price)));
        }
コード例 #3
0
        public async Task <int> Remove(Guid id)
        {
            var userId   = User.GetId();
            var basketId = new BasketId(userId);

            return(await _basket.RemoveProduct(basketId, id));
        }
コード例 #4
0
 private void ConsumerHasBasketWithItems()
 {
     _basketId = new BasketId(
         Guid.NewGuid().ToString(),
         Guid.NewGuid().ToString());
     _itemReference = Guid.NewGuid().ToString();
 }
コード例 #5
0
        public async Task <BasketModel> Get()
        {
            var userId = User.GetId();
            var id     = new BasketId(userId);
            var basket = await _basket.Get(id);

            return(new BasketModel(basket));
        }
コード例 #6
0
 public void Do(BasketId basketId,
                string productReference)
 {
     _basketRepository.AddItem(basketId.ConsumerId,
                               basketId.Id,
                               productReference,
                               1);
 }
コード例 #7
0
        public void Do(BasketId basketId)
        {
            BasketDTO basket = _basketRepository.Get(basketId.ConsumerId, basketId.Id);

            if (basket != null)
            {
                _basketRepository.Delete(basketId.ConsumerId, basketId.Id);
            }
        }
コード例 #8
0
 public void Do(BasketId basketId,
                string itemReference,
                int quantity)
 {
     if (quantity <= 0)
     {
         _basketRepository.DeleteItem(basketId.Id,
                                      itemReference);
     }
     else
     {
         _basketRepository.UpdateItem(basketId.Id,
                                      itemReference,
                                      quantity);
     }
 }
コード例 #9
0
        public IActionResult PostItemBasket(string consumerId,
                                            string basketId,
                                            [FromBody] AddItemResource itemResource)
        {
            BasketId  id     = new BasketId(basketId, consumerId);
            BasketDTO basket = _basketQuery.Get(id);

            if (basket == null)
            {
                return(new BadRequestResult());
            }

            _addItemToBasketCommand.Do(id, itemResource.Reference);

            return(GetBasket(consumerId, basketId));
        }
コード例 #10
0
        public async Task <int> AddProduct(BasketId id, BasketProduct basketProduct)
        {
            Validator.Begin(basketProduct, nameof(basketProduct))
            .NotDefault()
            .ThrowApiException(nameof(BasketService), nameof(AddProduct));
            var basket = await _repository.Get(id);

            if (basket == null)
            {
                basket = new Basket(id, new EmptyBasketState(_config.GetMaxBasketSize()));
            }
            basket.Add(basketProduct);
            await _repository.Save(basket);

            return(await _uow.SaveAsync());
        }
コード例 #11
0
        public IActionResult PutItemBasket(string consumerId,
                                           string basketId,
                                           string itemId,
                                           [FromBody] UpdateItemQuantityResource resource)
        {
            BasketId  id     = new BasketId(basketId, consumerId);
            BasketDTO basket = _basketQuery.Get(id);

            if (basket == null)
            {
                return(new BadRequestResult());
            }

            _updateItemQuantityCommand.Do(id,
                                          itemId,
                                          resource.Quantity);

            return(GetBasket(consumerId, basketId));
        }
コード例 #12
0
ファイル: OrderController.cs プロジェクト: venom3333/CPK2
        public async Task <Guid> CreateAndClearBasket(CreateOrderShortModel model)
        {
            using (var tran = await _context.Database.BeginTransactionAsync(IsolationLevel.ReadCommitted))
            {
                var buyer  = User.GetId();
                var bid    = new BasketId(buyer);
                var basket = await _basket.Get(bid);

                await _basket.Clear(bid);

                var order = new Order(
                    basket.Lines.Select(l => new OrderLine(new OrderProduct(l.Product.Id, l.Product.Title, l.Product.Price), l.Quantity)),
                    new Client(buyer),
                    new Address(model.Address)
                    );
                var id = await _service.Create(order);

                await tran.CommitAsync();

                return(id.Value);
            }
        }
コード例 #13
0
ファイル: BasketRepository.cs プロジェクト: venom3333/CPK2
        public async Task <Basket> Get(BasketId id)
        {
            var basket = await _context.Baskets.Include(b => b.Lines).ThenInclude(l => l.Product).FirstOrDefaultAsync(b => b.Id == id.Value);

            return(basket?.ToBasket(_config.MaxBasketSize));
        }
コード例 #14
0
ファイル: BasketQuery.cs プロジェクト: joffreykern/Checkout
 public BasketDTO Get(BasketId basketId)
 {
     return(_basketRepository.Get(basketId.ConsumerId,
                                  basketId.Id));
 }
コード例 #15
0
 private void HaveBasket()
 {
     _basketId = new BasketId(
         Guid.NewGuid().ToString(),
         Guid.NewGuid().ToString());
 }
コード例 #16
0
ファイル: BasketModel.cs プロジェクト: venom3333/CPK2
 public Basket ToBasket(BasketId id, int maxSize) => new Basket(id, BasketState.Create(Lines.Select(l => l.ToBasketLine()), maxSize));
コード例 #17
0
 public async Task <int> Clear(BasketId id)
 {
     if (id.Equals(default))