public Stock GetStock(Guid productId) { var stockSpecification = StockExistSpecification.Create(productId); var stock = _stockRepository.Find(stockSpecification).FirstOrDefault(); return(stock); }
public async Task <Result> DeleteAsync(ProductRemoveDto removeDto) { var result = await Task.Run(() => { var result = new Result(); var exist_product = _productRepository.Get(removeDto.ProductId); if (exist_product != null) { var stockSpec = StockExistSpecification.Create(removeDto.ProductId); var exist_stock = _stockRepository.Find(stockSpec).FirstOrDefault(); if (exist_stock != null) { _stockRepository.Remove(exist_stock.Id); _stockRepository.Complete(); var stockRemovedEvent = AbstractDomainEvent <StockRemoveDto> .Create(_serviceProvider); stockRemovedEvent.Raise(exist_stock); _productRepository.Remove(removeDto.ProductId); _productRepository.Complete(); var prodRemovedEvent = AbstractDomainEvent <ProductRemoveDto> .Create(_serviceProvider); prodRemovedEvent.Raise(exist_product); } else { result.IsError = true; result.Message = "Stock not found"; result.StatuCode = 400; } } else { result.IsError = true; result.Message = "Product not found"; result.StatuCode = 400; } return(result); }); return(result); }
public async Task <Result> RemoveAsync(ProductRemoveDto productDto) { var result = await Task.Run(() => { var result = new Result(); var stock_Spec = new StockExistSpecification(productDto.CreateStock(productDto.ProductId)); var exist_stock = _stockRepository.Find(stock_Spec).FirstOrDefault(); if (exist_stock != null) { _stockRepository.Remove(exist_stock.Id); _stockRepository.Complete(); var exist_Product_Spec = new ProductExistSpecification(productDto.ProductId); var exist_Product = _productRepository.Find(exist_Product_Spec); if (exist_Product != null) { _productRepository.Remove(productDto.ProductId); _productRepository.Complete(); } else { result.IsError = true; result.Message = "Product does not exist"; result.StatuCode = 400; } } else { result.IsError = true; result.Message = "Product does not exist"; result.StatuCode = 400; } return(result); }); return(result); }
public async Task <Result> AddAsync(Dtos.ProductAddDto productDto) { var result = await Task.Run(() => { var result = new Result(); // add product var new_product = productDto.CreateProduct(); var new_stock = productDto.CreateStock(new_product.Id); var exist_Product_Spec = new ProductSameExistSpecification(new_product); // is specification satisfied? var isStaisfy = exist_Product_Spec.IsSatisfiedBy(new_product); if (isStaisfy) { var exist_product = _productRepository.Find(exist_Product_Spec).FirstOrDefault(); if (exist_product == null) { _productRepository.Add(new_product); _productRepository.Complete(); var add_product_event = AbstractDomainEvent <ProductAddDto> .Create(_serviceProvider); add_product_event.Raise(new_product); } else { result.IsError = true; result.Message = "Product exist already"; result.StatuCode = 400; } } if (!result.IsError) { // add stock var stock_Spec = new StockExistSpecification(new_stock); var exist_Stock = _stockRepository.Find(stock_Spec).FirstOrDefault(); // always statify ATM var isSatisfy = stock_Spec.IsSatisfiedBy(new_stock); if (isSatisfy) { if (exist_Stock == null) { _stockRepository.Add(new_stock); _stockRepository.Complete(); var add_stock_event = AbstractDomainEvent <StockAddDto> .Create(_serviceProvider); add_stock_event.Raise(new_stock); } else { result.IsError = true; result.Message = "Stock exist already"; result.StatuCode = 400; return(result); } } } return(result); }); return(result); }