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> 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); }
public async Task <Result> AddAsync(SaleAddClientModel dto) { var result = new Result(); // customer var existCustomer = await GetCustomer(dto); // sale-person var existPerson = await GetSalePerson(dto); var newSale = await GetExistSaleAsync(dto, existCustomer.Id, existPerson.Id); if (newSale == null) { // sale newSale = dto.Create(); newSale.CustomerId = existCustomer.Id; newSale.SalePersonId = existPerson.Id; var createSale = await _saleRepository.AddAsync(newSale); await _saleRepository.CompleteAsync(); // sale event var sale_added_event = AbstractDomainEvent <SaleAddClientModel> .Create(_serviceProvider); await sale_added_event.RaiseAsync(createSale); // order var order = new Order() { SaleId = createSale.Id }; var createdOrder = await _orderRepository.AddAsync(order); await _orderRepository.CompleteAsync(); //sale event var orderAddedEvent = AbstractDomainEvent <OrderAddClientModel> .Create(_serviceProvider); await orderAddedEvent.RaiseAsync(createdOrder); // product dto.ProductIds.ForEach(p => { var existProducts = _productRepository.Find(x => x.ProductId == p); var existProduct = existProducts.FirstOrDefault(); if (existProduct == null) { _productRepository.Add(dto.Product(p)); } // order-product var orderProduct = dto.CreateOrderProduct(createdOrder.Id, existProduct.Id); var createOrderProduct = _orderProductRepository.Add(orderProduct); }); await _productRepository.CompleteAsync(); await _orderProductRepository.CompleteAsync(); result.Value = newSale.ToString(); } else { result.IsError = true; result.Message = "Sale does exist"; result.StatuCode = 400; } return(result); }
private async Task SaleUdpateEvent(Sale exist_sale) { var saleUpdateEvent = AbstractDomainEvent <SaleUpdateClientModel> .Create(_serviceProvider); await saleUpdateEvent.RaiseAsync(exist_sale); }