public DecProductQuantityService(IProductDetailCommandFactory commandFactory, IShoppingRepository shoppingRepository, IShoppingQueryRepositorySpecificationFactory shoppingRepositorySpecFactory, IShoppingItemRepository shoppingItemRepository, IShoppingItemByIdRepositorySpecificationFactory shoppingItemRepositorySpecFactory) { this.commandFactory = commandFactory; this.shoppingRepository = shoppingRepository; this.shoppingRepositorySpecFactory = shoppingRepositorySpecFactory; this.shoppingItemRepository = shoppingItemRepository; this.shoppingItemRepositorySpecFactory = shoppingItemRepositorySpecFactory; }
public void DecQuantity(IShoppingRepository shoppingQueryRepository, IShoppingQueryRepositorySpecificationFactory shoppingQueryRepositorySpecificationFactory, IShoppingItemRepository shoppingItemRepository, IShoppingItemByIdRepositorySpecificationFactory shoppingItemByIdRepositorySpecificationFactory, Action <IProductAggregation> success, Action <Exception> error) { --Quantity; if (Quantity < 0) { Quantity = 0; Discount = 0; } else { UpdateDiscount(); } Persist(shoppingQueryRepository, shoppingQueryRepositorySpecificationFactory, shoppingItemRepository, shoppingItemByIdRepositorySpecificationFactory, success, error); }
public void IncQuantity(IShoppingRepository shoppingQueryRepository, IShoppingQueryRepositorySpecificationFactory shoppingQueryRepositorySpecificationFactory, IShoppingItemRepository shoppingItemRepository, IShoppingItemByIdRepositorySpecificationFactory shoppingItemByIdRepositorySpecificationFactory, Action <IProductAggregation> success, Action <Exception> error) { ++Quantity; UpdateDiscount(); Persist(shoppingQueryRepository, shoppingQueryRepositorySpecificationFactory, shoppingItemRepository, shoppingItemByIdRepositorySpecificationFactory, success, error); }
/// <summary> /// /// </summary> /// <param name="shoppingQueryRepository"></param> /// <param name="shoppingQueryRepositorySpecificationFactory"></param> /// <param name="shoppingItemRepository"></param> /// <param name="shoppingItemByIdRepositorySpecificationFactory"></param> /// <param name="success"></param> /// <param name="error"></param> private void Persist(IShoppingRepository shoppingQueryRepository, IShoppingQueryRepositorySpecificationFactory shoppingQueryRepositorySpecificationFactory, IShoppingItemRepository shoppingItemRepository, IShoppingItemByIdRepositorySpecificationFactory shoppingItemByIdRepositorySpecificationFactory, Action <IProductAggregation> success, Action <Exception> error) { shoppingQueryRepository.Find(shoppingQueryRepositorySpecificationFactory.NewActiveShoppingSpec(), shoppings => { if (shoppings.Count == 0 || shoppings[0].IsFinished) { error.Invoke(new NoActiveShoppingException()); return; } var shopping = shoppings[0]; shoppingItemRepository.GetById(shoppingItemByIdRepositorySpecificationFactory.NewQuerySpec(shopping, Id), shoppingItem => { if (shoppingItem == ShoppingItemEntity.Empty) { shoppingItemRepository.Insert(new ShoppingItemEntity(shopping, this), id => { success.Invoke(this); }, err => { error(err); }); } else { shoppingItemRepository.Update(new ShoppingItemEntity(shopping, this), shoppingItemByIdRepositorySpecificationFactory.NewUpdateSpec(shopping, Id), id => { success.Invoke(this); }, err => { error(err); }); } }, err => { error(err); }); }, err => { error(err); }); }